UE4-像素流送

基于UE4的云游戏解决方案

UE4-像素流送

总览

优点什么的按下不表。

组件

  1. 像素流送插件 - 此插件在虚幻引擎中运行。其使用H.264视频压缩对每个渲染帧的最终结果进行编码,将这些视频帧随游戏音频一同打包到媒体流送中,并通过直接点对点连接将该流送发送到一个或多个连线的浏览器上。
  2. 信令和Web服务器- 信令和Web服务器负责交涉浏览器和像素流送插件之间的连接,将播放媒体流送的HTMLJavaScript环境提供给浏览器。

进程

  1. 启动所有像素流送组件时,在虚幻引擎中运行的像素流送插件首先将建立到信令和Web服务器的链接。
  2. 客户端会连接到信令服务器,服务器将对客户端提供一个HTML页面,其中包含播放器控件和以JavaScript编写的控制代码。
  3. 用户开始流送时,信令服务器将进行交涉,在客户端浏览器和虚幻引擎之间建立直接连接。
  4. 客户端和虚幻引擎之间的连接建立后,像素流送插件便会直接开始将媒体流送到浏览器。来自客户端的输入由播放器页面的JavaScript环境直接发送回虚幻引擎中。
  5. 即使媒体流送已经开始播放,信令和Web服务器仍会维持其与浏览器和虚幻引擎的连接,以便在必要时将用户从流送中移除,并处理浏览器造成的连接断开。

入门

准备工作

一、创建应用

  1. 安装node.js
  2. N卡支持NVENC NVENC Support Matrix,A卡支持AMF
  3. 必须打开本地网络上的以下端口进行通信:80、888。

Signaling Server host

80 -用于来自客户端的所有HTTP请求。 设置信令服务器的 --httpPort 参数即可修改此值。

443 -用于信令服务器运行HTTPS模式时来自客户端的所有HTTPS请求。 设置信令服务器的 --httpsPort 参数即可修改此值。

8888 \用于来自虚幻引擎应用的所有传入连接请求。 如要修改此值,须对信令服务器的 --streamerPort 参数 和 UE4应用的 PixelStreamingPort 参数进行设置。

Matchmaker Server host

90 -用于来自客户端的所有HTTP请求。 使用配对服务器的 --httpPort 参数即可修改此值。

9999 -用于信令服务器发送的所有消息。 如要修改此值,须对配对服务器的 --matchmakerPort 参数 信令服务器的 --matchmakerPort 参数进行设置。

端口全开,日后再悔过

操作步骤

  1. 打开Pixel Streaming插件
  2. 返回虚幻编辑器,从主菜单中选择 编辑(Edit) > 项目设置(Project Settings)
  3. 如果项目中有角色,而您希望启用触控设备的输入(如手机和平板电脑)在关卡中移动此角色,则可能需要在屏幕上显示触摸控制器。 在 引擎(Engine) > 输入类型(Input category) 下启用 固定显示触控界面(Always Show Touch Interface) 设置。
  4. 在主菜单中选择 编辑(Edit) > 编辑器偏好(Editor Preferences...)
  5. 关卡编辑器(Level Editor) > 播放(Play) 中找到 额外启动参数(Additional Launch Parameters) 设置,并将其值设为 AudioMixerPixelStreamingIP=localhost -PixelStreamingPort=8888

也可以通过修改快捷方式的参数,来避免这一步

image-20200715110432921.png
  1. 打包

二、启动服务器

  1. 在虚幻引擎安装文件夹中,在 Engine/Source/Programs/PixelStreaming/WebServers/SignallingWebServer 中找到信令服务器的路径。

  2. 运行信令run.bat开启信令服务器

  3. 打开之前打包的程序

接下来直接使用ip访问即可。

外网连接

使用frp反向代理

测试成本:极低

(可以使用现成的电脑,以及入门级服务器)

可靠性:低

通过外网服务器的frp代理,成功地打开了网页,但无法成功流送视频。简单地更改端口也无法成功运行。分析是虚幻引擎和浏览器无法直接建立链接,最开始的解决思路是找到位置更改ip地址,但是没能成功。

Pixel Streaming with STUN and TURN servers

在一个简易局域网中,每个端点通常会假设另一方能够使用自身网卡所知的私有IP地址,以便对该端点进行访问。在公开网络、子网络中,或是网络地址转换(NAT)服务在浏览器和UE4应用间进行干涉时,通常情况却并非如此。相反,每一方需通过查询实现STUN(NAT会话遍历工具)协议的服务器,以找出自身公开可见的IP地址。STUN服务器告知所有端点其自身的公开可见IP地址后,信令和Web服务器可继续中继各自的直接连接。

另外,可使用TURN服务器在UE4应用和浏览器之间中继媒体流。启动TURN协议后,TURN服务器一方面与UE4应用连接,另一方面则与浏览器连接。UE4应用将自身所有流送的数据发送给TURN服务器,后者又将数据传送至浏览器。在此情况下,UE4应用和浏览器间并无直接连接。(如要在无线运营商网络中支持移动设备,只能使用TURN服务器。移动网络通常不支持客户端通过WebRTC协议进行连接。)

使用frp并不能起到ICE的作用,整合了STUN、TURN协议的ICE框架是一套完整的P2P技术体系,在短时间内并没有把握完全掌握。所以ipv6什么时候取代ipv4

参考链接:

COTURN

P2P技术详解(三):P2P技术之STUN、TURN、ICE详解

直接在云服务器上搭建

有两种解决方案:

使用预建的公有镜像进行快速测试

测试成本:低

(可能只需要1刀的验证费用,然后用AWS赠送的免费额度完成测试)

可靠性:中

(作者是1月份写的文章,不知道现在他的镜像是否正常运行。)

自建公有云测试

测试成本:高

(成本分为一下部分:

服务器租赁费用:一台GPU服务器,一台NVIDIA GRID驱动的License 服务器:

GPU服务器:最便宜的价格为3.39元/h,975元/月

License 服务器:最便宜的30块钱大概就能搞定,或者让同事去申请免费体验的

服务器带宽费用(有两个服务器,带宽需要分开购买):按量0.8元/G按;带宽2G带宽的场景0.13元/h,36元/月

可靠性:稍高

(测试 License 账户需要2天的时间由后台进行账号审批,GN7vw的审批时间也要看腾讯什么时候有空理我)

配置需求如下:

系统配置:GPU服务器:Windows Server 2012/2016/2019均可

​ License服务器:Windows Server 2012

计算型GPU:使用 Tesla 系列 GPU (GN6/GN6S/GN7/GN8/GN10X)用作图形图像处理,需要向 NVIDIA 或其代理商购买对应的 License,开启 GPU 的 OpenGL 或 DirectX 图形加速能力。

内存:放心内存肯定够,最小10G

另一个解决方案GN7vw

此外可以使用腾讯云 GN7vw 服务器,免除 vDWS License 申请及搭建服务器步骤。腾讯云 GN7vw 服务器目前在试用阶段,需要提交工单申请。

image-20200716150139630.png

已经提交申请工单,具体价格现在无法得知。

参考链接:

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

AWS免费策略

安装 NVIDIA GRID 驱动

使用成熟的云游戏解决方案

测试成本:unknown

(需要和第三方合作)

可靠性:高

(因为只需要给打包好的游戏就行了)

阿里云:您可以将游戏包体(.apk、.exe等)交付阿里云,阿里云会快速对其进行云游戏转化,同时您可以使用阿里云提供的SDK快速发布属于自己的云游戏平台,边缘计算、GPU云服务器可让您的云游戏业务遍布全国。

腾讯云的云游戏解决方案不支持个人用户,必须认证企业客户,难以考证。

image-20200716153155748.png
最后编辑于
文章链接: http://pheustal.com/2020/07-16/PixelStreaming
本作品采用CC-BY-SA许可。