0%

PVE下使用(PCT)LXC如何搭建媒体服务器并正确开启硬件加速

跑在什么什么上面好呢? 我的首选当然是创建一个PVE里的CT来跑了,这种轻量级虚拟化的好处有如下几点: 1.占用存储空间较少 (由于我这台机器存储空间比较紧张,所以必然选择这种方式啦). 2.性能损耗几乎为0,与物理机拥有相同的性能. 3.当然还有就是搭建方便快捷啦,turnkeylinux上面有海量的模板,几乎你需要的在上面都能找到(例如docker plex jellyfin emby 等等..). 总结一下就是,性能好占用少还方便!! 香~. 服务器程序我选择的是Jellyfin,听说硬件转码是免费的.

搭建过程非常简单无脑: 1.下载模板: 模板可能要使用科学的方式获取,大家应该都懂。   或者也可以自行网上搜索,替换一下国内镜像.   否则下载速度感人.

  2.创建CT. 第一步记得要把无特权容器的选项去掉,否则会创建不成功. 模板选择我们刚刚下载好的mediaserve 接下来的步骤就按照自己的需求分配CPU 内存等资源就可以了. 3.配置mediaserver     由于是CT,所以这一步非常之简单,开机后输入用户名密码,直接就会跳出设置向导,按照提示设置smb密码,jellyfin等等的密码即可.结束后会提示你各个后台的地址,打开浏览器访问即可     

搭建完成后,兴致冲冲的放了一段DOOM的演示视频(1080p 40m比特率)的视频测试转码性能. 但是发现开启转码后,CPU占用率直接飙升到95%,这必须得折腾一下硬件加速了:

4.配置CT渲染设备节点,开启硬件加速: 默认情况下.LXC并不会自动映射dev目录下的设备节点文件.所以我们首先需要修改配置文件,使LXC自动映射dev下的设备文件. 首先我们需要在host(pve) shell中确认一下host设备文件的情况,标红的参数我们需要用到: root@pve:~# ls -l /dev/dri/ total 0 drwxr-xr-x 2 root root         80 Apr 20 12:24 by-path crw-rw—- 1 root video  226,   0 Apr 20 12:24 card0 crw-rw—- 1 root render 226, 128 Apr 20 12:24 renderD128 video  id: 226,   0 render id:226, 128 修改LXC的配置文件,路径为/etc/pve/lxc/{你的CT ID}.conf.

例如我的CT ID是100,所以对应的文件是/etc/pve/lxc/100.conf 使用编辑器打开该文件进行编辑:

vim /etc/pve/lxc/100.conf 将以下内容添加到文件末尾(将对应的id替换成自己的): lxc.cgroup.devices.allow = c 226:0 rwm lxc.cgroup.devices.allow = c 226:128 rwm lxc.autodev: 1 lxc.hook.autodev:/var/lib/lxc/100/render_device_hook.sh

CT启动的时候,会执行lxc.hook.autodev里的内容,我们需要手动创建对应的节点文件 还是一样,使用编辑器创建并打开脚本文件:

  1. vim /var/lib/lxc/100/render_device_hook.sh

复制代码

将以下内容添加到文件中(一样,还是要替换成自己的设备id): mkdir -p ${LXC_ROOTFS_MOUNT}/dev/dri mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/card0 c 226 0 mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/renderD128 c 226 128

最后设置文件权限:

  1. chmod 755 /var/lib/lxc/100/render_device_hook.sh

复制代码

这样,我们CT的配置就修改好了,现在去启动CT吧. 启动后,我们还需要在CT里安装VA的驱动文件,以下命令均在CT内执行: apt-get install i965-va-driver apt-get install vainfo

安装完成后执行vainfo命令,如果打印如下类似信息就表明硬件转码已经可用了: root@mediaserver ~# vainfo error: XDG_RUNTIME_DIR not set in the environment. error: can’t connect to X server! libva info: VA-API version 0.39.4 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so libva info: Found init function __vaDriverInit_0_39 libva info: va_openDriver() returns 0 vainfo: VA-API version: 0.39 (libva 1.7.3) vainfo: Driver version: Intel i965 driver for Intel(R) Kabylake - 1.7.3 vainfo: Supported profile and entrypoints VAProfileMPEG2Simple            :        VAEntrypointVLD VAProfileMPEG2Simple            :        VAEntrypointEncSlice VAProfileMPEG2Main              :        VAEntrypointVLD VAProfileMPEG2Main              :        VAEntrypointEncSlice VAProfileH264ConstrainedBaseline:        VAEntrypointVLD VAProfileH264ConstrainedBaseline:        VAEntrypointEncSlice VAProfileH264Main               :        VAEntrypointVLD VAProfileH264Main               :        VAEntrypointEncSlice VAProfileH264High               :        VAEntrypointVLD VAProfileH264High               :        VAEntrypointEncSlice VAProfileH264MultiviewHigh      :        VAEntrypointVLD VAProfileH264MultiviewHigh      :        VAEntrypointEncSlice VAProfileH264StereoHigh         :        VAEntrypointVLD VAProfileH264StereoHigh         :        VAEntrypointEncSlice VAProfileVC1Simple              :        VAEntrypointVLD VAProfileVC1Main                :        VAEntrypointVLD VAProfileVC1Advanced            :        VAEntrypointVLD VAProfileNone                   :        VAEntrypointVideoProc VAProfileJPEGBaseline           :        VAEntrypointVLD VAProfileJPEGBaseline           :        VAEntrypointEncPicture VAProfileVP8Version0_3          :        VAEntrypointVLD VAProfileVP8Version0_3          :        VAEntrypointEncSlice VAProfileHEVCMain               :        VAEntrypointVLD VAProfileHEVCMain               :        VAEntrypointEncSlice VAProfileHEVCMain10             :        VAEntrypointVLD VAProfileHEVCMain10             :        VAEntrypointEncSlice VAProfileVP9Profile0            :        VAEntrypointVLD VAProfileVP9Profile0            :        VAEntrypointEncSlice VAProfileVP9Profile2            :        VAEntrypointVLD

现在再到Jellyfin的控制台,将转码的硬件加速设置为VA API,在转码再看看CPU占用以及拖动视频的相应速度~:

Enjoy….