如果前面硬件转码已经起作用,这一步的升级是非必须的,老苏只是想看看升级后会不会有什么变化而已,比如让 Jellyfin 支持 Intel Quick Sync ,据说 Intel Quick Sync 提供了更好的转码性能,可能帧率会提高几倍?

前言

折腾 Intel Quick Sync 最好用 linuxserver/jellyfin 而不是官方的 jellyfin/jellyfin,主要原因:

  1. linuxserver/jellyfin 基于 ubuntu(focal),而 jellyfin/jellyfin 基于 debian(buster)
  2. linuxserver/jellyfin 已经配置好源,可以直接通过命令行升级最新版本;
  3. linuxserver/jellyfin 遇到问题比较容易找到解决方案,毕竟折腾的人多;

老苏继续使用官方的镜像不是因为固执,只是为了研究

进入容器

老苏目前安装的 latest 版对应的 Jellyfin 的版本是 10.7.7

接下来的操作将在容器内进行,进入容器的方法一般是通过 SSH 客户端执行下面的命令

# 进入容器名称为 jellyfin 的内部操作
docker exec -it jellyfin /bin/bash

但既然都已经用了 portainer ,就没必要了再用 SSH 客户端了,因为 portainer 具备和群晖 终端机 一样的功能,而且比 终端机 更好用

ContainersQuick actions 下面找到 >_

点击后进入 Container console

Connect 进入容器

查看信息

要查看信息需要先安装相应的软件,比如 vainfolshw

# 更新源
apt update

# 安装 vainfo、lshw
apt install -y vainfo lshw

先查询 jellyfin 容器的相关的信息,内核是 Debian(buster)

# 查看容器的内核版本
cat /etc/issue

# 或者
cat /etc/*release

再查询下显卡信息,显卡确实是 Intel HD Graphics 5500,驱动是 i915/i965

# 显卡信息
lshw -c display

# 或者 
lshw -c video

# 设备列表
lspci | grep VGA

# 显示开机信息
dmesg

最后看看驱动,有报错

# 查看 intel 驱动
vainfo

显卡驱动

Intel Quick Sync 需要用到 Intel "non-free" 的驱动,这个 "non-free" 不是指要花钱,而是指代码是闭源的,但官方 docker 并没有安装 "non-free" 驱动

Jellyfin 永远不会将 Intel "non-free" 驱动作为其官方 docker 镜像的一部分,因为他们承诺只包含开源软件。而 Linuxserver.io 没有这样的限制,因此他们可以自行决定将 Intel "non-free" 驱动与 Jellyfin 捆绑在其 Jellyfin 容器中

从老苏的经验和阅读的参考资料看,驱动版本并不是越新越好(看到不少写降级的),其实关键还是在于 ffmpeg 和驱动的相互配合和协调,只有彼此兼容的正确版本,才能发挥出作用

后面你会看到这个容器的 ffmpeg 还是 4.3.2,但最新的版本已经是 4.4.1

驱动的版本也在不断升级迭代中,所以只有测试才能发现问题,但是老苏平时也没关心这方面,所以都先用最新版吧,毕竟只是介绍过程。

老苏在这里尝试了几种方式,受限于内核 Debian(buster),驱动的版本都只能是 18.4.1+ds1-1 ,用 vainfo 看其实是失败了

尝试一(失败)

intel 官方文档的方法,添加的 Ubuntu 18.04 (bionic) 的源

# 安装 gpg-agent、wget、curl
apt install -y gpg-agent wget curl

# 添加 intel key
wget -qO - https://repositories.intel.com/graphics/intel-graphics.key | apt-key add -

# 备份(可选操作,只是老苏的个人习惯)
cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 添加 intel 源(ubuntu bionic)
echo 'deb [arch=amd64] https://repositories.intel.com/graphics/ubuntu bionic main' >> /etc/apt/sources.list

# 更新源
apt update

# 尝试安装驱动
apt install -y intel-media-va-driver-non-free

装了半天什么都没有

# 安装 aptitude 软件包管理器
apt install -y aptitude

# 尝试用包管理器安装驱动
aptitude install -y intel-media-va-driver-non-free

用包管理器结果也是一样的

【结论】:自 20211014 日起,intel 已经不再为 Ubuntu 18.04 提供更新的软件包。

尝试二(失败)

尝试将 /etc/apt/sources.list 源加上 non-free,需要先安装编辑器

# 安装 vim
apt install -y  vim

# 修改/etc/apt/sources.list
vim /etc/apt/sources.list

原来的的 /etc/apt/sources.list 是这样的

# deb http://snapshot.debian.org/archive/debian/20210902T000000Z buster main
deb http://deb.debian.org/debian buster main
# deb http://snapshot.debian.org/archive/debian-security/20210902T000000Z buster/updates main
deb http://security.debian.org/debian-security buster/updates main
# deb http://snapshot.debian.org/archive/debian/20210902T000000Z buster-updates main
deb http://deb.debian.org/debian buster-updates main
deb [arch=amd64] https://repositories.intel.com/graphics/ubuntu bionic main

除了上一步添加的源之外,其他的 3 条都在 main 后面加上了 non-free

# deb http://snapshot.debian.org/archive/debian/20210902T000000Z buster main
deb http://deb.debian.org/debian buster main non-free
# deb http://snapshot.debian.org/archive/debian-security/20210902T000000Z buster/updates main
deb http://security.debian.org/debian-security buster/updates main non-free
# deb http://snapshot.debian.org/archive/debian/20210902T000000Z buster-updates main
deb http://deb.debian.org/debian buster-updates main non-free
deb [arch=amd64] https://repositories.intel.com/graphics/ubuntu bionic main

保存之后要重新更新一下

# 更新源
apt update

# 检查可用的驱动版本
apt-cache madison intel-media-va-driver-non-free

# 安装驱动
aptitude install -y intel-media-va-driver-non-free

这种方式安装的驱动版本和添加下面这个源安装的版本是一样的

# 这个源安装的版本为(18.4.1+ds1-1)
echo 'deb http://ftp.cn.debian.org/debian buster main non-free' >> /etc/apt/sources.list

安装完成后,用 vainfo 检查一下,还是有错误

【结论】:受限于内核 Debian(buster),驱动的版本只有 18.4.1+ds1-1

尝试三(成功)

linuxserver/jellyfin 一样,采用 Ubuntu 20.04 (focal) 做源

# 更新源
apt update

# 安装 gpg-agent、wget、curl
apt install -y gpg-agent wget curl

# 添加 intel key。如果不是显示 OK,就需要再次执行,直至显示 OK 为止
wget -qO - https://repositories.intel.com/graphics/intel-graphics.key | apt-key add -

# 添加 intel 源(ubuntu focal)
echo 'deb [arch=amd64] https://repositories.intel.com/graphics/ubuntu focal main' >> /etc/apt/sources.list

# 更新源
apt update

# 检查可用的驱动版本
apt-cache madison intel-media-va-driver-non-free

这个源的驱动版本很多,但并不能直接安装,还需要先安装依赖包

# 添加 debian bullseye 源作为依赖
# 这个源安装的版本为(21.1.1+ds1-1)
echo 'deb http://deb.debian.org/debian bullseye main non-free' >> /etc/apt/sources.list

# 更新源
apt update

# 安装 aptitude 软件包管理器
apt install -y aptitude 

# 安装依赖
aptitude install -y libz3-4 libigdgmm11 libigdfcl1

# 安装驱动
aptitude install -y intel-media-va-driver-non-free

安装完成后,用 vainfo 检查一下,还是有错误

接下来这步非常关键,就是删除 libigdgmm 的副本,来自:https://github.com/intel/libva/issues/534

# 非常关键的一步
ls -al /usr/local/lib

# 删除 libigdgmm
rm /usr/local/lib/libigdgmm.so.11
rm /usr/local/lib/libigdgmm.so.11.1.905

再用 vainfo 检查,终于正常了

下面👇的指令暂时没用上,留着下次折腾的时候用,免得还得临时去百度

# 检查可用的驱动版本
apt-cache madison intel-media-va-driver-non-free

# 安装驱动
apt install -y intel-media-va-driver-non-free

# 升级驱动
apt install --only-upgrade -y intel-media-va-driver-non-free

# 删除驱动
aptitude remove intel-media-va-driver-non-free

# 安装指定版本的驱动
aptitude install -y intel-media-va-driver-non-free=21.3.3+i620~u20.04

# 查询驱动文件
ls -al /usr/lib/x86_64-linux-gnu/dri/

升级 ffmpeg

需要说明的是,这里说的 ffmpeg 不是指的标准的 ffmpeg,而是 jellyfin-ffmpeg

查看下 jellyfin-ffmpeg 的版本

# 查看 ffmpeg 版本
/usr/lib/jellyfin-ffmpeg/ffmpeg

版本是 4.3.2,最新的 jellyfin-ffmpeg4.4.1

# 检查可用的版本
apt-cache madison jellyfin-ffmpeg

开始升级,两种方式都挺慢的,可以考虑在容器外下载好了再拷贝到容器中,因为在外面下可以用工具

# 方法一
aptitude install -y jellyfin-ffmpeg

# 方法二先下载再安装
curl -LO https://repo.jellyfin.org/releases/server/debian/stable/ffmpeg/jellyfin-ffmpeg_4.4.1-1-buster_amd64.deb

# 安装
dpkg -i jellyfin-ffmpeg_4.4.1-1-buster_amd64.deb

# 或者
apt install ./jellyfin-ffmpeg_4.4.1-1-buster_amd64.deb

升级完成后再次查看 ffmpeg 版本

设置

进入控制台 --> 播放 --> 硬件加速 ,选择 Intel Quick Sync,测试源还是同一个 4K 视频源

Docker 的资源占用一直维持着比较低的水平

但是转码的时间比较长,不像采用 VAAPI 几乎是即开即看,有转码文件

而且看着也有流,但是并不能播放

网页端的播放信息中没有视频信息

不确定是显卡不行还是驱动和 ffmpeg 不匹配导致的,暂时不想折腾了

建议

如果你是新安装,建议用 linuxserver/jellyfin 而不是 jellyfin/jellyfin,因为 jellyfin/jellyfin 装驱动太麻烦了

当然可能更好用的是 nyanmisaka/jellyfin,不过老苏暂时还没试过

参考文档

How to install Jellyfin on a Intel-based Synology docker with a working Intel Quick Sync (H/W transcoding) : jellyfin
地址:https://www.reddit.com/r/jellyfin/comments/r9k8mk/how_to_install_jellyfin_on_a_intelbased_synology/

QuickSync and OpenCL not working inside Docker : jellyfin
地址:https://www.reddit.com/r/jellyfin/comments/m1ezex/quicksync_and_opencl_not_working_inside_docker/

GPGPU: Ubuntu 18.04 (bionic)
地址:https://dgpu-docs.intel.com/installation-guides/ubuntu/ubuntu-bionic.html

intel/media-driver
地址:https://github.com/intel/media-driver

为 jellyfin 开启 VPP 和 openCL 色调映射_软件应用_什么值得买
地址:https://post.smzdm.com/p/ar65vrp7/

Jellyfin 10.7+ 开启VPP色彩映射,核显映射速度也能上天!_服务软件_什么值得买
地址:https://post.smzdm.com/p/axlg0np3/

jellyfin新选择,Nyanmisaka出品,即装即硬解!_NAS存储_什么值得买
地址:https://post.smzdm.com/p/a859320l/

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐