站点图标 ITGeeker技术奇客

Esxi 8 虚拟机Ubuntu apt安装Jellyfin如何开启Nvidia硬解码 非Docker方式的安装过程

随着网上下载下来的视频质量和体积的增加,视频的码率和编码也越发激进。HEVC编码的视频越来越多,AV1的也多了起来。视频播放卡顿的额原因应该有很多,如果你只对Jellyfin的硬解码感兴趣,那就直接跳到 Jellyfin开启显卡硬解码能力的部分,不过这里主要讨论nVidia显卡的硬解码方式。Intel和AMD GPU暂未仔细研究,但应该类似。

Jellyfin的安装环境

技术奇客ITGeeker.net之前使用Esxi 8虚拟了一个Minimal Ubuntu 22.04版本,给了4核CPU, 16G内存。

然后apt直接安装了Jellyfin, NFS挂载视频盘之后就用上了,一切正常。

CPU用的XEON 2699A V4, 22核44线程,虽然不带核显,但播放视频都没问题,CPU占有率也从来不是问题。

使用Ubuntu minimum是为了节省资源,毕竟只要播放视频而已。后来发现VMware自家为Esxi还专门推出过一个精简的Photon系统,官方有OVA版本,安装那是一个简便,而且更节省空间。不过Photon是兼容CentOS Yum的,我比较熟悉apt就没有采用了。

缘起卡顿

最近发现通过网络下载的视频,在播放的时候老是有卡顿现象。查看后发现视频都比较大,动不动就10-20G一部影片,编码是HEVC的4K, 至少8bit的。虽然还不是AV1这类的,但对于没有显卡的虚拟机还是显得有点吃力了。

处理方式一 – 选用Jellyfin的LibVLC播放

更换Jellyfin的首选播放器为LibVLC, 其实这基本还是解决了卡顿的问题,但是从视频质量来看的确降低了不少,从实际效益来讲,我们下载了高质量的4K视频,购买了高清晰的4K电视机,结果降级使用,没道理啊,果断放弃!

处理方式二 – 采用Kodi或者VLC等外部播放器

  1. 先说VLC,播放效果一流,而且现在的界面做的还是不错的,还有收藏文件夹等功能。但是搭建Jellyfin,Emby或者Plex流媒体服务的,不就是为了那漂亮的海报界面吗?搜刮了那么多的媒体信息就无用武之地了,果断放弃!但考虑作为第三备用,实在没办法的情况下还是可以的,而且VLC也支持字幕。
  2. Kodi在安装了Jellyfin的插件后,可以把Jellyfin的视频库(电影,电视剧和音乐等)完整的显示到Kodi的界面,而且Kodi的播放效果一流,Jellyfin应该学习借鉴一下才行。但是就是这同步,经常要花费不少时间,尤其当你更新视频库比较频繁的时候,就会发现经常要更新,当然也可能因为我大部分还是使用Jellyfin自己的界面的缘故,如果一直使用Kodi应该没那么明显。

Kodi已作为备用,凡是Jellyfin不能播放的,就用Kodi播放,而且从没让人失望过。

by 技术奇客ITGeeker.net

除了界面没有Jellyfin原生的那么简洁,还有安装Kodi Connect 插件稍显复杂,体验还不错,毕竟Kodi的插件库更丰富,功能更完善。相信这也是为什么Jellyfin和Emby都坚持开发Kodi的插件的原因吧。

处理方式三 – 更换电视机

华为v65智慧屏THAL-560和HEGE-560,同为4K电视机,当然前者有HDR和120Hz的刷新率,画面更亮更鲜艳。相同芯片HongHu818,相同内存,HEGE-560可以顺畅播放所有视频,而THAL-560会卡在高清的片子上,不知道是不是其他板块上的芯片有区别。

还有HEGE-560是HarmonyOS 2,而THAL-560已经升级到HarmonyOS 4.0.0.115了。

当然换电视是开玩笑,但如果正好要更换电视机,可以多了解一下电视机本身的解码能力。

处理方式三 – Jellyfin开启显卡硬解码能力

这是最耗时间的,也是最有科技感的方式。

by 技术奇客ITGeeker.net

第一步 先去Jellyfin官方的文档看一下关于硬件加速的内容,写的非常详实

https://jellyfin.org/docs/general/administration/hardware-acceleration/

显卡部分有提到NVIDIA GPU,Intel GPU和AMD GPU在Windows, Linux甚至虚拟化平台的显卡加速使用方法。

第二步 查看nVidia官网的解码与编码矩阵图,选择合适的显卡

Nvidia官方有一个完整的显卡芯片的解码和编码矩阵图,可以清晰的查询各类型号新卡的支持能力。选择一个对的显卡,那么你的视频硬解码也就成功了一半。

https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new

消费级的GeForce GTX 1660以上查i能支持所有编码包括AV1, 专业级的也要NVIDIA T400起。手里的是一张华硕的GT1030-SL-2G-BRK的无风扇显卡,399元入手全新的。闲鱼200左右可以入手。好处是无噪音,不好的消息是:正好是Jellyfin官方不推荐的低能显卡。不过解码Decode还可以,不支持的有

    – vp8

    – H.265 (HEVC) 4:4:4

    – AV1

其它都支持,但编码Encode能力就非常差了,几乎都不支持。以下安装都以这个GT 1030显卡为例

Most NVIDIA GPUs come with NVENC/NVDEC support but some low-end and mobile models (e.g. GT1030 and MX450) are exceptions.

by Jellyfin
硬解码显卡选择 技术奇客ITGeeker.net的几个建议:
  1. nVidia消费级显卡选择GeForce GTX 1660以上为佳,GT1030 and MX450避开不要选择。
  2. Intel核显是Jellyfin优先推荐的,最好是10代以上的CPU核显,也就是核显630以上。
  3. AMD显卡解码能力限制少,比较强,除了RX 6400/6500系列没有编码能力的要避开。

第三步 开整,安装nVidia显卡的Linux驱动

平台:Esxi 8;操作系统:Ubuntu22.04.4 64位,显卡:华硕GT1030-SL-2G-BRK直通

  1. 查看当前虚拟机已安装的显卡

显卡要先直通,虚拟机添加直通的PCI设备后,重启即可查看到NVIDIA Corporation GP108 [GeForce GT 1030]已被添加

lspci -nn | grep -Ei "3d|display|vga"

00:0f.0 VGA compatible controller [0300]: VMware SVGA II Adapter [15ad:0405]
03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP108 [GeForce GT 1030] [10de:1d01] (rev a1)

2. 安装显卡驱动

Jellyfin 10.8 所需的最低 NVIDIA 驱动程序版本为 470.57.02。

具体可常看Ubuntu官方的nVidia驱动安装介绍:https://ubuntu.com/server/docs/nvidia-drivers-installation

查看当前可安装的Linux版本驱动版本

sudo ubuntu-drivers list --gpgpu

然后选择你需要的版本号进行安装,我这里选的是545版本

sudo apt install -y libnvidia-decode-545 libnvidia-encode-545

# 其他安装Linux nVidia显卡驱动的方法
sudo apt-get install dkms
sudo dkms install -m nvidia -v 545.29.06
# 或者
sudo add-apt-repository ppa:graphics-drivers/ppa --yes
sudo apt install nvidia-driver-545

这里还有可以防止更新Linux内核的后显卡驱动失效的命令可以使用

dpkg-query -W --showformat='${Package} ${Status}\n' | grep -v deinstall | awk '{ print $1 }' | \
    grep -E 'nvidia.*-[0-9]+$' | \
    xargs -r -L 1 sudo apt-mark hold

查看已安装的驱动版本,验证一下是否成功安装。

cat /proc/driver/nvidia/version

NVRM version: NVIDIA UNIX x86_64 Kernel Module  545.29.06  Thu Nov 16 01:59:08 UTC 2023
GCC version:  gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) 

# 或者使用
ls /usr/src | grep nvidia
nvidia-545.29.06

然后nvidia-smi-检查当前驱动的状态

最后一步在 Jellyfin 中启用 NVENC 并取消选中不支持的编解码器。大功告成!!!

就这么简单吗?就这么简单。但是你可能会碰到的几个问题,技术奇客ITGeeker.net都踩过坑了,这里提供给大家参考,可以避坑。

没法和nVidia驱动沟通,其实这里需要安装CUDA编译驱动,可以用nvcc -V查验一下

nvcc -V

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Thu_Nov_18_09:45:30_PST_2021
Cuda compilation tools, release 11.5, V11.5.119
Build cuda_11.5.r11.5/compiler.30672275_0

如果不能运行nvcc -V,可以先安装

apt install nvidia-cuda-toolkit

然后安装CUDA,这里有nVidia的官方文档:https://developer.nvidia.com/cuda-downloads

首先下载CUDA Toolkit for Linux Ubuntu 22.04 x86_64, 我这里采用runfile的方式:

wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
sudo sh cuda_12.4.0_550.54.14_linux.run

然后是稍微有些长的等待,而且没有错误就没有显示。静静的等待一下。。。

这是因为磁盘空间不够引起的,CUDA ToolKit需要将近10G的磁盘空间,所以空间要留足。技术奇客ITGeeker.net之前给Ubuntu的空间太小,只好进行虚拟机硬盘空间的扩展,又是一番折腾。可以参看技术奇客ITGeeker.net的博客: https://www.itgeeker.net/esxi-8-vm-machine-how-to-expand-disk-space-for-ubuntu-lvm

扩容后,再运行run,空间足够了就不会出现这个问题。

运行man man命令的时候会提醒你

This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, including manpages, you can run the 'unminimize'
command. You will still need to ensure the 'man-db' package is installed.

因为Ubuntu安装的时候采用了minimize最小化安装,所以有些命令缺失。解决方法也很简单

unminimize

这里等待的时间会久一点,如果以后要安装Jellyfin,不要选择minimize就对了。

因为你采用了不同的包来安装驱动,建议你移除后再重新安装CUDA,这里可以不用移除,直接使用命令覆盖

sudo sh cuda_12.4.0_550.54.14_linux.run --toolkit --silent --override

基本这个时候就不会有任何信息输出,Linux没有错误即成功。

卸载并全部重新安装

如果你碰到错误1里的error NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.但都无法解决的话,或者碰到其他安装问题无法解决,那么考虑移除所有驱动及工具,从头再来吧

sudo apt-get remove --purge '^nvidia-.*'
sudo apt-get remove --purge '^libnvidia-.*'
sudo apt-get remove --purge '^cuda-.*'

sudo apt-get install linux-headers-$(uname -r)

然后先装nVidia的驱动,再装CUDA ToolsKit就可以了。

最后,附上成功转码HEVC到H264的截图。

退出移动版