研究一波虚幻的像素流协议_编程语言

PixelStreamer魔改自虚幻引擎的“SignallingWebServer”:

Epic Games\UE_4.26\Engine\Source\Programs\PixelStreaming\WebServers\SignallingWebServer

即信令网页服务器,删除了其中90%以上的无用代码和库,解决了许多bug,成就了一个超轻量,上手即用的像素流前端库和信令服务器。

研究一波虚幻的像素流协议_编程语言_02

先复习一下WebRTC技术,相关内容推荐:

  • 《虚幻引擎的像素流技术》

  • 《WebRTC:理论基础、行业地位、网络架构》

  • 《WebRTC安全问题:私有IP与mDNS》

类型

即时性

数据量

场景

通讯

http网页、文件传输、Email

即时通讯

聊天室、电话、RTS网络游戏

即时音视频通讯

视频通讯、远程桌面、3D像素流

WebRTC主要是为了解决“即时音视频通讯”的需求的,这类需求要求极低的延迟,单位时间内的数据量又很大,所以非常挑战压缩算法。

研究一波虚幻的像素流协议_css_03

研究一波虚幻的像素流协议_html_04

像素流协议

PixelStreamer最核心的基础组件是虚幻引擎像素流插件定义的“像素流协议”,其中分2个部分,分别是基于DataChannel的二进制消息格式,和基于WebSocket和信令服务器之间的JSON格式。

DataChannel二进制协议格式:

https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Plugins/Media/PixelStreaming/Source/PixelStreaming/Private/ProtocolDefs.h

键盘映射定义:

https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Plugins/Media/PixelStreaming/Source/PixelStreaming/Private/JavaScriptKeyCodes.inl

研究一波虚幻的像素流协议_svg_05

整体架构

研究一波虚幻的像素流协议_js_06

沉浸式鼠标API是一个黑科技,当指定一个dom元素进入PointerLock之后,鼠标隐藏掉,同时鼠标的运动感知不到元素的边界,即在任意方向上可以无线运动,这种使用体验很符合3D人物的操作习惯。

研究一波虚幻的像素流协议_html_07

研究一波虚幻的像素流协议_html_08

目前主流的会话凭证是利用localStorage+Authoriation头部实现JWT的存储,很遗憾,这3样东西都是文本格式的,如果想要存储为二进制格式,需要另3样技术:CachesAPI、http2.0、二进制token格式。

项目地址:https://github.com/JinHengyu/PixelStreamer