Unreal實時雲渲染原理與搭建流程

什麼是雲渲染

由服務器進行圖像渲染,然後通過視頻流的方式推送給瀏覽器,並且用戶能夠發送指令行為來控制服務器的渲染行為

實時雲渲染技術組成

webrtc,unreal

這裡重點強調一下webrtc

webrtc本身並不是什麼協議,而是谷歌的一套開源庫,專門用來做點對點音視頻通信,應用層采用的是XMPP協議的 擴展組件libjingle,傳輸層采用UDP協議,采用ICE/STUN協議進行NAT穿透。協議分層如下:

webrtc協議分層

WebRTC的架構模式

WebRTC本身並不是什麼協議,而是谷歌的一套開源庫,專門用來做點對點音視頻通信,應用層采用的是XMPP協議的擴展組件libjingle,傳輸層采用UDP協議,采用ICE/STUN協議進行NAT穿透。

1、點對點模式

傳統的連接模式一般都是C/S架構(Client/Server架構)的,例如XMPP,A和B之間互相發送數據的流程是:A–>服務端–>B,B–>服務端–>A。

而WebRTC則是P2P模式(peer-to-peer模式)的,即點對點的,也就是說,一旦點與點之間的連接形成,那麼它們之間的數據傳輸是不經過服務端的,而是在兩者之間直接發送。如:A–>B,B–>A。這樣做的一個很大的好處就是大大的降低瞭服務端的壓力。

2、服務端、信道與信令

那這是否就意味著我們使用WebRTC開發就不需要服務端瞭呢?這種觀點很明顯是錯誤的,嚴格來說,我們使用WebRTC僅僅是不需要服務端來進行數據中轉,服務端還是必不可少的,雖然服務端會比C/S架構下少做很多事,但還是不能沒有它。使用WebRTC至少要用服務端做兩件事:

  • A-->服務端-->B這樣的模式來傳遞一些基本信令來控制P2P連接的連接與斷開,還有一些自定義業務的信令,也就是說服務端的主要作用其實就是在兩個客戶端之間傳遞信令。信令其實就是一些指令型的數據,而客戶端與服務端之間傳輸信令通道就是信道,我們用websokcet搭建長連接作為信道。
  • 穿越NAT。

什麼是NAT?

NAT(Network Address Translation)即網絡地址轉換,NAT技術的出現,就是為瞭解決IPV4下IP地址匱乏的問題。比如說,我們有很多設備處於同一個路由器下,這個路由器隻有一個公網IP,但是通過NAT技術我們的設備都會被分配到相應的內網IP(192.168.0.1 、192.168.0.2等),這樣一個路由器的公網IP就對應瞭n個內網IP,就通過這種使用少量的公有IP代表較多的私有IP的方式,減緩瞭可用的IP地址空間的枯竭。

為什麼要穿越NAT?

但是這也帶來瞭一系列的問題,例如這裡點對點連接下,會導致這樣一個問題:如果客戶端A想給客戶端B發送數據,則數據來到客戶端B所在的路由器下,會被NAT阻攔,這樣B就無法收到A的數據瞭。所以需要穿越NAT。

怎麼穿越NAT?

兩個客戶端分別去谷歌的STU Server獲取自己對應的公網IP,通過信令的方式經過服務端傳遞給對方掛在peerConnection上就可以瞭。

雲渲染執行流程

通過信令服務器來建立渲染端和瀏覽器點對點的通信,渲染端把3維場景轉換為視頻推送給瀏覽器,瀏覽器通過webrtc 可以發送指令給渲染控制渲染端3維世界場景的程序邏輯

ue4的實時雲渲染架構

環境搭建流程

windows環境

首先.啟動匹配服務器

SamplesPixelStreamingWebServersMatchmakerrun.bat

然後.啟動信令服務器

SamplesPixelStreamingWebServersSignallingWebServerplatform_scriptscmdrun_local.bat

在然後啟動Unreal

編輯器模式下請配置:

發佈過後的程序在程序後面

*.exe -AudioMixer -PixelStreamingIP=localhost -PixelStreamingPort=8888

最後.在瀏覽器裡面直接打開localhost

前後端分離請參考(前後端分離)說明

配置說明

信令服務器配置

引擎根路徑下 SamplesPixelStreamingWebServersSignallingWebServerconfig.json

"UseFrontend": false,
"UseMatchmaker": false,//是否開啟多人一對一觀看3d場景
"UseHTTPS": false,
"UseAuthentication": false,
"LogToFile": true,
"HomepageFile": "/www/player.html",//默認網站路徑
"AdditionalRoutes": {},
"EnableWebserver": true,
"MatchmakerAddress": "",
"MatchmakerPort": "9999",
"PublicIp": "localhost",//暴露給信令服務器ip地址
"HttpPort": 80,
"HttpsPort": 443,
"StreamerPort": 8888//ue4客服端命令參數連接的端口

赞(0)