像素流送
Pixel Streaming
像素流送 (Pixel Streaming) 让 UE 应用运行在桌面 PC 或云服务器上,把渲染好的画面和音频编码成媒体流,通过 WebRTC 点对点发送到浏览器和移动设备;用户可以在网页里用键盘、鼠标、触摸、手柄操作应用。系统由引擎内的 Pixel Streaming 插件和一个信令与 Web 服务器 (Signalling and Web Server) 组成,跨网络连接时需要 STUN/TURN。
原理
像素流送的工作方式类似在线视频流媒体,区别是用户可以通过流媒体界面与应用交互。UE 可以在桌面 PC 或云服务器上运行打包好的应用,旁边配一小组 Web 服务;用户用桌面或移动设备上的浏览器连接前端,接收远端渲染的画面和音频,并通过前端发送输入:键盘、鼠标、触摸、手柄和 XR,以及网页上自定义的 HTML5 界面。(Pixel Streaming in Unreal Engine)
UE 应用持续把渲染输出编码成媒体流,经过一组轻量的 Web 服务;任何支持 WebRTC 的现代浏览器都能观看,包括桌面、iOS 和 Android 上的 Chrome 与 Firefox。它使用 WebRTC 点对点通信框架,以获得用户与 UE 应用之间尽可能低的延迟。(Overview of Pixel Streaming in Unreal Engine)
| 组件 | 职责(官方) |
|---|---|
| Pixel Streaming 插件 | 运行在 UE 内:对每帧渲染结果做视频压缩,与游戏音频一起打包成媒体流,通过点对点连接发给一个或多个浏览器 |
| 信令与 Web 服务器 | 协商浏览器与插件之间的连接,并向浏览器提供播放媒体流的 HTML 和 JavaScript |
连接过程
下图按官方描述整理了一次连接:
sequenceDiagram participant UE as UE 应用(插件) participant SS as 信令与 Web 服务器 participant B as 浏览器 UE->>SS: 启动后先建立连接 B->>SS: 打开网页,请求连接 SS-->>B: 下发 HTML/JS 播放器 SS->>UE: 交换连接协商信息 Note over UE,B: 跨网络时借助 STUN/TURN 获取外部可见地址 UE-->>B: WebRTC 点对点媒体流(画面+音频) B-->>UE: 输入事件
媒体流开始后,信令服务器仍保持与浏览器和 UE 应用的连接,以便处理浏览器发起的断开。(Overview of Pixel Streaming in Unreal Engine)
上手要点
- 插件只能在 Windows、Linux 或 Mac 上、配合特定类型的 GPU 编码视频。
- 插件只在打包后的应用或从编辑器以 Standalone Game 启动时工作。
- 在 Plugins 的 Graphics 分类中启用 Pixel Streaming 或 Pixel Streaming 2 插件。
- 启动参数加
-PixelStreamingURL=ws://127.0.0.1:8888指向信令服务器;建议再加-RenderOffScreen以无窗口方式运行,避免窗口被最小化后输入流失效。 - 需要触摸操控角色时,开启 Engine > Input 下的 Always Show Touch Interface。
- 从其他网络连接时,通常要给信令服务器配置 STUN/TURN(通过 peerConnectionOptions)。(Getting Started with Pixel Streaming in Unreal Engine)
打包流程见 烘焙、打包与 Zen 加载器。
取舍
| 优点 | 代价 |
|---|---|
| 客户端只需浏览器,移动端也能看到高端画质 | 每个流都占用一份服务器端渲染和编码资源(据架构归纳) |
| WebRTC 点对点,延迟低 | 跨网络需要 STUN/TURN,部署更复杂 |
| 支持多种输入和自定义网页 UI | 只能用打包应用或 Standalone 启动 |
官方另有在编辑器内使用像素流送的功能(实验性),可以远程操作虚幻编辑器。
流调优:画质、延迟、稳定性
官方《Stream Tuning Guide》(5.8):默认配置假设部署在公网、用户网络条件各异,因此在画质、延迟和稳定性之间取平衡。平衡主要由 WebRTC 完成:它反复估算可用带宽,算出合适的码率交给视频编码器作为上限,网络差时画面就会出现明显的压缩块。(Stream Tuning Guide)
画质最终由编码器的量化参数 (QP) 决定,各编解码器的 QP 范围不同:H264 为 0–51,AV1 为 0–255,VP8/VP9 为 0–63。QP 越大压缩越狠、画质越差。5.5 起,旧的 QP 参数(数值越低画质越高)被新的 Quality 参数取代(1–100,越高越好),它会按所选编解码器自动换算到对应的 QP 范围。(Stream Tuning Guide)
| 目标 | 手段(官方) | 代价 |
|---|---|---|
| 保证画质 | -PixelStreamingEncoderMinQuality=N(通常只需调这个)/ MaxQuality | 码率超过网络能力或 -PixelStreamingWebRTCMaxBitrate 时会丢帧,帧率下降 |
| 最低延迟 | 用硬件 H.264 编码器(VP8/VP9 软件编码器延迟更高);-PixelStreamingWebRTCDisableAudioSync;不需要音频时关闭收发;去掉运动模糊等增加编码复杂度的效果 | 音画可能不同步;最大的收益其实来自地理距离和网络质量 |
| 稳定性 | -PixelStreaming.Encoder.KeyframeInterval 控制关键帧间隔;NVIDIA 上的帧内刷新(-NVENCIntraRefreshPeriodFrames/CountFrames,Pixel Streaming 2 已移除);放开 Quality 范围或降低分辨率 | 关键帧更占带宽,如果丢包本来就是带宽饱和造成的,多发关键帧反而没用 |
WebRTC 还会动态增大抖动缓冲 (jitter buffer) 来对抗网络延迟和重传,代价是延迟增加;这个缓冲不能直接控制。(Stream Tuning Guide)(Pixel Streaming in Unreal Engine)
出处
- Pixel Streaming in Unreal Engine UE 5.8 文档
- Overview of Pixel Streaming in Unreal Engine UE 5.8 文档
- Getting Started with Pixel Streaming in Unreal Engine UE 5.8 文档
- Stream Tuning Guide UE 5.8 文档