前言
如题的功能,主要就是将u3d开发的程序内将画面推流给服务器将摄像机内容分享出来,然后其他应用场景可以通过播放直播流画面,看直播。
效果
如上图的效果,本机运行情况下,有4-5s的延迟。
准备工作
我们这里用到的功能就是插件:VR Capture Plugin是推流插件,之后还需要一个视频流服务器程序。
推流插件
VR Capture Plugin这个插件顾名思义,基本就是支持VR 截图的插件,但是我们unity3d做的工作是采集并上传视频流(推流),这里我只用到了“Video Capture”组件进行推流,后续会详解推流操作,其它功能也没做研究。
直播服务器软件
这个网上推荐的很多,而且公司的是内部人员开发部署的,请大家自行查找配置,好像比较简单的就是node.js实现。
实现过程
导入插件
这个就不赘述了。
设置推流
打开Assets\RockVR\Video\Demo路径下的Demo_04_VideoLiveCapture.unity,找到“DedicatedCapture”节点,进行如下设置:
选择实时推流,而且填入推流的地址即可。
其它
我这里因为有其它操作,是脚本延时开启了推流:
using UnityEngine;
using RockVR.Video;
using System.Diagnostics;
public class LiveVideoCtrl : MonoBehaviour
{
private void Awake()
{
Application.runInBackground = true;
Invoke("StartLiveStreaming", 3);
}
void StartLiveStreaming()
{
if (IsInvoking("StartLiveStreaming"))
CancelInvoke("StartLiveStreaming");
if (VideoCaptureCtrl.instance != null)
{
if (VideoCaptureCtrl.instance.status == VideoCaptureCtrl.StatusType.NOT_START ||
VideoCaptureCtrl.instance.status == VideoCaptureCtrl.StatusType.FINISH ||
VideoCaptureCtrl.instance.status == VideoCaptureCtrl.StatusType.STOPPED)
VideoCaptureCtrl.instance.StartCapture();
if (VideoCaptureCtrl.instance.status == VideoCaptureCtrl.StatusType.PAUSED)
VideoCaptureCtrl.instance.ToggleCapture();
}
Invoke("StartLiveStreaming", 5);
}
private void OnApplicationQuit()
{
if (VideoCaptureCtrl.instance != null && VideoCaptureCtrl.instance.status != VideoCaptureCtrl.StatusType.NOT_START)
VideoCaptureCtrl.instance.StopCapture();
}
}
加了时间显示,方便对比延时:
using UnityEngine;
using UnityEngine.UI;
public class sshowtime : MonoBehaviour
{
public Text TimeText;
void Update()
{
if (TimeText != null)
TimeText.text = System.DateTime.Now.ToString();
}
}
项目源码
https://download.csdn.net/download/qq_33789001/24399688
|