分享一种简单得不能再简单的群晖DS918+下Jellyfin调用核显硬解的办法
最近可能下雨比较多,水分比较充足,所以就又水一篇骗金币的水文排排水吧
张大妈上介绍群辉,介绍unRAID,介绍各种NAS系统下运行Doxker让Jellyfin调用核显硬解的教程太多了,但是都离不开一项操作,那就是SSH连上终端,然后输入一大堆命令把/dev/dri/文件夹下的核显驱动挂载到Docker里的Jellyfin,让其能够调用核显进行GPU硬解。
所谓大道至简,那有没有一种方法,可以不用SSH登录终端,不用输入一大堆命令,就能让Docker里的Jellyfin调用核显实现硬件解码的方式呢?答案是肯定的,那么今天我们今天就来分享这种点几下鼠标就把核显直通给Docker里的Jellyfin的方法。
有人可能觉得登录个SSH,又是docker pull,又是-v又是-p又是--device添加一大堆参数的样子很牛“哔”。
但是,这只是你认为的牛“哔”,别人可不一定这么认为。曾经,本老司机也以为自己输入一大堆命令操作Linux很牛“哔”,但某日,公司里一个小姐姐一脸懵逼的问我:“你对着一个黑色窗口噼里啪啦输入那么多东西,是干啥呢?”。我幡然醒悟,想通过技术撩妹那是行不通的,小姐姐们才不懂,也不会去关心这些。她们只会觉得你随便点点几下鼠标,就帮她把一个Excel表格的数据整得明明白白厉害,而不会觉得你对着一个窗口捣鼓半天而不明所以厉害。
所以现在能一个脚本跑完的操作,打死我都不会去自己一行行代码,一行行命令去手打输入。有那时间,还不如让脚本自己在那跑着,咱去一边逗逗小姐姐多好
扯远了,扯远了,我们回正题
那么,怎么样才能通过简单的点几下鼠标,就能把核显直通给Docker里的Jellyfin调用呢?
下面请登录你的群晖
,右手握住鼠标,跟着我一起操作(左撇子请自觉使用你得左手
)
所谓万事开头难,那么第一步当然是在群晖里点击Docker的图标,否则下面的操作你也实现不了
让我们在“注册表”里搜索jellyfin,经过漫长的“加载中...”,给我们列出了一大堆的结果
双击第一个获得星星最多的jellyfin/jellyfin,再次经过漫长的“加载中...”,它又弹出一了个窗口
这里默认会为你选择"latest"版本的Docker镜像,这是Jellyfin官方打包的最新Stable稳定版Docker包,但不知道是这群老外最近被疫情搞得焦头烂额,还是真的粗心大意,最近几个版本的Docker镜像都有问题,具体的表现就是配置完成后,点击SAVE无法保存,会提示There was an error processing the request. Please try again later.
所以我们需要点一下右边的蓝色小三角,手动选择一下版本,据老夫测试,发现10.4.3这个版本能够正常使用,不会有坑。当然,你愿意SSH进到Docker里边慢慢调试也行,反正我是不愿意的
所以我们在下拉的选择框中找到10.4.3版本的,不要选什么"10.4.3-amd64"也不要选什么"10.4.3-arm64",就选"10.4.3",相信我,准没错
选好之后,点击“选择”这个蓝色方框,就会开始下载了,其实这一步就相当于你在SSH里输入的docker pull jellyfin/jellyfin
又是经过漫长的等待,这个600兆的Docker镜像终于下载好了,先别着急去启动,让我们先在File Station下建立一个jellyfin的文件夹,然后再在jellyfin文件夹下再建立config和cache两个文件夹,目录结构如下图
当然你喜欢在别的地方建立也行,我这么做只是习惯使然,一目了然,一看就知道这仨文件夹是docker下运行的jellyfin使用的文件夹。
接下来让我们继续鼠标操作之旅,回到Docker里点击“映像”,选中之前已经下载好的Jellyfin的镜像,再点“启动”,这时会弹出个创建容器的窗口,继续点击“高级设置”->“卷”,让我们点击“添加文件夹”把刚刚在File Station中创建的文件夹分配一下,顺便把你存电影的文件夹也一起添加进去,要不你只能看空气
请看图
其实这一步就是你在SSH里输入的下面这一大串代码
-v /volume1/docker/jellyfin/config:/config
-v /volume1/docker/jellyfin/cache:/cache
-v /volume1/video:/video
既然说到上面这一大串东西,顺带再啰嗦一下吧,-v /volume1/docker/jellyfin/config:/config就是把你硬盘上的config文件夹挂载到Docker里的Jellyfin下的config下,用来存放Jellyfin的配置文件,用户数据,日志和在线转码的临时文件夹的,我建议如果你的群辉里有SSD的存储空间,最好是把这个文件夹放在SSD上,因为你在Jellyfin上转码播放视频的时候,Jellyfin会调用核显和FFmpeg将正在播放的视频,分段生成一个当前播放码率的临时文件,大概3-5分钟一段,播放完成便会删除,这些临时文件存在config文件夹下的transcoding-temp文件夹里,所以这是个频繁读写的文件夹,当然要好好利用一些SSD的读写性能来加速这个过程啦。如果没有SSD也无所谓,放机械盘上也行,但是最好与存电影的硬盘分开,放在一个独立的存储空间里就行。如果你群晖只有一个存储空间,那当我啥也没说,爱咋咋地,又不是不能用,是吧
而-v /volume1/docker/jellyfin/cache:/cache这句当然就是把cache挂载到Jellyfin里的cache啦,这个cache其实就是一些页面的缓存和临时文件的存放地方。
行了,废话一大堆,下面继续,切换到“网络”这里,很多教程里都是-p 8096:8096又-p 8920:8920做端口映射,其实这两段代码的意义,就是下一个选项“端口设置”里添加的“本地端口”和“容器端口”,没必要,步骤太繁琐了,Jellyfin官方的Docker文档不知道有多少人看过,网络的参数官方例子其实就是一个--net=host搞定,就是下图中“使用与Docker Host相同的网络”打上勾就行了
对,就是这么简单,打个勾就行了
当然,你的群晖如果接入的网络比较复杂,或者Jellyfin的默认端口已经被占用,那就只能通过“端口设置”里来做转发了。我这个教程的目前很明确,就是一切从简,怎么方便怎么来,而且我想一般家庭里的网络也复杂不到哪里去。
好了,所有的鼠标操作就是这些,都设置好了就放心大胆的点“应用”吧,其他的都不用理会。然后“下一步”->“应用”
这里没有截图,因为忘记了。
这时候你可以看到Jellyfin的Docker容器已经启动起来了,让我们在浏览器访问http://你的群晖IP:8096,对Jellyfin噼里啪啦一顿
初始化的操作,并在后台的“播放”-->“转码”里设置好VAAPI并保存后,让我们来看个片试试效果如何
是不是像我一样播放错误?
是那就对了,必须播放不了啊,关键的操作还没做呢
围观群众一边摩拳擦掌,一边表示:你丫叽叽歪歪水了半天的字数,就让我看这个?能不能说重点?
嘿嘿嘿,好东西肯定要留到最后再说嘛,要不开篇马上告诉你方法,你马上就看完直接关浏览器走人了,我还怎么水文章骗金币
好了,下面开始最关键的一步操作,放心还是用鼠标,不会让你登录SSH。如果你有探索的精神,你也可以这个时候登录SSH进入Jellyfin的容器内部看看,你会看到其实这个时候是没有直通核显驱动给容器的
没错,Jellyfin的容器里/dev下没有dri文件夹,更别说什么有/dev/dri/renderD128给它调用了
我们先把容器给关闭了,然后点击“编辑”,下面开始我们最重要的一次鼠标点击
让我们看看一个一直被忽视的选项“使用最高权限执行容器”。没错,就是它,把它勾上,其实这个操作就是很多教程里开始的第一步sudo docker run -d --name jellyfin
本来在浏览器里打个勾就能搞定的操作,为啥那么多人喜欢这一大串命令呢?你说是我鼠标打个勾方便,还是你输入一大堆命令方便
下边的“启用自动重新启动”这个也一起勾上,这其实就是--restart unless-stopped这一句的操作
好了,具有探索精神的你这个时候可以再去容器里看看,是不是/dev下有dri文件夹了?里边是不是也有renderD128了?
让我们再来看个片吧
怎么样?可以在线转码了没?CPU占用高不?
再去群晖里TOP看看,有看到排第一的那条没?正常调用核显解码了吧?
还可以去transcoding-temp里看看,是不是有转码的临时文件生成?
好了,水完了,是不是全程鼠标操作