研究一波虛幻的像素流協議







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

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


即信令網頁服務器,刪除了其中90%以上的無用代碼和庫,解決了許多bug,成就了一個超輕量,上手即用的像素流前端庫和信令服務器。



先複習一下WebRTC技術,相關內容推薦:



類型

即時性

數據量

場景

通訊

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

本文分享自微信公衆號 - WebHub(myWebHub)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章