-
UE应用 (Unreal Engine Application) :在服务器上运行,负责渲染画面、执行逻辑。输出视频流和音频流,接收用户输入。
-
信令服务器 (Signalling Server) :作为“中间人”,协调
UE应用和Web客户端的初次连接。不传输媒体流,只交换信令。 -
Web客户端 (Web Client) :用户使用的浏览器。接收视频流,捕获用户输入(鼠标、键盘、触摸)并发送回服务器。
-
通信协议:
- 信令 (Signalling) :使用 WebSocket (基于TCP) ,确保连接指令可靠传输。
- 媒体流 (Media) :使用 WebRTC (基于UDP) ,保证视频流低延迟、高效率。
一、实现步骤:从零到一
阶段一:UE应用配置
启用插件:在插件管理中启用 Pixel Streaming等相关插件,重启编辑器。
项目设置:
在 编辑器偏好设置 (Editor Preferences) -> 关卡编辑器 (Level Editor) -> 播放 (Play) 中,设置 其他启动参数 (Additional Launch Parameters):
-AudioMixer -PixelStreamingIP=localhost -PixelStreamingPort=8888
编辑
打包项目:为目标平台(Windows)打包项目。按 Alt 键并拖动你的 .exe 文件,在相同文件夹中(或计算机上你想要的其他任意位置)创建新的快捷方式。
编辑
右键点击快捷方式,从上下文菜单选择 属性(Properties) ,在 快捷方式属性(Shortcut Properties) 窗口的 快捷方式(Shortcut) 选项卡上,在 目标(Target) 字段末尾添加下列文本 (注意末尾加空格后再粘贴) ,并点击 确定(OK) 。
-AudioMixer -PixelStreamingIP=localhost -PixelStreamingPort=8888
编辑
阶段二:信令服务器部署
-
获取服务器:从github(EpicGames/PixelStreamingInfrastructure at UE5.4)下载
Pixel Streaming Servers包并解压。我是解压在D盘下面。 -
关键配置:编辑
SignallingWebServer目录下的config.json,保证端口和UE运行的端口是一致的:{ "UseFrontend": false, "UseMatchmaker": false, "UseHTTPS": false, // 测试用HTTP,生产环境必须用HTTPS "HttpPort": 80, // 信令服务器Web端口(浏览器访问的端口) "HttpsPort": 443, "StreamerPort": 8888, // UE应用连接的端口 "PublicIP": "你的服务器公网IP" } -
提取像素流分支:在打包项目文件夹的此路径中,Windows\AutoDatasmith54\Samples\PixelStreaming\WebServers并运行
get_ps_servers命令(双击bat文件)。这会自动将相关像素流送基础设施分支提取到该文件夹中。
阶段三:启动信令服务器与连接
- 安装依赖:以管理员身份打开PowerShell,并运行
SignallingWebServer\platform_scripts\cmd\setup.bat。这将安装所有必需的依赖性。
编辑
- 启动信令服务器:
SignallingWebServer\platform_scripts\cmd\run_local.bat以启动信令服务器。服务器已启动并准备好接受连接时,你将在控制台窗口中看到以下行:
WebSocket listening to Streamer connections on :8888
WebSocket listening to Players connections on :80
Http listening on *: 80
-
运行UE程序并连接: 在运行虚幻引擎应用程序的那台计算机上,按Alt-Tab键,将焦点从虚幻引擎应用程序切换开,并启动支持的Web浏览器(谷歌浏览器和火狐浏览器是稳妥的选项)。在地址栏中,前往
http://127.0.0.1或用其他设备访问自己的设备ip地址(cmd>ipconfig可查)。http://你的ip地址:80(http端口)
最终效果:
编辑
二、技术重点与核心原理
-
信令交换 (Signalling over TCP/WebSocket) :
- 目的:协商建立WebRTC连接所需的元数据(SDP Offer/Answer, ICE候选地址)。
- 原理:使用TCP,因其可靠、有序,确保关键连接指令必达。遵循三次握手建立可靠连接。
- 端口:主要由信令服务器的
HttpPort(如80) 提供Web服务和WebSocket连接。
-
媒体流传输 (Media over WebRTC/UDP) :
- 目的:传输实时的视频帧和音频样本。
- 原理:使用UDP,因其低延迟、开销小。允许偶尔丢帧以换取流畅性,更适合实时视频。
- 编码:通常使用服务器GPU的硬件编码器(如NVENC)。
-
连接终止与四次挥手:
- 当连接需要关闭时,TCP使用四次挥手流程来可靠地、双向地释放连接。
- 这是因为TCP连接是全双工的,双方的数据发送通道需要独立关闭。
TIME-WAIT状态确保最后一个ACK包到达,防止资源占用。
三、常见问题排查 (Troubleshooting)
| 问题现象 | 可能原因与排查方向 |
|---|---|
| 黑屏/无法连接 | 1. 防火墙/安全组:未开放信令服务器端口(如80)。 2. IP/端口错误:UE启动参数中的IP/端口与信令服务器配置不匹配。 3. 信令服务器未运行。 |
| 高延迟/卡顿 | 1. 网络带宽不足:在 DefaultEngine.ini 中调整 PixelStreaming.Bitrate。 2. 服务器性能瓶颈:检查GPU编码、CPU和网络负载。 |
| 有画面无声音 | 1. 启动参数缺少 -AudioMixer。 2. 浏览器禁用了音频自动播放。 |
| 编码器初始化失败 | 服务器GPU驱动问题或不支持硬件编码(如无NVIDIA显卡却配置了NVENC)。 |
四、生产环境优化建议
- 安全:启用HTTPS (
UseHTTPS: true) 并配置SSL证书。实施身份验证。 - 性能:使用TURN服务器协助NAT穿透。根据网络状况动态调整视频码率和分辨率。
- 扩展性:对于多用户场景,启用并配置
Matchmaker(匹配器)和Cirrus以实现多实例负载均衡。