美文网首页
Linux上运行UE4像素流PixelStreaming

Linux上运行UE4像素流PixelStreaming

作者: 怒放的脚毛 | 来源:发表于2021-01-07 09:24 被阅读0次

    由于公司目前只有一台图形渲染服务器是linux系统的,现在需要运行一个UE4的像素流程序,但是Epic官方说明并不支持linux系统,然后就看到了这片文章
    https://adamrehn.com/articles/pixel-streaming-in-linux-containers/
    一个第三方做的支持linux系统像素流的兼容,使用的是docker来打包镜像方式解决环境的问题,由于该文档很多东西说的不是特别详细,我也摸索了很久才弄好,目前它只支持4.23.1版本的UE4,所以这里也是按照4.23.1版本来做。

    整个过程非常的漫长,需要有耐心。

    关于UE4像素流原理

    20210107093512.png

    由于移动设备,或者我们家庭电脑都可能在配置上无法支撑渲染UE4这么庞大的工程,所以官方提供做法是在服务器上进行运行UE4工程进行图形渲染,并转化成视频流的方式,然后把视频流传输到移动设备上观看,并且支持互动操作并反馈到服务器,然后服务器在做模型上的变化反馈。道理大概就是这样的。
    如上图所示,运行像素流主要需要三个部分:

    1. UE4主程序,也就是3D模型了
    2. WebRTC代理服务,主要是用于观看设备端直接建立p2p连接来进行传输像素流数据 ;
    3. Signaling and WebServer,这个就是web服务器了,主要是提供http接口,设备端先通过web服务器的接口来访问WebRTC服务器,然后建立p2p连接。

    环境说明

    下面是我的环境,仅做参考。
    系统:我使用的是物理机安装的Centos7.4版本系统
    CPU:i9第10代
    显卡: RTX3090, 独立显卡肯定是必须的了,而且根据文档提示,必须是N卡的
    内存:32G
    硬盘:500G, 最少得有这个大小,越大越好,安装完之后大概会使用180G左右,不包含你后续打包自己的工程

    PS:
    linux系统的/boot目录最好是400M以上

    NVIDIA 驱动安装

    在所有操作之前先保证显卡驱动的安装并能正常工作

    //安装依赖
    yum install kernel-devel gcc -y
    
    //检查内核版本和源码版本,保证一致
    ls /boot | grep vmlinu
    rpm -aq | grep kernel-devel
    
    //屏蔽系统自带的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)
    
    //修改运行级别为文本模式
    systemctl set-default multi-user.target
    
    //重启系统
    reboot
    
    //关闭boot secure, 启动按F2
    根据不同的UEFI版本,安全启动选项通常在一个选项卡下,这个选项卡可能被命名为“Boot”、“Security”或者“Authentication”,在类似的选项卡中查找,我们会发现一个“Secure Boot”选项,该选项默认设置为“Enabled”,选中它并回车,将其设置为“Disabled”,按[Apply]键存储设置
    如果不关闭待会安装的时候会有如下提示
    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?
    
    //下载对应的显卡驱动
    https://www.nvidia.cn/Download/index.aspx?lang=cn
    
    //添加执行权限
    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)
    
    安装的时候可能会有如下提示
    
    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 继续。
    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  继续
    
    挂载Nvidia驱动:
    modprobe nvidia
    
    显示驱动信息
    nvidia-smi
    
    reboot重启
    

    正常的话就会显示如下信息


    在这里插入图片描述

    安装docker

    由于整个过程都是在docker下编译镜像容器的形式来完成的,所有首先需要安装docker,安装如下步骤操作即可, 我的服务器环境是Centos7.4的,所以我的所有安装都是使用yum来安装的,你可以根据你的具体环境来调整

    //安装依赖
    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
    
    //启动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
    
    //下面是修改一下系统环境的一些东西,使得系统默认使用Python3,但是由于centos系统默认是安装了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
    

    关联git账号和Epic游戏账号

    这个是十分重要的,如果你不关联的话,你是看不到下面这个git仓库的:https://github.com/adamrehn/UnrealEngine.git

    1. 如果你没有git账号的话,先注册git账号
    2. linux服务器上安装git客户端
    3. 注册Epic游戏账号:https://www.unrealengine.com/
    4. 进行git账号和Epic账号关联, 如下图所示:
      在你账号里选择Personal,进入如下界面


    安装UE4 docker

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

    安装NVIDIA container-toolkit (nvidia-docker)

    根据不同系统可以在这里找到安装步骤
    https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html

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

    //导入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
    
    //安装运行cuda容器
    docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
    

    安装支持linux的UE4像素流环境镜像

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

    这个安装过程非常久,我几乎就要跪在这里了。由于我们网络很不稳定的情况下经常会安装到半路中断并提示错误,不用理它,直接重新运行这个指令,在安装一次,已安装的依赖不会重新下载的。
    安装完之后,磁盘会消耗一百多G,所以分配的硬盘一定不能少。
    看到如下信息代表安装成功了


    打包demo工程进行测试

    把demo工程克隆到本地

    git clone https://github.com/adamrehn/ue4-example-dockerfiles.git
    
    进入如下路径
    cd ./ue4-example-dockerfiles/pixel-streaming/4.23
    

    这里有三个目录。分别就是文章一开始说的,一个WebRTC、一个WebService,还有一个就是demo游戏程序。
    分别用docker进行build镜像

    cd server 
    docker build -t ue4webserver .  
    
    cd proxy
    docker build -t ue4webrtc .
    
    cd project
    docker build -t demoproject .
    
    

    接下来运行三个镜像的容器

    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 
    

    然后关闭一下防火墙

    systemctl status firewalld
    systemctl stop firewalld
    systemctl disable firewalld
    

    OK !!!
    接下来看一下效果
    打开浏览器,输入ip地址


    在这里插入图片描述

    相关文章

      网友评论

          本文标题:Linux上运行UE4像素流PixelStreaming

          本文链接:https://www.haomeiwen.com/subject/debnoktx.html