问题
jellyfin是一个开源的视频管理平台,比群晖自带的video station功能更强,但是直接通过918的docker界面直接安装的jellyfin,由于没有进行device的映射,因此实际上是没有启动硬解的。
表面上jellyfin的控制台开启了VAAPI,但实际上在后台一直在报错。
后台报错如下:
原因
这是由于群晖的docker控制台的限制,群晖核显/dev/dri/renderD128并没有真正映射到容器中。
解决方案
ssh到群晖后台,利用root账户启动docker,例如:
sudo <span class="token operator">-</span>i docker pull jellyfin<span class="token operator">/</span>jellyfin:10<span class="token punctuation">.</span>5<span class="token punctuation">.</span>5<span class="token operator">-</span>amd64 docker run <span class="token operator">-</span>d <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin:<span class="token operator">/</span>config <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin:<span class="token operator">/</span>cache <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>video:<span class="token operator">/</span>media <span class="token operator">--</span>net=host <span class="token operator">--</span>restart=always <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128 <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0 <span class="token operator">--</span>name=<span class="token string">"jellyfin10.5.5"</span> jellyfin<span class="token operator">/</span>jellyfin:10<span class="token punctuation">.</span>5<span class="token punctuation">.</span>5<span class="token operator">-</span>amd64 sudo <span class="token operator">-</span>i docker pull jellyfin<span class="token operator">/</span>jellyfin:10<span class="token punctuation">.</span>5<span class="token punctuation">.</span>5<span class="token operator">-</span>amd64 docker run <span class="token operator">-</span>d <span class="token operator">/</span> <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin:<span class="token operator">/</span>config <span class="token operator">/</span> <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin:<span class="token operator">/</span>cache <span class="token operator">/</span> <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>video:<span class="token operator">/</span>media <span class="token operator">/</span> <span class="token operator">--</span>net=host <span class="token operator">/</span> <span class="token operator">--</span>restart=always <span class="token operator">/</span> <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128 <span class="token operator">/</span> <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0 <span class="token operator">/</span> <span class="token operator">--</span>name <span class="token string">"jellyfin10.5.5"</span> <span class="token operator">/</span> jellyfin<span class="token operator">/</span>jellyfin:10<span class="token punctuation">.</span>5<span class="token punctuation">.</span>5<span class="token operator">-</span>amd64sudo <span class="token operator">-</span>i docker pull jellyfin<span class="token operator">/</span>jellyfin:10<span class="token punctuation">.</span>5<span class="token punctuation">.</span>5<span class="token operator">-</span>amd64 docker run <span class="token operator">-</span>d <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin:<span class="token operator">/</span>config <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin:<span class="token operator">/</span>cache <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>video:<span class="token operator">/</span>media <span class="token operator">--</span>net=host <span class="token operator">--</span>restart=always <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128 <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0 <span class="token operator">--</span>name=<span class="token string">"jellyfin10.5.5"</span> jellyfin<span class="token operator">/</span>jellyfin:10<span class="token punctuation">.</span>5<span class="token punctuation">.</span>5<span class="token operator">-</span>amd64 sudo <span class="token operator">-</span>i docker pull jellyfin<span class="token operator">/</span>jellyfin:10<span class="token punctuation">.</span>5<span class="token punctuation">.</span>5<span class="token operator">-</span>amd64 docker run <span class="token operator">-</span>d <span class="token operator">/</span> <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin:<span class="token operator">/</span>config <span class="token operator">/</span> <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin:<span class="token operator">/</span>cache <span class="token operator">/</span> <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>video:<span class="token operator">/</span>media <span class="token operator">/</span> <span class="token operator">--</span>net=host <span class="token operator">/</span> <span class="token operator">--</span>restart=always <span class="token operator">/</span> <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128 <span class="token operator">/</span> <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0 <span class="token operator">/</span> <span class="token operator">--</span>name <span class="token string">"jellyfin10.5.5"</span> <span class="token operator">/</span> jellyfin<span class="token operator">/</span>jellyfin:10<span class="token punctuation">.</span>5<span class="token punctuation">.</span>5<span class="token operator">-</span>amd64sudo -i docker pull jellyfin/jellyfin:10.5.5-amd64 docker run -d --volume /volume1/docker/jellyfin:/config --volume /volume1/docker/jellyfin:/cache --volume /volume1/video:/media --net=host --restart=always --device /dev/dri/renderD128:/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0 --name="jellyfin10.5.5" jellyfin/jellyfin:10.5.5-amd64 sudo -i docker pull jellyfin/jellyfin:10.5.5-amd64 docker run -d / --volume /volume1/docker/jellyfin:/config / --volume /volume1/docker/jellyfin:/cache / --volume /volume1/video:/media / --net=host / --restart=always / --device /dev/dri/renderD128:/dev/dri/renderD128 / --device /dev/dri/card0:/dev/dri/card0 / --name "jellyfin10.5.5" / jellyfin/jellyfin:10.5.5-amd64
核心就在于--device /dev/dri/renderD128:/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0
这两句,之后就可以愉快的玩耍啦,实测一台白918和另一台蜗牛j1900安装的黑群晖均可以硬解。而且后续通过群晖docker控制台停止、重启该容器,都不影响硬解。
实测环境 | 版本 |
---|---|
群晖 | 918 6.2.1-23824 Update 6 |
jellyfin | 10.5.5-amd64 |
ffmpeg | ffmpeg 4.2.2-28 |
更新:截止2020年11月17日,jellyfin已更新至10.6.4
docker run <span class="token operator">-</span>d <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin<span class="token operator">/</span>config:<span class="token operator">/</span>config <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin<span class="token operator">/</span>cache:<span class="token operator">/</span>cache <span class="token operator">--</span>volume <span class="token operator">/</span>volume3<span class="token operator">/</span>video:<span class="token operator">/</span>media <span class="token operator">--</span>net=host <span class="token operator">--</span>restart=always <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128 <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0 <span class="token operator">--</span>name=<span class="token string">"jellyfin10.6.4"</span> jellyfin<span class="token operator">/</span>jellyfin:10<span class="token punctuation">.</span>6<span class="token punctuation">.</span>4<span class="token operator">-</span>amd64docker run <span class="token operator">-</span>d <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin<span class="token operator">/</span>config:<span class="token operator">/</span>config <span class="token operator">--</span>volume <span class="token operator">/</span>volume1<span class="token operator">/</span>docker<span class="token operator">/</span>jellyfin<span class="token operator">/</span>cache:<span class="token operator">/</span>cache <span class="token operator">--</span>volume <span class="token operator">/</span>volume3<span class="token operator">/</span>video:<span class="token operator">/</span>media <span class="token operator">--</span>net=host <span class="token operator">--</span>restart=always <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>renderD128 <span class="token operator">--</span>device <span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0:<span class="token operator">/</span>dev<span class="token operator">/</span>dri<span class="token operator">/</span>card0 <span class="token operator">--</span>name=<span class="token string">"jellyfin10.6.4"</span> jellyfin<span class="token operator">/</span>jellyfin:10<span class="token punctuation">.</span>6<span class="token punctuation">.</span>4<span class="token operator">-</span>amd64docker run -d --volume /volume1/docker/jellyfin/config:/config --volume /volume1/docker/jellyfin/cache:/cache --volume /volume3/video:/media --net=host --restart=always --device /dev/dri/renderD128:/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0 --name="jellyfin10.6.4" jellyfin/jellyfin:10.6.4-amd64
原文链接:https://blog.csdn.net/austin1000/article/details/106021513?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171836830316800182722908%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171836830316800182722908&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-26-106021513-null-null.nonecase&utm_term=jellyfin