查看原文
其他

UE4像素流应用在公有云上的快速部署指南

周澄清 虚幻引擎 2020-09-06

注:为了更好的帮助读者理解和学习,本文有大量辅助资料和外部链接,建议点击文末“阅读原文”查看完整文章。如有任何相关问题,欢迎在文末留言,我们会在年后的技术直播中为大家解答。


UE4的像素流自4.21推出Beta版后,以其跨平台,零安装、高画质、低延迟等特性备受瞩目,很多用户已经根据官方文档在局域网环境中体验到了像素流的强大,更有国外用户利用像素流技术取得了商业上的巨大成功。


如今,高带宽、低延迟的5G时代触手可及,很多用户都不再仅仅满足于局域网,而想要将像素流的应用部署在更为广阔的云端以惠及大众。遗憾的是官方文档中关于公有云上部署像素流应用的资料并不详尽, 故而本文在这里给大家介绍如何将像素流应用快速部署在公有云之上。

本文假设读者对像素流技术已经具备基础知识,已经可以根据官方文档部署局域网环境内的像素流应用。如果读者还不十分了解,可以先通过以下官方文档的链接进行了解。
https://docs.unrealengine.com/zh-CN/Platforms/PixelStreaming/index.html

这里我们以亚马逊中国EC2虚拟云服务器(北京一区)为例,当然我也测试了国内其他的云平台,主要步骤大同小异,所以就不再一一说明。    

好了,那么让我们进入正题。此篇指南可分为以下5个内容:
  • 创建实例(Instance)

  • 操作系统内的环境设置

  • 启动像素流应用及相关服务

  • UE4.24对像素流的改进与增强

  • 未来的工作


01
创建实例(Instance)

镜像的选择
每个云平台都提供许多预设的镜像选择,由于像素流技术目前只支持Windows操作系统,所以我们需要选择Windows Server的镜像,2012/2016/2019皆可。我们这里选择了Windows Server 2016 R2 简体中文版的镜像,之所以选择这个版本主要原因AWS 中国直接提供了这个版本下显卡的GRID驱动,省去了去Nvidia网站申请试用的麻烦。另外Community AMI 里有Windows Server with Tesla Driver的镜像,但这里的驱动不是GRID驱动,所以还是需要按照下文安装GRID驱动。


(备选)在 AWS 中国 北京一区 使用预建的公有镜像 进行快速测试

我将自己在AWS 中国一区搭建的测试服务器做成了一个公有镜像,该镜像主要预装了.NetFramework3.5, GRID 驱动, Epic 启动器,Unreal Engine4 和两个像素流示例程序。读者如果也有同地区的账号,可以通过控制台=> AMIs => 选择Public Images => 搜索”UE4” => 选择“UE4PSDemoInstance” => Launch(启动)=>然后根据下文将其余部分设置完成。

账号: Administrator
初始密码:WeiShiXuYun,HuanYouShiShang



实例类型的配置
要运行UE4的应用当然需要选择有GPU的实例,用户要确保其配置能够流畅运行目标UE4应用。我们这里为了测试方便选择了g3.4xlarge实例(16vCPU+128G内存+Nvidia Tesla M60*), 这个配置和我们的开发机相比瓶颈显然在GPU上,Tesla M60的3D性能相当于GTX 970左右,所幸这里的示例程序场景并不复杂。

注*:虚幻引擎从4.24 版本开始,像素流可以支持高级媒体框架(AMF )的AMD的显卡

然后在“Add Storage”页面加一个128G(根据实际需求即可)的SSD硬盘,其他都可以暂时按照默认设置即可。

网络相关设置

像素流应用需要实例有一个公网IP, 所以确保创建时动态分配一个公网IP。AWS上直接使用默认设置即可。


网络带宽的话如果一个实例只服务一路连接的话,1080p/60fps下大概默认需要8~10Mbps的带宽,但是考虑到测试时有可能有多路连接以及远程桌面同时使用,带宽可以设置为50~100Mbps。AWS上直接使用默认设置即可。


安全组设置,像素流应用需要打开一些特定的网络端口,如果只是简单测试的话可以修改当前实例所在的安全组将Inbound和Outbound下所有的网络端口都打开。当然在正式发布时,你应该按照官方文档的说明,只打开用到的端口。
https://docs.unrealengine.com/zh-CN/Platforms/PixelStreaming/PixelStreamingReference/index.html


02
操作系统内的环境设置

显卡驱动的安装

由于NVidia的显卡在虚拟环境上运行DirectX/OpenGL/Vulkan需要专门的GRID License及驱动, 所以我们应该优先选择预装了GRID 驱动的镜像。如果没有的话,则需要根据各大云平台官方文档自行安装。上节中选择的镜像并没有预装GRID驱动,所以我们需要自行安装。AWS 中国提供了Windows的GRID驱动,可以通过下面这段PowerShell脚本下载到实例本地, 然后选择安装与操作系统对应的GRID驱动。

注:将脚本中”<>”的部分替换为相应的内容。

如果云平台并没有直接提供GRID 驱动,或者版本太旧,那么我们可以去Nvidia的网站去申请90天的试用,申请成功后再根据各大云平台提供的文档·来安装Nvidia GRID驱动及相关组件。如何申请可以参考NVidia官方的<<115_NVIDIA vGPU试用License全新申请流程介绍>>一文。


防火墙设置

Windows Server 2016 默认防火墙设置会禁止像素流所用到的端口的通信。所以和安全组设置类似,在快速测试时,你可以在控制面板 >> 防火墙设置中先关闭防火墙。正式使用时,则应该在高级防火墙设置中, 创建相应的规则,将需要使用的协议或者端口打开,也可以将像素流应用及其他相关应用都加入到白名单中去。

启动声音服务

Windows Server 2016的实例默认是没有启动音频服务的,这会导致像素流应用的声音无法正确播放。解决办法: 命令行下键入services.msc,将Windows Audio以及Windows Audio Endpoint Builder服务启动。



为了能通过远程桌面的时候听到声音,还需确定下列选项被正确设置。



安装.NET Framework3.5

Windows Server 2016默认没有安装.NET Framework3.5,通过Server manager 添加role and features, 然后一路Next到Features,选择.NET Framework3.5 然后点击安装。




安装NodeJS

Windows Server 默认设置是不允许从浏览器下载内容的,所以要通过浏览器下载NodeJS或者其他任何软件,你需要先在ServerManager里关闭IE Enhanced Security Configuration。当然安全起见,当下载完需要的软件后,还是建议重新启用以增强系统的安全性。



然后你就可以通过IE访问NodeJS官方网站下载并安装NodeJS for windows x64。
https://nodejs.org/en/download/

上传像素流应用

将打包好的像素流应用传到实例上方法有很多,通过网盘,通过FTP都可以。我们这里直接利用windows自带的远程桌面程序的共享本地驱动器的资源的方式使得能在实例上的“我的电脑”中访问本地电脑驱动器的资源。



03
启动像素流应用及相关服务

先为像素流应用创建一个快捷方式,在快捷方式下添加命令行参数” -AudioMixer”;也可以加上“-RenderOffScreen” 使得应用在最小化时仍旧能供正常工作。

如果你的打包应用是基于4.24 版,由于4.24已经移除了WebRTXProxy,所以需要在命令行最后额外添加 ”-PixelStreamingIP=localhost -PixelStreamingPort=8888“ 两项参数


对于4.24版之前的包,需要运行\Engine\Source\Programs\PixelStreaming\WebRTCProxy\bin\下的Start_AWS_WebRTCProxy.bat*

注*:文中执行的所有带”AWS”的bat文件不仅仅适用于AWS平台,同样可以用在其他云平台的实例上。

启用STUN服务的情况

公有云上的像素流应用和局域网内的像素流应用最大的区别就在于这一步了。公有云上的实例都在防火墙后,所以需要通过STUN服务进行防火墙穿透才能得到可以用于建立WebRTC 连接的公网IP,  读者可以运行位于 Engine\Source\ThirdParty\WebRTC\rev.23789\programs\Win64\VS2017\release\下的Start_STUNServer.bat 来启动默认的STUN server。


然后再运行\Engine\Source\Programs\PixelStreaming\WebServices\SignallingWebServer\下的runAWS.bat 启动 Signaling Server。


最后双击之前创建的快捷方式启动像素流应用,这时候就可以通过支持WebRTC的浏览器,新建一个页面输入云实例的公网IP, 开始体验像素流。



启动TURN服务的情况

STUN一般可以应对大部分的情况,但是在少数情况下,比如Symmetry NAT下STUN无法正确获取用于创建WebRTC 连接的公网IP, 这个时候我们就必须借助于TURN提供的中继服务。中继意味着从实例先要将像素流发给TURN服务器,然后再有TURN服务器将像素流转发给用户,实际应用中会带来更多的带宽需求,所以一般会专门开一台高带宽的实例用作TURN服务器。这里为了测试的便利,仍旧将TURN服务器放在同一实例上。


我们通过 Engine\Source\ThirdParty\WebRTC\rev.23789\programs\Win64\VS2017\release\下的Start_AWS_TURNServer.bat 来启动TURN server,这里就不再需要运行上节提到的Start_STUNServer.bat,因为TURN server包含了STUN server的功能,当发现STUN无效时,才会自动采取中继的方式。

在这样的情况下,我们需要启动\Engine\Source\Programs\PixelStreaming\WebServices\SignallingWebServer\下的runAWS_withTURN.bat 来替代上节的runAWS.bat

常见的问题

虚幻引擎提供的启动脚本中,是通过Invoke-WebRequest的方式来自动获得公网或者局域网IP地址,有时候并不能正确获得,这时候你可以在脚本中手工指定正确的公网IP或者局域网IP的方式来设置。



04
UE4.24 对像素流的改进与增强

请参阅Unreal Engine4.24 Release Notes 中”像素流送改良“ 部分
https://docs.unrealengine.com/zh-CN/Support/Builds/ReleaseNotes/4_24/index.html


05
未来的工作


本文主要讲了如何在公有云快速部署像素流应用进行测试,后续离产品化还有大量的工作需要完成,比如:

  • 机型配置的优化(比如是否使用vGPU或者MxGPU)

  • 负载平衡策略 (Load Balance)

  • 用产品级 Signaling/STUN/TURN服务替代引擎默认提供样例服务。

  • 后备选项 (Fallback Option)

  • 弹性伸缩 (Auto Scaling) 

  • Linux下的像素流支持

  • 交互设计(兼顾不同平台不同以及不同的输入硬件)

  • 商用发布的UE授权问题


如果你面临上述的相关问题或者任何与虚幻引擎相关的问题,可以随时通过EGC-Business@epicgames.com联系我们以获得官方的支持与帮助。


近期焦点

虚幻引擎4.24现已发布!

Epic Games和Quixel携手赋予创造者力量

Epic MegaGrants计划发放资金达1300万美元

在虚幻在线学习平台达成2020年学习目标
2020年游戏佳作速览
技术博客 | 真实物理属性的灯光环境在UE4中的应用探讨
全新建筑可视化内饰渲染示例项目现已推出!
[预告]虚幻引擎技术开放日2020 颁奖典礼奖项预告

Build:Munich ’19 for Automotive:实时工作流程日趋成熟

恭喜2019 Epic MegaJam获奖者

网络研讨会:在UE4中利用后期处理效果实现电影级画质

《塞娜的传说:地狱之刃II》领衔:虚幻作品闪耀TGA 2019

[活动回顾]Unreal Circle:影视动画专场杭州站圆满落幕





如需获得更多虚幻引擎4的授权合作方式和技术支持,请发送邮件至
EGC-Business@epicgames.com咨询;
如果你想来 Epic 工作,扫描下方二维码关注我们后点击菜单栏按钮“更多”并选择“招聘”,即可了解我们的最新招聘信息。Epic Games 欢迎你的加入!
长按屏幕选择“识别二维码”关注虚幻引擎
“虚幻引擎”微信公众账号是 Epic Games 旗下 Unreal Engine 的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存