近期在linux系统上部署了一套虚幻引擎的像素流送服务,简单记录一下过程。
检查硬件
安装Docker
选择安装平台
Docker要求CentOS系统的内核版本高于3.10
uname -r #通过 uname -r 命令查看你当前的内核版本
之后按照官方文档安装即可
Docker安装文档https://docs.docker.com/get-docker/
在安装新Docker之前要先卸载旧的Docker
安装NVDIA容器工具包
首先在linux系统闪更需要有gpu,并支持够硬件加速,首先需要安装NVDIA容器工具包
虚幻引擎容器
了解虚幻引擎镜像拉取的先决条件及容器入门,这个文档内有拉取虚幻引擎镜像的先决条件与EPIC账号与虚幻引擎Github仓库相关联,此为必要操作
虚幻引擎Docker镜像拉取
建议拉取像素流送运行时镜像
docker pull ghcr.io/epicgames/unreal-engine:runtime-pixel-streaming
拉取信令服务器镜像,后面的5.2为引擎的版本
docker pull ghcr.io/epicgames/pixel-streaming-signalling-server:5.2
注意,信令服务器需要与当前引擎版本相同。
拉取coturn
docker pull coturn/coturn
拉取完成后环境搭建完成。
Docker-Compose下载
由于像素流的启动需要同时启动多个容器,所以使用到DockerCompose
DockerCompose下载安装https://docs.docker.com/compose/
上传虚幻引擎程序
在Windows上打包Linux程序
虚幻引擎提供交叉编译工具包,提供在windows系统上打包Linux程序的功能。
注意,工具包必须选择与当前引擎版本相同的版本。打包的文件务必开启像素流送插件!!!
在linux打包
在linux打包需要下载开发版本的虚幻引擎镜像而并非运行时镜像
拉取开发镜像,4.27为引擎版本。
docker pull ghcr.io/epicgames/unreal-engine:dev-4.27
我使用在windows打包,所以后续将介绍在windows打包后如何在Linux上运行。但是理论上在Liunx打包,除了打包方式不同外,其他并无差别。
上传程序
我使用FinalShell链连接Linux服务器,直接拖动文件到你想要的文件夹下即可
刚开始文件上传完成应该只有Liunx与linux_ue_project_test文件夹,我这里是有两个项目,所以是两个文件夹,正常只有一个文件夹。
剩余的文件在引擎目录下,project文件夹下有Dockerfile文件
将文件复制到服务器上,准备完成。
注意,建议run.sh文件不要直接复制,在服务器上新建.sh文件,然后手动将代码复制到文件里,FinalShell提供直接修改文件的功能,右键打开即可,这样可以避免因编码问题导致.sh文件无法运行的问题。
相关的文件修改
将文件上传完成后,我们并不能直接运行,需要修改相关的文件。
修改文件的执行权限
在程序运行的时候,容器内部会对UE的程序的文件进行执行,读取,写入的操作,所以必须先把所有的文件的权限打开。在FinalShell中右键文件夹,在弹出的右键菜单中选择文件权限,会弹出如下界面,按照下面界面设置,确定即可。
修改Dockerfile文件
原始的Dockerfile文件应该是下面这个样子
上面的一部分代码是使用虚化引擎的dev版本进行打包,我们已经在外部进行了打包,所以上面部分不需要,修改完后的文件为
其中Copy命令为把UE的文件拷入容器内,前面的为宿主机文件路径,后面的文件路径为容器内路径,文件夹会自动创建,ENTERPOINT为配置容器进入点,这里表示进入容器时运行ZGDX.sh。
修改docker-compose文件
原始文件如下图
修改后的文件内容如下
修改 turnserver下的image,这个镜像的名字为我们下载的coturn的镜像名字加版本号,由于我拉取镜像时没有指定版本,所以拉取的是最新的镜像,版本号为latest。
修改project下的image与build下的context,image为我们使用上面的dockerfile创建的docker镜像的名称,自定义设置,context为dockerfile文件所在的文件目录,./代表当前目录下,目录是相对docker-compose文件的位置。
project下的command参数为像素流送的启动参数。
运行Liunx像素流送程序
在Linux中使用bash进入到run.sh所在目录,使用
bash run.sh 5.2
后面5.2为run.sh需要的参数,参数为你使用的当前的引擎版本
下面为运行成功的结果
其它问题
报错initSDL
如果出现此错误,是由于没有输出设备所致,运行时加上参数-RenderOffScreen即可,如果不加则需要额外的添加对虚拟输出的支持。
镜像的版本不对
使用bash命令
docker images
查看当前安装的镜像与版本,检查是否与引擎版本一致