像素流送(Pixel Streaming),是UE4力推的网站部署方案。官方从UE4.24开始,默认取消了对HTML5打包的支持,转而使用这种新颖的方式。这种方式的最大好处是,对客户的电脑性能基本没有要求,只需要带宽足够,客户就可以像观看高清电影一样流畅使用三维软件。当然,对推流的服务器还是有显卡要求的。
像素流送的部署方式主要分局域网和公网部署。
本文主要针对公网部署,假设读者已经掌握了局域网部署的方法。
正文
整个部署流程包括:
- 注册Linux服务器
- 安装部署coturn服务
- 拷贝信令服务器到Linux服务器
- 启动UE应用进行推流
- 公网测试
一、自备服务器
此处省略了一部分…
使用ssh,登进服务器就可以到下一步了。
推荐使用MobaXterm工具登录linux服务器。若没接触过这方面的操作,可以留言告知,马上补充上来。
二、部署coturn
安装libevent-2.0
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar zxvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable && ./configure
make && make install
安装coturn
git clone https://github.com/coturn/coturn
cd coturn
./configure
make
make install
这一步可能问题较多,复制error信息百度一下,基本有解决方案。
configure 报错的话,需要 yum -y install gcc
检查是否安装成功
which turnserver
修改配置文件
vi /usr/local/etc/turnserver.conf
turnserver.conf 文件内容
relay-device=eth0 # 与ifconfig查到的网卡名称一致
listening-ip=xxx #内网ip,我填的还是服务器的公网IP
listening-port=3478
tls-listening-port=5349
relay-ip=xxx #公网IP
external-ip=xxx #公网IP
relay-threads=50
lt-cred-mech
cert=/etc/turn_server_cert.pem
pkey=/etc/turn_server_pkey.pem
pidfile=”/var/run/turnserver.pid”
min-port=49152
max-port=65535
user=dvlee:123456
注意这里的user,用户名和密码,后面部署信令服务器需要用到。
启动turnserver服务
turnserver --userdb /root/turnuser.db
放行默认端口
firewall-cmd --zone=public --add-port=3478/udp --permanent
firewall-cmd --zone=public --add-port=3478/tcp --permanent
重新加载
firewall-cmd --reload
到此已经部署完成,可以到下面网址进行测试。
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
返回replay就表示turn服务器没有问题了。
如果有问题的话,推荐使用wireshark进行抓包分析,一般问题可能是服务未开、端口不通、密码不正确等。
三、部署信令服务器
信令服务器可以部署在用于推流的电脑,也可以拷贝到linux服务器中运行。
因为UE4提供的信令服务器还能启动web服务,为简单起见,还考虑到最终访问的地址为公网地址(即linux服务器的地址),那就需要把UE4打包出来的信令服务器文件(SignallingWebServer
整个目录)拷贝到linux里了。
使用MobaXterm工具可以直接拖文件进去,当然也可以scp抄送过去,此处不详述。
拷贝前需要先修改好配置文件,当然也可以直接在linux中修改。
配置文件的路径SignallingWebServer/config.json
。
{
"UseFrontend": false,
"UseMatchmaker": false,
"UseHTTPS": false,
"UseAuthentication": false,
"LogToFile": true,
"HomepageFile": "player.htm",
"AdditionalRoutes": {},
"EnableWebserver": true,
"peerConnectionOptions": "{\"offerExtmapAllowMixed\": false, \"iceServers\": [{\"urls\": [\"stun:xxx:3478\",\"turn:xxx:3478\"], \"username\": \"dvlee\", \"credential\": \"123456\"}] }",
"steamerPort": 18888,
"httpPort": 66,
"publicIp": "xxx"
}
"EnableWebserver": true
:配置为启动web服务器
"httpPort": 66
:这是web服务器的端口
"HomepageFile": "player.htm"
:web访问的网页
peerConnectionOptions
这里配置turn服务器的信息
启动信令服务器(需安装node.js)
node cirrus --configFile='./config.json'
四、启动UE应用进行推流
这一步在自己的PC上执行就行,很简单,可以写个简单的bat文件,把官方带的配置,写进里面,也方便以后修改。
bat内容如下:
@echo off
start xxx.exe -ResX=1920 -ResY=1080 -PixelStreamingIP=xxx -PixelStreamingPort=18888 -log -RenderOffScreen
五、公网测试
浏览器访问公网IP+web端口。
可以使用手机流量测试,记得关闭wifi。又或者发给不在同一局域网的朋友做测试。
其他
启动客户端,弹出以下信息:
No compatible GPU found, or failed to load their respective encoder libraries
官网有说明,大概率是显卡不支持NVENC或AMF,可以在这个英伟达这个网站(https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new#Encoder)里查询显卡是否支持。
但我遇到一个问题是,本来丽台P4000是支持的,后来升级4.27之后,启动客户端就弹出上面信息了,说不支持了(升级了显卡驱动即可)。1080显卡没有遇到这样的问题。
另外,4.27打包的软件,启动信令服务器的脚本文件路径换了
换成项目名称\Samples\PixelStreaming\WebServers\SignallingWebServer\platform_scripts\cmd\run.bat
配置文件:项目名称\Samples\PixelStreaming\WebServers\SignallingWebServer\config.json