​UE5.4 像素流送 (Pixel Streaming) 实现核心笔记

529 阅读6分钟

 

  • 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端口)
    

    转存失败,建议直接上传图片文件

最终效果:

转存失败,建议直接上传图片文件​编辑

二、技术重点与核心原理

  1. 信令交换 (Signalling over TCP/WebSocket)

    • 目的:协商建立WebRTC连接所需的元数据(SDP Offer/Answer, ICE候选地址)。
    • 原理:使用TCP,因其可靠、有序,确保关键连接指令必达。遵循三次握手建立可靠连接。
    • 端口:主要由信令服务器的 HttpPort (如80) 提供Web服务和WebSocket连接。
  2. 媒体流传输 (Media over WebRTC/UDP)

    • 目的:传输实时的视频帧和音频样本。
    • 原理:使用UDP,因其低延迟、开销小。允许偶尔丢帧以换取流畅性,更适合实时视频。
    • 编码:通常使用服务器GPU的硬件编码器(如NVENC)。
  3. 连接终止与四次挥手

    • 当连接需要关闭时,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)。

四、生产环境优化建议

  1. 安全:启用HTTPS (UseHTTPS: true) 并配置SSL证书。实施身份验证。
  2. 性能:使用TURN服务器协助NAT穿透。根据网络状况动态调整视频码率和分辨率。
  3. 扩展性:对于多用户场景,启用并配置 Matchmaker(匹配器)和 Cirrus 以实现多实例负载均衡。