基于WebRTC技術實作Web端的三維呈現和互操作
UE4(Unreal Engine 4)是目前世界上最知名、最頂尖的3D游戲引擎,UE4的畫質效果完全達到3A游戲大作的水準,本文主要研究如何基于WebRTC技術實作Web端的三維呈現和互操作,
目 錄 |
|
按時空性能對通訊場景分類
如果按照時間性能和空間性能(資料量)這2個維度對所有網路通訊應用進行分類,大致可以分為3類:常規通訊、即時(訊息)通訊、即時音視頻通訊,
| 型別 | 時間要求 | 資料量 | 場景 | |
|---|---|---|---|---|
| 1 | 通訊 | 低 | 小 | HTTP網頁、檔案傳輸、電子郵件 |
| 2 | 即時通訊 | 高 | 小 | 聊天室、電話、網路游戲 |
| 3 | 即時音視頻通訊 | 高 | 大 | 視頻通訊、遠程桌面、3D像素流 |
這3類app對性能的要求遞增,很顯然WebRTC是為了解決第3類應用場景,此類通訊的難度最大,單位時間內傳遞的資料量巨大,同時要求低延遲,通常,第三類應用涵蓋前兩類,比如視頻會議室內可以發送文字,所以WebRTC既支持MediaStreams也支持DataChannel,
WebRTC底層原理簡介
WebRTC是一個重量級的開源軟體,光對外提供的API介面就非常復雜,WebRTC的底層原理可以分成若干部分,其中最主要的3個核心模塊分別是對等連接、壓縮演算法、通訊協議,
| WebRTC | 功能 | 涉及學科 |
|---|---|---|
| 對等體連接 | 通過ICE-agent完成網路層的點到點UDP連接,完成對NAT/防火墻的打洞,定義p2p信令通道的序列化格式 | 圖論 |
| 音視頻壓縮 | 音視頻壓縮演算法,包括H.264/5和VP8/9編碼 | 資訊論 |
| 通訊協議 | 在傳輸層之上的流媒體通信協議RTP(RTCP),實時流量控制、狀態控制、資料加密 | 控制論 |
即時通訊技術要求最低的延遲,通訊資料都是臨時生成,沒有緩沖的機會,需要在最短的時間內完成訊息傳遞同時還要保證安全性,所以即時通訊app的難度大于普通的app,比即時通訊更困難的場景是即時音視頻通訊,目前市面上最成熟的音視頻技術是WebRTC,從功能、性能、安全性考慮,WebRTC主要為我們做了很多事情:
功能:開源、回聲消除/降噪、支持媒體流和常規訊息
空間性能:音視頻壓縮、流量控制
時間性能:UDP傳輸、p2p通訊
安全性:資料加密、外設用戶授權
WebRTC全部的應用場景和注意事項還包括基于WebSocket的房間控制與認證服務、多人RTC拓撲架構的選擇、私有IP泄露問題等,但本文主要研究WebRTC在UE4引擎中的應用,所以不談這些內容,
虛幻引擎像素流的RTC架構
虛幻引擎的像素流(pixel streaming)支持將某個攝像機(不是物理攝像頭)的實時畫面通過WebRTC協議發送到計算機網路上的其他設備,并接收對方發來的媒體流或資料流(DataChannel),
UE4像素流只提供了這幾樣東西:攝像機的媒體流介面、WebRTC引擎插件、信令/Web服務程式、前端配合像素流的JS庫,至于如何搭配使用這些功能來滿足不同的應用場景,需要我們來設計不同的RTC架構,伴隨著不同RTC架構的是3種常用的服務器:
Web服務:用于提供前端靜態資源,中心化管理、認證,
ICE服務:用于NAT穿透/中繼的STUN/TURN服務,內網則不需要,
信令服務:用于peer之間交換協商IP地址、埠號、協議格式等資訊,
虛幻引擎提供了Web服務和信令服務,剩下2個服務需要我們自己搭建,通常這3個服務位于同一臺服務器上的不同埠,ICE服務可以使用開源的Coturn或者免費的公共服務器;Web服務則可使用任何一個http服務器;信令服務則推薦用WebSocket協議開發,不同的RTC架構也分單人模式和多人模式,
單人模式:計算與顯示分離
一般情況,3D游戲引擎將cpu/顯卡計算好的像素流通過DP/HTMI系統總線直接傳導至顯示幕,這樣看來,所有的程序發生在同一臺電腦上;但基于WebRTC的像素流技術讓視頻的計算和顯示發生在由計算機網路相連的不同設備上,這種情況下,一臺機器運行引擎,另一臺機器顯示畫面,除此之外還有一個重要區別:由于計算機網路的帶寬遠小于資料總線,還要保證網路安全,像素流在機器間的傳輸必須經過壓縮和加密,這無疑給該項技術增加了許多難度,好在,WebRTC本身就支持媒體流的壓縮和加密,這也是虛幻引擎選擇WebRTC的原因,
多人模式:分布式or中心化
在一般的多人模式中,比如開放世界游戲中2個角色相遇:每個終端都運行UE4,然后通過服務器交換角色資料,全程沒有WebRTC和像素流的參與,只有普通的UDP訊息交換,如下圖所示(一般網路游戲為了反外掛,不采用p2p通訊),
但是這種場景需要每個客戶端都擁有足夠運行UE4的硬體條件,為了讓更多的低端設備也能體驗UE4的高清畫質,就需要采用像素流的架構了,在多人像素流架構中,UE4運行在服務器上,客戶端只要準備WebRTC軟體(瀏覽器)和高清顯示幕即可,如下圖所示,
邊緣計算:前后端分離
在Web行業,以前所有的頁面都是在服務端渲染(SSR),后來為了分擔服務器的壓力,2010年左右開始了前后端分離運動:大量計算資源被運送到前端,讓前端承擔更多的業務邏輯、UI渲染等作業,
在游戲行業的像素流架構下,為了減輕UE4服務器的計算壓力,也可以將部分簡單的計算任務放到前端,這些任務主要包括和3D引擎無關的UI界面、業務邏輯,讓UE4服務器專心渲染3D,
UI界面:利用瀏覽器的HTML和JavaScript引擎來自定義2D的UI界面,比如游戲選單和HUD,
邊緣計算:將盡可能多的可以預處理的程式放在前端計算,再將計算好的結果送給后端,比如計時器、資料驗證(包括判斷合法輸入)等作業,
像素流優化
并不是每時每刻都需要傳輸100%的畫質,可以按需對像素流的解析度(空間)和幀率(時間)進行調整,以節省資源,在WebRTC、像素流API、開發者這3個層面需要考慮不同的優化方案,
WebRTC會自動地根據網路帶寬等情況進行流量控制,碼率調整,
前端AFK介面檢測用戶在線狀態,后端像素流API可以檢測所有的連接并通過凍幀等手段限制像素流,
開發者需根據視頻視窗的尺寸變化動態調整WebRTC解析度,在必要時暫影像素流(如切入選單),以及在偏靜態場景中主動降低幀速,
<完>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/188493.html
標籤:其他
上一篇:計算機科學——計算機導論
下一篇:史上最全1000道Java高頻面試題:集合、IO流、多執行緒、網路、演算法、Git、設計模式、springboot
