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等外部播放器
- 先说VLC,播放效果一流,而且现在的界面做的还是不错的,还有收藏文件夹等功能。但是搭建Jellyfin,Emby或者Plex流媒体服务的,不就是为了那漂亮的海报界面吗?搜刮了那么多的媒体信息就无用武之地了,果断放弃! 但考虑作为第三备用,实在没办法的情况下还是可以的,而且VLC也支持字幕。
- Kodi在安装了Jellyfin的插件后,可以把Jellyfin的视频库(电影,电视剧和音乐等)完整的显示到Kodi的界面,而且Kodi的播放效果一流,Jellyfin应该学习借鉴一下才行。但是就是这同步,经常要花费不少时间,尤其当你更新视频库比较频繁的时候,就会发现经常要更新,当然也可能因为我大部分还是使用Jellyfin自己的界面的缘故,如果一直使用Kodi应该没那么明显。
Kodi已作为备用,凡是Jellyfin不能播放的,就用Kodi播放,而且从没让人失望过。
除了界面没有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开启显卡硬解码能力
这是最耗时间的,也是最有科技感的方式。
第一步 先去Jellyfin官方的文档看一下关于硬件加速的内容,写的非常详实
显卡部分有提到NVIDIA GPU,Intel GPU和AMD GPU在Windows, Linux甚至虚拟化平台的显卡加速使用方法。
- H.264 / AVC 10-bit的解码目前所有显卡都不支持,不用考虑了
- 核显硬解的话最好使用双通道内存,可以加快速度
- 缓存或者说Jellyfin最好转到SSD硬盘,m.2速度毕竟快不少
第二步 查看nVidia官网的解码与编码矩阵图,选择合适的显卡
Nvidia官方有一个完整的显卡芯片的解码和编码矩阵图,可以清晰的查询各类型号新卡的支持能力。选择一个对的显卡,那么你的视频硬解码也就成功了一半。
developer.nvidia.com/video-encod...
消费级的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的几个建议:
- nVidia消费级显卡选择GeForce GTX 1660以上为佳,GT1030 and MX450避开不要选择。
- Intel核显是Jellyfin优先推荐的,最好是10代以上的CPU核显,也就是核显630以上。
- AMD显卡解码能力限制少,比较强,除了RX 6400/6500系列没有编码能力的要避开。
第三步 开整,安装nVidia显卡的Linux驱动
平台:Esxi 8;操作系统:Ubuntu22.04.4 64位,显卡:华硕GT1030-SL-2G-BRK直通
- 查看当前虚拟机已安装的显卡
显卡要先直通,虚拟机添加直通的PCI设备后,重启即可查看到NVIDIA Corporation GP108 [GeForce GT 1030]已被添加
ini
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)
- 安装显卡驱动
Jellyfin 10.8 所需的最低 NVIDIA 驱动程序版本为 470.57.02。
具体可常看Ubuntu官方的nVidia驱动安装介绍:ubuntu.com/server/docs...
查看当前可安装的Linux版本驱动版本
css
sudo ubuntu-drivers list --gpgpu
然后选择你需要的版本号进行安装,我这里选的是545版本
bash
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内核的后显卡驱动失效的命令可以使用
dart
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
查看已安装的驱动版本,验证一下是否成功安装。
bash
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都踩过坑了,这里提供给大家参考,可以避坑。
错误1
vbnet
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.
没法和nVidia驱动沟通,其实这里需要安装CUDA编译驱动,可以用nvcc -V查验一下
vbnet
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的官方文档:developer.nvidia.com/cuda-downlo...
首先下载CUDA Toolkit for Linux Ubuntu 22.04 x86_64, 我这里采用runfile的方式:
arduino
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
然后是稍微有些长的等待,而且没有错误就没有显示。静静的等待一下。。。
错误2
c
terminate called after throwing an instance of 'boost::filesystem::filesystem_error'
what(): boost::filesystem::copy_file: No such file or directory: "./builds/cuda_cccl/targets/x86_64-linux/include/nv/target", "/usr/local/cuda-12.4/targets/x86_64-linux/include/nv/target"
Aborted (core dumped)
这是因为磁盘空间不够引起的,CUDA ToolKit需要将近10G的磁盘空间,所以空间要留足。技术奇客ITGeeker.net之前给Ubuntu的空间太小,只好进行虚拟机硬盘空间的扩展,又是一番折腾。可以参看技术奇客ITGeeker.net的博客: www.itgeeker.net/esxi-8-vm-m...
扩容后,再运行run,空间足够了就不会出现这个问题。
错误3
lua
error /var/log/cuda-installer.log
# 查看错误代码最后几行
cat /var/log/cuda-installer.log
cannot find manpages to install
运行man man命令的时候会提醒你
csharp
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就对了。
错误4
kotlin
error Existing package manager installation of the driver found. It is strongly │ recommended that you remove this before continuing.
因为你采用了不同的包来安装驱动,建议你移除后再重新安装CUDA,这里可以不用移除,直接使用命令覆盖
css
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. *但都无法解决的话,或者碰到其他安装问题无法解决,那么考虑移除所有驱动及工具,从头再来吧
arduino
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的截图。