常见的群晖机器,例如 DS920+DS918+,系统内核一直是 4.4 的,而这个内核自带的核显驱动最高支持到 9 代,支持的CPU型号分别是J3455(DS918+)和J4155(DS920+)。而目前DIY搭建NAS系统有了更多的低功耗平台选择,如发布于2021年的Jasper Lake平台系:N5095,N5105,N6005等。这些平台的集成显卡在群晖NAS的4.4内核里并不能缺省支持,因此也无法实现在Emby/Jellyfin/Plex等媒体服务器的硬解和其它的一些高级功能。本文介绍一种在使用DS920+和DS918+镜像的黑群晖系统上快速制作核显补丁支持硬解的方法。其它的配置本人未经测试,请谨慎。

下载和备份核显驱动module i915.ko

在群晖系统里,驱动程序模块ko一般在/usr/lib/modules目录下。将这个目录下的i915.ko文件(核显驱动模块)备份一下以防意外。

sudo cp /usr/lib/modules/i915.ko /usr/lib/modules/i915.ko.orig

启动DSM File Station,找一个目录,一会儿需要用这个目录转存i915.ko。我这里选择的是我用户主目录下的temp目录。选中这个目录,单击鼠标右键,选择“属性”。

在属性对话框中,记下位置文本框中显示的绝对路径。

返回到NAS的命令行,将i915.ko拷贝到上面的路径。

sudo cp /usr/lib/modules/i915.ko /volume2/homes/hyang/temp

这时候temp目录下就有i915.ko文件了。

鼠标右键单击下载,将i915.ko文件下载到本地。

下载SynologyVGPUTools

下载SynologyVGPUTools到本地。本工具exe文件大小为2.412KB,仅支持Windows操作系统。

 

SynologyVGPUTools工具包下载地址:

https://nas.yanghong.dev:8203/Synology/Tools/SynologyVGPUTools.zip

 

 

查询iGPU设备型号

通过浏览器访问英特尔的产品资料查询网站:https://ark.intel.com

在“Search Specification”输入框中输入NAS的CPU型号。我的NAS用的是N6005 CPU,输入N6005,点击放大镜查询。

在查询的结果页面,选择GPU Specification,记录下Device ID的内容。我的GPU Device ID是0x4E71。

制作核显补丁

选中SynologVGPUTools.exe文件,单击鼠标右键,选择“以管理员身份运行”。

这时候会弹出一个对话框选择核显驱动的ko文件。选中我们刚才从File Station下载到本机的i915.ko文件,点击“打开”。

输入刚才记录下的Device ID,我的Device ID是0x4E71,所以输入4E71,按回车。

再次输入Device ID以确保无误,然后回车。

这时候核显驱动的补丁就已经成功生成,放在C:盘的根目录下了。

回到DSM File Station,将C:盘根目录下的i915.ko文件上传回到temp目录下,选择“上传-覆盖”以覆盖掉原来的i915.ko。

启用核显补丁

然后把这个补丁的ko文件拷贝回/usr/lib/modules目录,以替换系统原有的的核显驱动,并重新启动NAS以启用补丁后的核显驱动。

sudo cp -f /volume2/homes/hyang/temp/i915.ko /usr/lib/modules
sudo chmod 644 /usr/lib/modules/i915.ko
sudo reboot

重启后验证核显驱动加载是否正常。在命令行输入如下命令:

sudo -i
ls /dev/dri
cat /sys/kernel/debug/dri/0/i915_frequency_info

如果能看到红框中的信息则恭喜你,核显驱动工作正常,可以去Emby/Jellyfin/Plex启用硬解了。本文以开源的Jellyfin为例,Emby和Plex应该跟Jellyfin类似。

Jellyfin docker启用硬解

首先,Jellyfin docker启动的时候需要把/dev/dri设备映射到docker里,DSM缺省的container manager是不支持这样的操作的。可以用portainer或者命令行创建docker container。这里以命令行为例。

sudo docker run -d \
–name jellyfin_i915
–volume /volume1/docker/jellyfin_i915/config:/config
–volume /volume1/video:/mnt/video
–device /dev/dri:/dev/dri
–publish 8096:8096
–publish 8920:8920
–env UID=0
–env GID=0
–env GIDLIST=0
jellyfin/jellyfin:latest

登录Jellyfin server的管理界面,选择播放->转码->硬件加速,选择“Video Acceleration API (VAAPI)”,在“启用硬件解码”下面,勾选上。

VA-API设备设置“/dev/dri/renderD128”(缺省应该设置好了),在“启用硬件解码”下面勾选所有适用的选项,并保存。

打开Jellyfin客户端(或者其它客户端播放软件),播放一个高清视频。我用ios infuse播放阿凡达水之道。

在群晖DSM的资源监控里看到,CPU占用非常低,仅为8%,说明硬解工作正常了。

Emby如果需要支持硬解的话,需要购买Emby Premiere会员。如果仅出于学习目的的话,可以参考我的另外一篇博文使用Emby server开心版:https://blog.yanghong.dev/nas-diy-emby-server/

感谢热爱钻研的本站网友 @laiba 分享了他在 Gemini Lake 平台 + 新版 Jellyfin 上解决硬解问题的过程,总结如下,希望能给碰到类似问题的同学带来一些思路。

1. 使用本文下载的工具查看自己的CPU型号,如果是Gemini Lake,则在BIOS里disable VT-d
2. 完成第一步以后,系统里就能看到 /dev/dri/renderD128 设备了,不需要其它的操作(如修改并替换i915.ko)
3. 关于Jellyfin如果不能硬解,则按照下述的步骤:
先找到jellyfin中的ffmpeg所在的位置,如果是安装的套件,一般是/volume1/@appstore/jellyfin/……
可以用find /volume1/@appstore/jellyfin/ | grep ffmpeg找到后 将ffmpeg改名为 ffmpeg-orig,然后将下面的内容贴到一个文件中,该文件中的换行符需要是 LF,不能是CRLF,文件命名为 ffmpeg,放到ffmpeg-orig同级目录下,
#Beginning of new ffmpeg file————————————————————————-
#!/bin/bash
paras=”$(sed ‘s/rc_mode\ [CV]BR/rc_mode CQP/g’ <<< $)”
MYDIR=$(realpath “$0”})
“$MYDIR/ffmpeg-orig” $paras
#End of new ffmpeg file—————————————————————————
设置权限为 755, 设置用户为 ffmpeg-orig相同的用户即可,
如果在docker中,替换方法类似,ffmpeg路径为/usr/lib/jellyfin-ffmpeg。
到这一步 Jellyfin 硬解支持的问题也应该ok了。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。