跑在什么什么上面好呢?
我的首选当然是创建一个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里的内容,我们需要手动创建对应的节点文件
还是一样,使用编辑器创建并打开脚本文件:
- 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
最后设置文件权限:
- 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….
0