跳到内容

硬件加速

Jellyfin支持使用FFMpeg进行视频编码/解码的硬件加速(HWA)。 FFMpeg和Jellyfin可通过视频加速API支持多种硬件加速实现,例如Intel Quicksync(QSV),AMD AMF,nVidia NVENC / NVDEC,OpenMax OMX和MediaCodec。

VAAPI是一种视频加速API,使用libva与本地控制器进行交互以提供HWA。 QSV使用VAAPI的修改(分支)版本,并将其与libmfx及其专有驱动程序(与QSV兼容的处理器的列表)连接。

硬件加速硬件加速

操作系统推荐的硬件加速LinuxQSV,NVENC,VAAPI WindowsQSV,NVENC,AMF,VAAPIMacOSNone(VideoToolbox即将推出)AndroidMediaCodec,OMXRPiOMX

使用HWA比较显示卡

NVIDIA使用官方ffmpeg列表。并非所有卡都经过测试。建议将这些驱动程序用于Linux和Windows。这是支持的编解码器的NVIDIA显卡的官方列表。 Ubuntu与NVENC一起使用的示例。 H264 10位不支持NVIDIA加速。

VAAPI支持的编解码器列表。

AMF Linux支持尚未正式发布,AMD GFX卡必须在Linux上使用VAAPI。

Zen只是CPU。任何形式的视频解码/编码都没有硬件加速。您将需要APU或dGPU来进行硬件加速。

Linux上的英特尔QSV基准测试。

在Windows上,可以使用DXVA2 / D3D11VA库进行解码,而使用libmfx库进行编码。

CentOS可能需要用于QSV的其他驱动程序。

这是其他信息,以了解更多信息。

启用硬件加速

硬件加速选项可在“管理仪表板”部分中找到 转码 。从下拉菜单中选择有效的硬件加速选项,指示设备(如果适用),然后选中“启用硬件加密”以启用加密以及解码(如果硬件支持)。

硬件加速可立即用于媒体播放。无需重新启动服务器。

设定

每种类型的硬件加速,以及每种类型的Jellyfin安装,都需要不同的配置选项才能使用。关于您选择的加速度类型,最好始终查阅FFMpeg文档以获取最新信息。

Docker中的加速

为了在Docker中使用硬件加速,必须将设备移至容器。要查看可用的视频设备,可以在计算机上运行sudo lshw -c video或vainfo。

注意事项

Docker-Compose当前不支持NVIDIA GPU。

您可以使用Docker Run通过如下命令启动服务器。

docker run -d --volume / path / to / config:/ config --volume / path / to / cache:/ cache --volume / path / to / media:/ media〜-user 1000:1000 --net = host --restart =除非停止--dev / dev / dri / renderD128:/ dev / dri / renderD128 --dev / dev / dri / card0:/ dev / dri / card0〜jellyfin / jellyfin

或者,您可以将docker-compose与配置文件一起使用,这样就不必在每次重新启动服务器时都运行长命令。

版本:“ 3”服务:jellyfin:图像:jellyfin / jellyfin用户:1000:1000 network_mode:“主机”卷:-/路径/到/配置:/ config-/路径/到/缓存:/缓存-/路径/到/媒体:/媒体设备:# VAAPI设备-/ dev / dri / renderD128:/ dev / dri / renderD128-/ dev / dri / card0:/ dev / dri / card0 # RPi 4-/ dev / vchiq:/ dev / qchiq

Debian Docker英伟达

要使用docker实现硬件加速,需要执行几个步骤。

先决条件:

https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)

具有内核版本的GNU / Linux x86_64; 3.10Docker; = 1.12具有架构的NVIDIA GPU; Fermi(2.1)NVIDIA驱动程序〜= 361.93(在先前版本中未测试)

使用此命令确认您的GPU出现。

lspci | grep VGA

更新主机,这样就不会有过时的软件引起问题的机会。

apt-get更新&& apt-dist升级-y

安装curl,以用于下载必要的文件。

apt-get install curl

在/etc/apt/sources.list中编辑sources.list,并根据需要向每个源添加非自由贡献。

deb http://ftp.ch.debian.org/debian/ Stretch main

例如,必须修改上面的行以匹配下面的行。

deb http://ftp.ch.debian.org/debian/ Stretch main non-free contrib

下载并添加Nvidia底座容器字体。

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key adddistribution = $(./etc/os-release; echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

再次更新软件包列表,以下载新存储库中可用的最新软件。

apt-get更新

安装linux-headers并运行以下命令。

apt-get install linux-headers-$(uname -r | sed $0027s / [^-] *-[^-] *-// $0027)

或者,如果您正在争取兼容性,请运行此命令。

apt-get install -t Stretch-backports linux-headers-$(uname -r | sed $0027s / [^-] *-[^-] *-// $0027)

从存储库安装Nvidia docker2。

apt-get install nvidia-docker2

当提示您选择维护或安装维护包时,键入y以安装维护版本。

安装后,您可能希望将nvidia添加为默认运行时:通过编辑/etc/docker/daemon.json,如下所示:

<"Default Runtime": "nvidia", "runtimes": { "nvidia": { "camino": "nvidia-contenedor-tiempo de ejecución", "runtimeArgs": [] } }}

重新启动当前正在工作的装卸工人的服务。

sudo pkill -SIGHUP泊坞窗

安装nvidia驱动程序和依赖项。

apt-get install -t Stretch-backports nvidia驱动程序libnvcuvid1 libnvidia-encode1 libcuda1 nvidia-smi

请重新启动主机以应用所有更改。

立即重启

验证是否已使用此测试驱动器正确配置了驱动器和耦合器。

nvidia-smidocker运行--gpus 0 nvidia / cuda:9.0-base nvidia-smi

验证对主机和装卸工人必要资源的访问。

ldconfig -p | grep cuvidldconfig -p | grep libnvidia-encode.so.1

通过添加这些环境参数来启动容器。

-e“ NVIDIA_DRIVER_CAPABILITIES =全部” -e NVIDIA_VISIBLE_DEVICES =全部--runtime = nvidia --gpus全部 

完整的执行命令如下所示。

docker run -d --name = jellyfin -e NVIDIA_DRIVER_CAPABILITIES = all -e NVIDIA_VISIBLE_DEVICES = all --gpus all --runtime = nvidia -p 8096:8096 -p 8920:8920 -v / config:/ config -v / media: / media -v / cache:/ cache --restore除非停止〜jellyfin / jellyfin

使用next选项运行时,有一些特殊步骤。

-用户1000:1000

您可能必须将此用户添加到视频组。

usermod -aG视频用户

容器启动后,您可以重新验证对主机资源的访问。

泊坞窗exec -it jellyfin ldconfig -p | grep cuviddocker exec -it jellyfin ldconfig -p | grep libnvidia-encode.so.1

现在转到“ Jellyfin播放设置”,启用Nvidia NVENC并根据您的GPU支持播放需要转码的任何文件的方式选择目标编解码器。更改比特率是测试这一点的好方法。

查看转码日志,以确保一切正常。

流#0:0 -----; #0:0(h264(h264_cuvid)-------; h264(h264_nvenc))流#0:2 -------; #0:1(ac3(本地)-------; aac(本地))<-pre>

通过.deb软件包在Debian / Ubuntu上设置VAAPI加速

Debian / Ubuntu中的VAAPI配置需要一些其他配置,以确保权限正确。

要检查系统上的VAAPI信息,请从命令行安装并运行vainfo。

  1. 按照相关文档为您的系统配置VAAPI。验证/ dev / dri中是否存在渲染设备,并记下可写入该渲染设备的权限和组,在这种情况下,渲染为:$ ls -l / dev / dritotal 0drwxr-xr-x 2根100 Apr 13 16:37 by-pathcrw-rw ---- 1个根视频226,0 Apr 13 16:37 card0crw-rw ---- 1个根视频226,1 Apr 13 16:37 card1crw-rw ---- 1个根渲染226,128 Apr 13 16:37 renderD128注意在某些版本中,该组可能是视频而不是渲染。
  2. 将Jellyfin服务用户添加到先前的组中,以允许Jellyfin FFMpeg进程访问该设备,然后重新启动Jellyfin。
sudo usermod -aG渲染jellyfinsudo systemctl重新启动jellyfin
  1. 在管理面板的“转码”页面上设置VAAPI加速。在上方输入device / dev / dri / renderD128作为VA API的设备值。
  2. 观看电影,并通过查看ffmpeg-transcode-*。/ var / log / jellyfin下的Txt日志并使用radeontop或类似工具来验证是否正在进行转码。

LXC或LXD容器

这已在LXC 3.0中进行了测试,并且可能会或可能不会与早期版本一起使用。

请按照上述步骤将jellyfin用户添加到视频或渲染组中,具体取决于他们的情况。

  1. 将您的GPU添加到容器中。
$ lxc配置设备添加 gpu gpu gid = 
  1. 确保卡已在容器中:
$ lxc exec jellyfin-ls -l / dev / dritotal 0crw-rw ---- 1根视频226,6月4 02:13 card0crw-rw ---- 1根视频226,6月4 02:13 controlD64crw -rw ---- 1个根视频226,128 Jun 4 02:13 renderD128
  1. 如果默认选项错误,则将Jellyfin设置为使用视频加速并将其指向正确的设备。
  2. 尝试播放需要转码的视频并运行以下内容,您应该会大受欢迎。
$ ps aux | grep ffmpeg | grep accel
  1. 您也可以尝试播放需要转码的视频,如果播放效果不错。

有用的资源:

Raspberry Pi 3和4

  1. 将Jellyfin服务用户添加到视频组中,以允许Jellyfin的FFMpeg进程访问编码器,然后重新启动Jellyfin。用于内核和固件更新。
  2. 在服务器仪表板的“转码”选项卡中,选择OpenMAX OMX作为硬件加速。
  3. 更改分配给GPU的内存量。 GPU无法同时处理加速的解码和编码。sudo nano /boot/config.txt对于RPi4,添加行gpu_mem = 320推荐用于4K HEVC。检查CPU和GPU内存之间的划分:vcgencmd get_mem arm && vcgencmd get_mem gpu监视CPU时钟温度和速度:vcgencmd measure_temp && vcgencmd measure_clock arm
注意事项

RPi4当前不支持HWA解码,仅支持H.264 HWA编码。需要主动冷却,被动冷却不足以进行转码。在RPi3测试中,由于视频正在调整大小,因此转码不能足够快地实时工作。

验证转码

要验证您正在使用适当的库,请对您的转码记录运行此命令。可以在“管理仪表板”>“日志”中找到,如果通过存储库,则可以在/ var / log / jellyfin中找到。

grep -A2“流映射:/var/log/jellyfin/ffmpeg-transcode-85a68972-7129-474c-9c5d-2d9949021b44.txt

这产生了以下结果。

电流映射:#0电流:0 ----; #0:0(hevc(本机)----; h264(h264_omx))当前#0:1 ----; #0:1(AAC(本机)----; mp3(libmp3lame))

#0:0流使用软件对HEVC进行解码,并使用HWA进行编码。

#0:1流具有相同的结果。解码比编码容易,因此通常是好的结果。 HWA解码正在进行中。

zh_CN简体中文
es_ESEspañol hi_INहिन्दी arالعربية pt_BRPortuguês do Brasil bn_BDবাংলা ru_RUРусский ja日本語 de_DEDeutsch fr_FRFrançais it_ITItaliano zh_CN简体中文