PixelStreamer魔改自虚幻引擎的“SignallingWebServer”:
Epic Games\UE_4.26\Engine\Source\Programs\PixelStreaming\WebServers\SignallingWebServer
即信令网页服务器,删除了其中90%以上的无用代码和库,解决了许多bug,成就了一个超轻量,上手即用的像素流前端库和信令服务器。
先复习一下WebRTC技术,相关内容推荐:
-
《虚幻引擎的像素流技术》
-
《WebRTC:理论基础、行业地位、网络架构》
-
《WebRTC安全问题:私有IP与mDNS》
类型 |
即时性 |
数据量 |
场景 |
通讯 |
低 |
小 |
http网页、文件传输、Email |
即时通讯 |
高 |
小 |
聊天室、电话、RTS网络游戏 |
即时音视频通讯 |
高 |
大 |
视频通讯、远程桌面、3D像素流 |
WebRTC主要是为了解决“即时音视频通讯”的需求的,这类需求要求极低的延迟,单位时间内的数据量又很大,所以非常挑战压缩算法。
像素流协议
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
整体架构
沉浸式鼠标API是一个黑科技,当指定一个dom元素进入PointerLock之后,鼠标隐藏掉,同时鼠标的运动感知不到元素的边界,即在任意方向上可以无线运动,这种使用体验很符合3D人物的操作习惯。
目前主流的会话凭证是利用localStorage+Authoriation头部实现JWT的存储,很遗憾,这3样东西都是文本格式的,如果想要存储为二进制格式,需要另3样技术:CachesAPI、http2.0、二进制token格式。
项目地址:https://github.com/JinHengyu/PixelStreamer