Unity官方流化功能接入细节

之前公司提出要提供流化的方案,就让同事基于Unity的官方流化方案,出了一个临时的版本。最近要正式使用,制作过程中遇到一个问题,就参与其中一起处理了一下,也正好熟悉了下流化的流程。
Unity官方针对流化提供了两个包
WebRTC 对libwebrtc的封装
UnityRenderStreaming 对WebRTC库的封装,以及测试库

UnityRenderStreaming项目

项目根节点下有几个重要的文件夹
com.unity.renderstreaming 提供流化解决方案的包
WebApp 流化方案中信令服务器和流化服务器,一个node.js的服务器,
com.unity.template.renderstreaming-hd提供支持HDRP的流化解决方案的例子

WebRTC项目

本身WebRTC是谷歌推出的一套解决方案,Unity的WebRTC也是基于官方的解决方案来做的集成,本库中Plugins文件夹里面就是各个平台的libwebrtc的库。帮助页提供了自己构建libwebrtc的说明。可以下载源码,自己构建,方便调试。

使用流程

客户端

新建Unity工程引入com.unity.renderstreaming整个包后,就可以导入包中带的例子。

服务器

安装nodejs
运行WebApp里面run.bat,运行需要管理员权限,貌似需要运行两次才能成功,具体原因没查
服务器支持三种方式,HTTP,WebSocket,Furioos,前面两个是 很通用的通讯方式,Furioos这个是Unity的官方流化平台,可能有针对性的修改
WebApp想要启用WebSocket方式的话,需要修改index.ts文件中的一个开关,如下
.option('-w, --websocket', 'Enable Websocket Signaling', process.env.WEBSOCKET || false)
把里面的false改成true,如下
.option(‘-w, --websocket’, ‘Enable Websocket Signaling’, process.env.WEBSOCKET || true)

对WebRTC的理解

这里仅记录对WebRTC的理解,可能有不对的地方,大家具体还是要看官方文档。
WebRTC想要实现流化,会有两个大阶段

信令阶段

想要把Unity的画面传输到浏览器,需要一个中间的信令服务器,unity启动会把自己注册到信令服务器,浏览器启动也需要去信令服务器去寻找提供流化服务器的设备,这就需要有个大家都知道的服务器来进行信息的交换。

通讯建立阶段

信令阶段完成后,就需要通过发送sdp信息来告诉对方,自己的一些信息。sdp信息中会包含自己支持的编码格式。通过发起方发送offer消息,接收方通过onOffer来接受offer消息,然后发送接收方保存发送方的sdp信息,然后把自己的sdp信息通过answer发送给发起方。期间会发送candidate消息,来收集双方可以使用的p2p通讯方式。当信息沟通好后,双方就可以直接开始发送视频和一些行为信息。

细节

  1. webrtc通过建立数据通道的方式,使得可以把浏览器的鼠标和键盘行为发送到unity,然后unity把这些消息转化成UI事件,就可以实现浏览器操控了。
  2. 发起方的sdp中可以先只建立通讯,然后再新的offer-answer中沟通视频协议。
  3. chrome中可以在地址栏中输入chrome://webrtc-internals/,来看到webrtc通讯的通讯和调试信息
  4. trickle-ice测试nat是否建立成功的网站
  5. UnityRenderStreaming中提供了开启log的开关,但是测了几个版本,都会崩溃,导致无法看到log。

猜你喜欢

转载自blog.csdn.net/t163361/article/details/127507131
今日推荐