有一个N100的小主机,装了一个PVE,又在上面部署了一个WordPress和OpenWrt,以及一个Linux系统,除了这些就没有其它的东西了,平常CPU也没有很高负载,想着也不能浪费了这么多剩余性能,所以就想着榨干它。很久前就听说过硬件解码,当然也在用,就是现在手里的一个黑群,买的是成品黑群,系统啥的都是配置好的,开箱即用,也就没有碰过硬件解码这个问题。现在有N100了就打算鼓捣鼓捣它,研究研究一下硬件解码。
一开始我是想着在LXC安装Docker,再在Docker里面安装Emby的,Docker鼓捣会了再鼓捣在LXC配置Emby。但是鼓捣了两天,LXC和Docker的Emby容器下都能看到/dev/dri下的文件,但是转码下看不到硬件编解码的选项。
后又在Emby论坛上讨论了一圈也没有搞定,结论说是Docker版的Emby只适合在标准虚拟机下,不适用于LXC。遂放弃。
后来就尝试使用Linux版的Emby,遂硬解成功。
环境
CPU:N100,PVE版本:8.2.2,Linux内核版本:6.8.4-2,LXC模板:Ubuntu 20.04 LTS,Emby版本:4.8.10.0,Emby会员。本教程只针对当前环境负责,其它自行尝试。
设备赋权
首先在PVE里给设备赋权。
chmod 666 /dev/dri/*
创建并配置LXC容器
需要创建一个特权容器
,即不要勾选无特权的容器
,如何创建LXC容器这里不再赘述了。
安装完不要启动,然后修改/etc/pve/lxc下的配置文件,增加以下内容,再启动LXC容器。
lxc.apparmor.profile: unconfined
lxc.cgroup.devices.allow: a
lxc.cap.drop:
lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.mount.entry: /dev/dri/card0 dev/dri/card0 none bind,optional,create=file
lxc.mount.entry: /dev/dri/renderD128 dev/dri/renderD128 none bind,optional,create=file
安装Emby并启用硬解
安装步骤这里不写了,自行去官网查看。
在LXC下能正常硬件转码也是误打误撞,当时是先折腾的DD版EE,实在搞不定了,又转战的LXC版EE。而在折腾DD版EE时,因为不能在转码里看到硬解选项,当时也尝试了给/dev/dri设置了666权限这个操作,后来搞不定DD版EE,这个设置也没有修改,直接应用在LXC版EE却成功了。而且这个问题也不是当时就发现的。因为我在折腾DD版EE和LXC版EE时把PP搞了很多设置,而我又不想弄乱PP,所以在XX成功后,重装了PP,然后再重新安装XX版EE,但是XX版EE也不能识别硬件转码,当时我快点崩溃,后来我又去官方论坛咨询,想着晚上或者明天应该能得到回复,但是到目前我写这篇教程,官方依然没有人回复。当天晚上我就想着不能坐以待毙,就想着折腾的这两天所做过的操作,试了几个就试出了在PP上的/dev/dri的666权限问题上。
安装完启用硬件加速,如果能看首选硬件解码器
和首选硬件编码器
选项下的支持的格式就说明你的CPU支持硬件解码,勾选所需要使用的格式以及优先级,当然前提是你使用的的Emby版本也要支持当前CPU才才会显示,二者缺一不可,我当前使用的是Emby版本是4.8.10.0。
播放视频时看到有两个绿色的图标就说明已经启用了硬件解码。
CPU对比
未启用硬件转码时的CPU占用会一直在百分之80左右。
启用硬件转码后CPU大幅下隆,只有百分之15左右徘徊,差距可以说是相当大了。