Unity内接入WebRTC视频流

这篇具有很好参考价值的文章主要介绍了Unity内接入WebRTC视频流。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、说明

	目前Unity内基于谷歌的WebRTC通讯存在一定技术壁垒,所以选择与前端HTML结合解决需求。由前端提供JS与HTML,HTML内由前端编写了可以适配并且可以正常播放WebRTC视频流;然后在Unity内导入插件“WebViewForWindow”,该插件可以在Unity内通过API加载HTML网页到UI面板或者三维场景,并且可以对网页内容进行点击等操作。从而解决了WebRTC视频流的功能难点。

二、流程

1.在Unity工程内导入“WebViewForWindow”插件,得到如图文件夹。
Unity内接入WebRTC视频流
2.将该路径下的预制体拖到场景内的Canvas下
Unity内接入WebRTC视频流
3.如果填入Url,直接Unity运行可直接加载网页(但是不适配我们本次功能需求,只做介绍)
Unity内接入WebRTC视频流
4.我们需要通过http接口请求返回WebRTC流(如果是其他方式拿到WebRTC视频流流程一样),并且将该流写入HTML文件内对应的url位置。所以我们要先去布置HTML和JS文件在工程内的位置和应用。我们此次把JS文件以及HTML文件放在了StreamingAssets文件夹下。方便读取以及后续适配打包发布exe版本不需要考虑JS、HTML文件位置和路径。
Unity内接入WebRTC视频流
5.在Unity内编写可以读写HTML的功能。根据需求读写HTML内的WebRTC流的位置即可。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;
public class WriteHtml : MonoBehaviour
{
    private List<string> htmlContent = new List<string>();//用于读写html的容器
    private string path = Application.streamingAssetsPath + "/test.html";//前端网页位置
    private int webrtcIndex = 23;//网页内webrtc所在行的下标

    private string newWebRtc;//传入的新的webrtc地址

    public static WriteHtml _instance;
    private void Awake()
    {
        _instance = this;
    }

    // Start is called before the first frame update
    void Start()
    {
        //测试
        ReadHtmlTxt("填入webrtc视频流地址")
    }
    /// <summary>
    /// 读取html
    /// </summary>
    /// <param name="_newWebRtc">webrtc视频流地址</param>
    public void ReadHtmlTxt(string _newWebRtc) 
    {
        newWebRtc = "var url = '" + _newWebRtc+ "';";
        htmlContent = new List<string>();
        try
        {
            // 创建一个 StreamReader 的实例来读取文件 
            // using 语句也能关闭 StreamReader
            using (StreamReader sr = new StreamReader(path))
            {
                string line;

                // 从文件读取并显示行,直到文件的末尾 
                while ((line = sr.ReadLine()) != null)
                {
                    //Console.WriteLine(line);
                    Debug.Log(line);
                    htmlContent.Add(line);
                }
            }
        }
        catch (Exception e)
        {
            // 向用户显示出错消息
            //Console.WriteLine("The file could not be read:");
            //Console.WriteLine(e.Message);
            Debug.Log(e.Message);
            Debug.Log("The file could not be read:");
        }
        WriteHtmlTxt();
    }
    /// <summary>
    /// 写入html
    /// </summary>
    public void WriteHtmlTxt() 
    {
        using (StreamWriter sw = new StreamWriter(path))
        {

            for (int i = 0; i < htmlContent.Count; i++)
            {
                if (i == webrtcIndex) 
                {
                    sw.WriteLine(newWebRtc);
                    continue;
                }
                sw.WriteLine(htmlContent[i]);
            }
        }
    }
}

html相关内容

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>webrtc 视频播放</title>
</head>
<style>
.videoStyle{
width:100%;
height:100%;
position:fixed;
left:0;
top:0;
bottom:0;
right:0
}
</style>
<body>
    <video id="video_webrtc" controls class='videoStyle'></video>
	<script type="text/javascript" src="./jswebrtc.min.js"></script>
	<script type="text/javascript">
		var video = document.getElementById('video_webrtc');
		var url = '填入webrtc视频流地址';
		var option={ 
			video: video, 
			autoplay: true 
		}
		var player = new JSWebrtc.Player(url,option);
	</script>
</body>
</html>

6.然后要通过代码,让插件读取StreamingAssets下的HTML文件即可。
具体代码调用如下:
声明变量public CanvasWebViewPrefab canvasWebViewPrefab;调用canvasWebViewPrefab.WebView.LoadUrl(“file://” +Application.streamingAssetsPath + “/test.html”);就可以显示出来前端的网页了。具体该预制体的窗口大小可以根据需求调整,插件会进行适配。
要注意的点就是 该预设上的脚本“CanvasWebViewPrefabs.cs”脚本内的Start方法会将进行初始化工作,所以LoadUrl方法要在初始化之后调用。可以通过if (canvasWebViewPrefab.WebView.IsInitialized) ;该API去判定初始化是否完成。WebView该接口字段为核心内容,其中的API都可以应对需求,如果今后需求有变,可参考该接口的字段和方法。

public CanvasWebViewPrefab canvasWebViewPrefa
canvasWebViewPrefa.WebView.LoadUrl("file://" + Application.streamingAssetsPath + "/test.html");

另外还要说的就是,LoadUrl方法可以读取本地的HTML文件也可以读取Http的连接。
如果对插件不熟悉,可以上网查看对应的API和示例场景的内容。

三、windows电脑关于绿幕问题的设置

WebViewForWindow插件的浏览器内核是谷歌chrome浏览器。
1.如果开启硬件加速会出现这样的绿幕情况,需要关闭浏览器内设置的硬件加速选项。
Unity内接入WebRTC视频流
Unity内接入WebRTC视频流
2.需要在winodw设置内图形设置下设置GoogleChrome为高性能模式:
参考下方视频添加谷歌浏览器到图形性能首选项的列表,并且设置为高性能模式。
Unity内接入WebRTC视频流
设置成功之后颜色会正常文章来源地址https://www.toymoban.com/news/detail-427927.html

到了这里,关于Unity内接入WebRTC视频流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • VUE3 播放RTSP实时、回放(NVR录像机)视频流(使用WebRTC)

    VUE3 播放RTSP实时、回放(NVR录像机)视频流(使用WebRTC)

    1、下载webrtc-streamer,下载的最新window版本 Releases · mpromonet/webrtc-streamer · GitHub  2、解压下载包  3、webrtc-streamer.exe启动服务 (注意:这里可以通过当前文件夹下用cmd命令webrtc-streamer.exe -o这样占用cpu会很少,直接双击exe文件会占用cpu) cmd  webrtc-streamer.exe -o 启动如下图所示,

    2024年04月12日
    浏览(16)
  • 安防视频管理平台GB设备接入EasyCVR, 如何获取RTMP与RTSP视频流

    安防视频管理平台GB设备接入EasyCVR, 如何获取RTMP与RTSP视频流

    安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,比如:视频监控直播、云端录像、云存储、录

    2024年02月15日
    浏览(14)
  • vue2使用rtsp视频流接入海康威视摄像头(纯前端)

    vue2使用rtsp视频流接入海康威视摄像头(纯前端)

    海康威视官方的RTSP最新取流格式如下: rtsp://用户名:密码@IP:554/Streaming/Channels/101 用户名和密码 IP就是登陆摄像头时候的IP(笔者这里IP是192.168.1.210) 所以笔者的rtsp流地址就是 rtsp://用户名:密码@192.168.1.210:554/Streaming/Channels/101 1.1关闭 萤石云的接入 1.2 调整视频编码为H.264 在此下载

    2024年04月26日
    浏览(15)
  • Qt推流程序(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)可在网页和播放器远程观看

    Qt推流程序(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)可在网页和播放器远程观看

    推流直播就是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号从手机端,电脑端,摄影机端打包传到服务器的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验比较糟糕。主流

    2024年02月04日
    浏览(45)
  • 【Uni-app 引入海康h5player并接入ws视频流】

    【Uni-app 引入海康h5player并接入ws视频流】

    内容简介 采用uni-app中的renderjs 引入海康H5 SDK 后端接入海康综合安防平台的开放API获取预览流 海康H5 SDK 下载地址 接入原因 因在移动端接入不管是hls flv rtsp rtmp流的播放稳定性和速度均很慢,特采用ws直连流来播放,效率很稳定性均显著提高。因采用前者流可以直接使用原生

    2024年02月11日
    浏览(9)
  • Unity3d C#快速打开萤石云监控视频流(ezopen)支持WebGL平台,替代UMP播放视频流的方案(含源码)

    Unity3d C#快速打开萤石云监控视频流(ezopen)支持WebGL平台,替代UMP播放视频流的方案(含源码)

    Universal Media Player算是视频流播放功能常用的插件了,用到现在已经不知道躺了多少坑了,这个插件虽然是白嫖的,不过被甲方和领导吐槽的就是播放视频流的速度特别慢,可能需要几十秒来打开监控画面,等待的时间较久。还有当输出WebGL的时候视频无法播放,这个问题也一

    2024年02月14日
    浏览(41)
  • Unity WebGL 播放视频流m3u8

    Unity WebGL 播放视频流m3u8

    目录 介绍 步骤 1.导入AVProVideo插件,创建场景,创建空物体添加MediaPlayer组件设置m3u8视频地址以及WebGL平台设置  2.在Canvas下创建Avpro Video,为MediaPlayer赋值  3.可以现在编辑器模式下测试视频地址是否可以播放,然后打包  4.打包完成后,将文件hls.min.js复制到Build文件夹下: 5

    2023年04月10日
    浏览(14)
  • 【音视频】基于NGINX如何播放rtmp视频流

    【音视频】基于NGINX如何播放rtmp视频流

    现阶段直播越来越流行,直播技术发展也越来越快。Webrtc、rtmp、rtsp是比较火热的技术,而且应用也比较广泛。本文通过实践来展开介绍关于rtmp如何播放。 本文重点介绍基于NGINX如何播放rtmp视频流 可以参考上一篇博文:【音视频】基于webrtc协议浏览器播放rtsp https://blog.csdn.n

    2024年01月19日
    浏览(22)
  • 【精选】基于OpenCV的实时视频流车牌识别(源码&教程)

    【精选】基于OpenCV的实时视频流车牌识别(源码&教程)

    近年来,智能交通系统(ITS)在我国应用日益广泛。作为ITS重要组成部分的自动车牌识别系统在交通流量检测、交通诱导控制、违章车辆监控等方面有着广泛的应用,是确保道路安全畅通的重要手段,也为统计有关资料,为管理者决策提供有效数字依据的重要途径。由于一般的识别系

    2024年01月23日
    浏览(46)
  • Unity3d 获取场景中摄像头视频流,实现直播效果(无需代码)

    Unity3d 获取场景中摄像头视频流,实现直播效果(无需代码)

    下面是具体操作流程:   1. 搭建服务器,选用github 一个开源的 node.js服务器。 下载地址GitHub - iizukanao/node-rtsp-rtmp-server: RTSP/RTMP/HTTP hybrid server,点击克隆,选择ZIP下载。  2. 下载node.js( 官网链接 Node.js)   选择下载最新版本,并根据提示一步步安装即可。 3.搭建服务器。 找到

    2023年04月08日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包