ccruiの博客

ccruiの博客

Unity 云渲染文档

83
2023-08-10

前言

本文档写于2023/7/21,主要介绍Unity云渲染的使用方法,教程内使用的UnityRenderStreaming版本为3.1.0-exp.5,若版本更新,文档内容可能会有所变动。

环境要求

Unity版本要求

  • Unity 2020.3
  • Unity 2021.3
  • Unity 2022.2

操作系统要求

  • Windows
  • MacOS
  • Linux
  • ios
  • Android (不支持ARMv7)

浏览器要求

浏览器WindowsMaciOSAndroid
Google Chrome:white_check_mark::white_check_mark::white_check_mark:
Safari:white_check_mark::white_check_mark:
Firefox:white_check_mark:
Microsoft edge (Chromium based):white_check_mark:

注意:在Safari和iOS Safari浏览器中,WebRTC功能无法在http下使用,必须使用https。

输入系统

UnityRenderStreaming仅支持UnityInput System,不支持Legacy Input System

云渲染部署

创建Unity项目

打开Unity Hub,点击New按钮,创建一个新的Unity项目(支持SRP,URP,HDRP)。

UnityRenderStreaming安装

  1. 在菜单栏中选择Window > Package Manager
    1689916597292.png
  2. Package Manager window窗口中点击+按钮,然后选择Add package by name。如果你使用的是Unity 2020.3版本,选择通过git URL添加包
    1689916649021.png
  3. 输入com.unity.renderstreaming,3.1.0-exp.5,然后点击Add按钮
    1689916717793.png
  4. 安装包后会自动打开渲染流向导窗口。选择全部修复
    wizard_fixall.png

UnityRenderStreaming配置

在Unity场景中创建空物体,并命名为RenderStreamingManager,并在物体上添加以下组件:
1689917399106.png

添加完成脚本后,按照下方的配置进行设置摄像机与音频的流传输

脚本中视频传输分辨率可在Video Stream Sender脚本中的Custom Value变量中设置,视频与音频的传输码率可在Video Stream Sender脚本中的Bitrate(kbits/sec)变量中设置

1689917592029.png

1689920281387.png

RenderStreaming脚本中的其他设置将在下文中详细介绍

本地测试

根据操作系统下载 UnityRenderStreaming WebApp

1689917828959.png

下载后,运行WebApp程序与Unity程序,浏览器访问http://127.0.0.1,选择Receiver Sample

browser_index_page.png

点击播放,即可在浏览器中看到Unity场景

部署STUN/TURN服务器

STUN/TURN服务器是用于在NAT网络中建立点对点连接的服务器,如果你连接双方在同一个局域网内或均有公网ip,可以不用部署STUN/TURN服务器

本文档中使用的STUN/TURN服务器为Coturn,服务器操作系统为Ubuntu 22.04.2 LTS

安装Coturn

sudo apt-get update
sudo apt-get install coturn
dpkg -L coturn

配置文件路径:/etc/turnserver.conf

修改配置内容

listening-port=3478 #监听端口
external-ip=【ip】 #公网ip
user=【用户名】:【密码】 #用户名:密码
realm=【域名】 #绑定域名

启动Coturn

前台启动

turnserver

后台启动

service coturn start

初次运行请使用非后台启动,会显示当前运行状态,如果有错误会直接显示在控制台上

验证监听

lsof -n -i4TCP:3478 | grep LISTEN

测试STUN/TURN服务器

在教程编写的时候,Chrome内核浏览器对TURN服务器的支持不是很好,需要使用Firefox浏览器进行测试

访问 https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

删除默认的STUN服务器,添加自己的TURN服务器

1689919010173.png

1689919116059.png

进行测试,如果测试列表中出现srflxrelay,则说明STUN/TURN服务器配置成功

1689919198241.png

部署Web服务器(信令服务器)

本文档将使用源码部署UnityRenderStreaming WebApp服务器,请保证服务器中已安装Node.jsnpm

下载源码 https://github.com/Unity-Technologies/UnityRenderStreaming/tree/main/WebApp

打开 /WebApp/client/public/js/config.js 文件,修改以下内容

export function getRTCConfiguration() {
  let config = {};
  config.sdpSemantics = 'unified-plan';
  config.iceServers = [
    { 
      urls: 'stun:【域名】:【端口3478】' 
    },
    { 
      urls: 'turn:【域名】:【端口3478】', 
      username: '【用户名】', 
      credential: '【密码】' 
    }
  ];
  return config;
}

将源码上传至服务器,进入WebApp目录,执行以下命令

npm install
npm run start -- -p 9089

若在npm install时出现错误,请使用以下命令

npm install --legacy-peer-deps

成功开启后,访问http://【服务器ip】:9089,若出现以下界面,则说明服务器部署成功

1689920133125.png

云渲染测试

配置RenderStreamingManager物体上的Render Streaming脚本

1689920430509.png

打开浏览器,访问http://【服务器ip】:9089,选择Receiver Sample,点击播放,即可在浏览器中看到Unity场景

1689920497490.png