Linux上運(yùn)行UE4像素流PixelStreaming

由于公司目前只有一臺(tái)圖形渲染服務(wù)器是linux系統(tǒng)的,現(xiàn)在需要運(yùn)行一個(gè)UE4的像素流程序圣拄,但是Epic官方說明并不支持linux系統(tǒng)媚污,然后就看到了這片文章
https://adamrehn.com/articles/pixel-streaming-in-linux-containers/
一個(gè)第三方做的支持linux系統(tǒng)像素流的兼容富纸,使用的是docker來打包鏡像方式解決環(huán)境的問題,由于該文檔很多東西說的不是特別詳細(xì)近弟,我也摸索了很久才弄好,目前它只支持4.23.1版本的UE4挺智,所以這里也是按照4.23.1版本來做祷愉。

整個(gè)過程非常的漫長,需要有耐心。

關(guān)于UE4像素流原理

20210107093512.png

由于移動(dòng)設(shè)備二鳄,或者我們家庭電腦都可能在配置上無法支撐渲染UE4這么龐大的工程迫摔,所以官方提供做法是在服務(wù)器上進(jìn)行運(yùn)行UE4工程進(jìn)行圖形渲染,并轉(zhuǎn)化成視頻流的方式泥从,然后把視頻流傳輸?shù)揭苿?dòng)設(shè)備上觀看句占,并且支持互動(dòng)操作并反饋到服務(wù)器,然后服務(wù)器在做模型上的變化反饋躯嫉。道理大概就是這樣的纱烘。
如上圖所示,運(yùn)行像素流主要需要三個(gè)部分:

  1. UE4主程序祈餐,也就是3D模型了
  2. WebRTC代理服務(wù)擂啥,主要是用于觀看設(shè)備端直接建立p2p連接來進(jìn)行傳輸像素流數(shù)據(jù) ;
  3. Signaling and WebServer帆阳,這個(gè)就是web服務(wù)器了哺壶,主要是提供http接口,設(shè)備端先通過web服務(wù)器的接口來訪問WebRTC服務(wù)器蜒谤,然后建立p2p連接山宾。

環(huán)境說明

下面是我的環(huán)境,僅做參考鳍徽。
系統(tǒng):我使用的是物理機(jī)安裝的Centos7.4版本系統(tǒng)
CPU:i9第10代
顯卡: RTX3090, 獨(dú)立顯卡肯定是必須的了资锰,而且根據(jù)文檔提示,必須是N卡的
內(nèi)存:32G
硬盤:500G阶祭, 最少得有這個(gè)大小绷杜,越大越好,安裝完之后大概會(huì)使用180G左右濒募,不包含你后續(xù)打包自己的工程

PS:
linux系統(tǒng)的/boot目錄最好是400M以上

NVIDIA 驅(qū)動(dòng)安裝

在所有操作之前先保證顯卡驅(qū)動(dòng)的安裝并能正常工作

//安裝依賴
yum install kernel-devel gcc -y

//檢查內(nèi)核版本和源碼版本鞭盟,保證一致
ls /boot | grep vmlinu
rpm -aq | grep kernel-devel

//屏蔽系統(tǒng)自帶的nouveau
查看命令:
lsmod | grep nouveau

//修改dist-blacklist.conf文件:
vim /lib/modprobe.d/dist-blacklist.conf

//將nvidiafb注釋掉:
#blacklist nvidiafb 

//然后添加以下語句:
blacklist nouveau
options nouveau modeset=0

//重建initramfs image步驟
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r)

//修改運(yùn)行級(jí)別為文本模式
systemctl set-default multi-user.target

//重啟系統(tǒng)
reboot

//關(guān)閉boot secure, 啟動(dòng)按F2
根據(jù)不同的UEFI版本,安全啟動(dòng)選項(xiàng)通常在一個(gè)選項(xiàng)卡下瑰剃,這個(gè)選項(xiàng)卡可能被命名為“Boot”齿诉、“Security”或者“Authentication”,在類似的選項(xiàng)卡中查找培他,我們會(huì)發(fā)現(xiàn)一個(gè)“Secure Boot”選項(xiàng)鹃两,該選項(xiàng)默認(rèn)設(shè)置為“Enabled”,選中它并回車舀凛,將其設(shè)置為“Disabled”俊扳,按[Apply]鍵存儲(chǔ)設(shè)置
如果不關(guān)閉待會(huì)安裝的時(shí)候會(huì)有如下提示
The target kernel has CONFIG_MODULE_SIG set,which means that it supports cryptographic signatures on kernel module. On some systems, the kernel may refuse to load modules without a valid signature from a trusted key.This system also UEFI Secure Boot enabled; many distributions enforce module signature verification on UEFI systems when Secure Boot is enabled. Would you like to sign the NVIDIA kernel module?

//下載對應(yīng)的顯卡驅(qū)動(dòng)
https://www.nvidia.cn/Download/index.aspx?lang=cn

//添加執(zhí)行權(quán)限
chmod +x NVIDIA-Linux-x86_64-440.64.run

//開始安裝
./NVIDIA-Linux-x86_64-440.64.run --kernel-source-path=/usr/src/kernels/3.10.0-1062.18.1.el7.x86_64 -k $(uname -r)

安裝的時(shí)候可能會(huì)有如下提示

WARNING: nvidia-installer was forced to guess the X library path '/usr/lib64' and X module path '/usr/lib64/xorg/modules'; these paths were not queryable from the system.  If X fails to find the NVIDIA X driver module, please install the `pkg-config` utility and the X.Org SDK/development package for your distribution and reinstall the driver.
選擇OK,忽略

Nvidia's 32-bit compatibility libraries? 選擇 No 繼續(xù)猛遍。
Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up.  選擇 Yes  繼續(xù)

掛載Nvidia驅(qū)動(dòng):
modprobe nvidia

顯示驅(qū)動(dòng)信息
nvidia-smi

reboot重啟

正常的話就會(huì)顯示如下信息


在這里插入圖片描述

安裝docker

由于整個(gè)過程都是在docker下編譯鏡像容器的形式來完成的馋记,所有首先需要安裝docker号坡,安裝如下步驟操作即可, 我的服務(wù)器環(huán)境是Centos7.4的,所以我的所有安裝都是使用yum來安裝的梯醒,你可以根據(jù)你的具體環(huán)境來調(diào)整

//安裝依賴
yum install -y yum-utils device-mapper-persistent-data lvm2

使用阿里云鏡像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安裝最新版本docker
yum install docker-ce docker-ce-cli containerd.io

//啟動(dòng)docker
systemctl start docker

安裝Python3

由于安裝過程依賴python3宽堆,所以有必要安裝一下

//安裝依賴
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
yum install libffi-devel -y
//下載Python安裝包
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
//解壓
tar -zxvf Python-3.7.0.tgz
//編譯安裝
cd Python-3.7.0
./configure
make
make install

//下面是修改一下系統(tǒng)環(huán)境的一些東西,使得系統(tǒng)默認(rèn)使用Python3茸习,但是由于centos系統(tǒng)默認(rèn)是安裝了Python2的畜隶,而且yum使用的也是Python2,所以這里需要做一下兼容修改
mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/bin/python3 /usr/bin/python

mv /usr/bin/pip /usr/bin/pip.bak
ln -s /usr/local/bin/pip3 /usr/bin/pip

vi /usr/libexec/urlgrabber-ext-down
修改第一行:#! /usr/bin/python2.7

vi /usr/bin/yum
修改第一行:#! /usr/bin/python2.7

關(guān)聯(lián)git賬號(hào)和Epic游戲賬號(hào)

這個(gè)是十分重要的号胚,如果你不關(guān)聯(lián)的話籽慢,你是看不到下面這個(gè)git倉庫的:https://github.com/adamrehn/UnrealEngine.git

  1. 如果你沒有g(shù)it賬號(hào)的話,先注冊git賬號(hào)
  2. linux服務(wù)器上安裝git客戶端
  3. 注冊Epic游戲賬號(hào):https://www.unrealengine.com/
  4. 進(jìn)行g(shù)it賬號(hào)和Epic賬號(hào)關(guān)聯(lián)猫胁, 如下圖所示:
    在你賬號(hào)里選擇Personal箱亿,進(jìn)入如下界面


安裝UE4 docker

//安裝
pip3 install ue4-docker
ue4-docker setup

安裝NVIDIA container-toolkit (nvidia-docker)

根據(jù)不同系統(tǒng)可以在這里找到安裝步驟
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html

我的Centos7就按照如下安裝即可

//導(dǎo)入GPG指紋信息
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
   && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo

//安裝
yum clean expire-cache
yum install -y nvidia-docker2

重啟docker
systemctl restart docker

//安裝運(yùn)行cuda容器
docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

安裝支持linux的UE4像素流環(huán)境鏡像

ue4-docker build  custom:4.23.1-pixelstreaming  -repo=https://github.com/adamrehn/UnrealEngine.git  -branch=4.23.1-pixelstreaming

這個(gè)安裝過程非常久堂鲤,我?guī)缀蹙鸵蛟谶@里了舱呻。由于我們網(wǎng)絡(luò)很不穩(wěn)定的情況下經(jīng)常會(huì)安裝到半路中斷并提示錯(cuò)誤,不用理它奄薇,直接重新運(yùn)行這個(gè)指令菠赚,在安裝一次脑豹,已安裝的依賴不會(huì)重新下載的。
安裝完之后锈至,磁盤會(huì)消耗一百多G晨缴,所以分配的硬盤一定不能少。
看到如下信息代表安裝成功了


打包demo工程進(jìn)行測試

把demo工程克隆到本地

git clone https://github.com/adamrehn/ue4-example-dockerfiles.git

進(jìn)入如下路徑
cd ./ue4-example-dockerfiles/pixel-streaming/4.23

這里有三個(gè)目錄峡捡。分別就是文章一開始說的,一個(gè)WebRTC筑悴、一個(gè)WebService们拙,還有一個(gè)就是demo游戲程序。
分別用docker進(jìn)行build鏡像

cd server 
docker build -t ue4webserver .  

cd proxy
docker build -t ue4webrtc .

cd project
docker build -t demoproject .

接下來運(yùn)行三個(gè)鏡像的容器

docker run -itd --name=ue4_webserver --network=host ue4webserver
docker run -itd --name ue4_webrtc --network=host ue4webrtc
docker run -itd --gpus=all --name=demoproject --network=host demoproject 

然后關(guān)閉一下防火墻

systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld

OK !!!
接下來看一下效果
打開瀏覽器阁吝,輸入ip地址


在這里插入圖片描述
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末砚婆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子突勇,更是在濱河造成了極大的恐慌装盯,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甲馋,死亡現(xiàn)場離奇詭異埂奈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)定躏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門账磺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芹敌,“玉大人,你說我怎么就攤上這事垮抗∈侠蹋” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵冒版,是天一觀的道長液茎。 經(jīng)常有香客問我,道長辞嗡,這世上最難降的妖魔是什么捆等? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮欲间,結(jié)果婚禮上楚里,老公的妹妹穿的比我還像新娘。我一直安慰自己猎贴,他們只是感情好班缎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著她渴,像睡著了一般达址。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趁耗,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天沉唠,我揣著相機(jī)與錄音,去河邊找鬼苛败。 笑死满葛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的罢屈。 我是一名探鬼主播嘀韧,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缠捌!你這毒婦竟也來了锄贷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤曼月,失蹤者是張志新(化名)和其女友劉穎谊却,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哑芹,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炎辨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绩衷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹦魔。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡激率,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勿决,到底是詐尸還是另有隱情乒躺,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布低缩,位于F島的核電站嘉冒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏咆繁。R本人自食惡果不足惜讳推,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玩般。 院中可真熱鬧银觅,春花似錦、人聲如沸坏为。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匀伏。三九已至洒忧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間够颠,已是汗流浹背熙侍。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留履磨,地道東北人蛉抓。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像剃诅,于是被迫代替她去往敵國和親芝雪。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容