前言
在已经实现了群晖 nas 搭建 jellyfin 中心并实现 nginx+frp 穿透之后,使得在外访问家庭影音库成为可能,但随之遇到另外一个问题,就是网页端的 jellyfin 是通过 html 转码进行播放的,在遇到类如 mov 的一些片源的时候,播放器起来就有些力不从心。
正文
为了解决这个问题,我们查阅了群晖的维护文档,我们计划在 ubuntu 中配置 jellyfin 的客户端,有一个原生的 Jellyfin Media Player 是比较好用的, 项目地址参见GitHub: Jellyfin Media Player,我们先安装 mpv,然后安装 jellyfin 的客户端。
sudo apt install mpv
wget <https://github.com/jellyfin/jellyfin-media-player/releases/latest/download/jellyfin-media-player_amd64.deb>
sudo dpkg -i jellyfin-media-player_amd64.deb
如果出现了依赖问题,sudo apt --fix-broken install
或者sudo apt-get install -f
,使用这个代码修复一下即可。
JMP 各个发行版本 .deb
包说明
文件名中的代号 | 适用系统版本(推荐) |
---|---|
bookworm |
Debian 12 |
jammy |
Ubuntu 22.04 LTS ✅ 推荐 |
noble |
Ubuntu 24.04 LTS ✅ 推荐 |
oracular |
Ubuntu 24.10(未正式发布) |
trixie |
Debian 13(测试中) |
Nvidia 显卡驱动官方教程
Linux Setups A 64-bit Linux distribution is required. In Jellyfin 10.10 the minimum required NVIDIA driver version is 520.56.06.
Configure On Linux Host Debian And Ubuntu Linux The jellyfin-ffmpeg* deb package required by Jellyfin doesn’t include any NVIDIA proprietary driver.
You have to install the NVIDIA driver from the distro and configure the permission of the jellyfin user.
NOTE Root permission is required.
Assuming you have added the jellyfin repository to your apt source list and installed the jellyfin-server and jellyfin-web.
Install the jellyfin-ffmpeg7 package. Remove the deprecated jellyfin meta package if it breaks the dependencies:
sudo apt update && sudo apt install -y jellyfin-ffmpeg7 Install the NVIDIA proprietary driver by following these links. Then install two extra packages for NVENC and NVDEC support:
On Debian: https://wiki.debian.org/NvidiaGraphicsDrivers
sudo apt update && sudo apt install -y libnvcuvid1 libnvidia-encode1 On Ubuntu: https://ubuntu.com/server/docs/nvidia-drivers-installation
NOTE You may need to add the driver version as the suffix of the package name.
sudo apt update && sudo apt install -y libnvidia-decode libnvidia-encode Check the NVIDIA GPU status by using nvidia-smi:
$ nvidia-smi
+—————————————————————————–+ | NVIDIA-SMI 520.56.06 Driver Version: 520.56.06 CUDA Version: 11.8 | |——————————-+———————-+———————-+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 NVIDIA GeForce … Off | 00000000:1C:00.0 Off | N/A | | 0% 44C P0 N/A / 75W | 0MiB / 1998MiB | 0% Default | | | | N/A | +——————————-+———————-+———————-+ … Enable NVENC in Jellyfin and uncheck the unsupported codecs.
简化版理解
✅ 第 1 步:安装 NVIDIA 官方驱动
运行以下命令,安装推荐的 NVIDIA 驱动:
sudo ubuntu-drivers autoinstall
然后重启:
sudo reboot
重启后验证:
nvidia-smi
你应该看到类似:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 520.56.06 Driver Version: 520.56.06 CUDA Version: 11.8 |
+-----------------------------------------------------------------------------+
✅ 第 2 步:安装 Jellyfin 的 FFmpeg 版本
Jellyfin 使用的是自定义的 ffmpeg
,你需要安装它:
sudo apt update
sudo apt install -y jellyfin-ffmpeg7
如果你之前装过 jellyfin
这个旧的 meta 包,可能会冲突,可以先卸掉:
sudo apt remove jellyfin
✅ 第 3 步:安装 NVIDIA 编解码库(用于 NVENC/NVDEC)
sudo apt install -y libnvidia-decode libnvidia-encode
如果提示缺少版本后缀,可以加上驱动版本号,比如:
sudo apt install -y libnvidia-decode-520 libnvidia-encode-520
✅ 第 4 步:确保 jellyfin
用户有权限访问显卡
sudo usermod -aG video jellyfin
然后重启 Jellyfin 服务,并在控制台中启用硬件加速。
sudo systemctl restart jellyfin
HDMI 驱动设置
在安装完 nvidia 驱动之后,hdmi 外接显示器未能正常工作。
原因如下:HDMI 是连接在 独立显卡(NVIDIA) 上的,而你当前使用的是 Wayland + 混合显卡模式,导致 HDMI 输出无法被识别或驱动。
✅ 步骤 1:切换到 NVIDIA 显卡模式(Prime 模式)
运行以下命令:
sudo prime-select nvidia
然后重启:
sudo reboot
这个操作会启用 独显模式,让 HDMI 输出口由 NVIDIA 显卡控制。
✅ 步骤 2:切换到 X11(而不是 Wayland)
Wayland 对 NVIDIA 的支持仍不完善,尤其是多显示器和 HDMI 输出。
🔄 方法一:在登录界面切换
- 退出当前用户或重启系统
- 在登录界面点击用户名后 不要马上输入密码
- 点击右下角的设置齿轮图标
- 选择
GNOME on Xorg
或Ubuntu on Xorg
- 然后再输入密码登录
🔧 如果你看到花屏(你提到 “huaping”)怎么办?
🔍 可能原因:
- 显示器刷新率设置不匹配
- HDMI 线材质量差或接口接触不良
- NVIDIA 驱动 Bug(尤其是高分辨率 + 高刷新率组合)
✅ 解决方法:
方法一:调整 HDMI 显示器刷新率
你现在 HDMI 显示器是 2560x1440 @ 59.94Hz
,你可以尝试切换到 75Hz
:
xrandr --output HDMI-0 --mode 2560x1440 --rate 75
如果花屏消失,那就是刷新率兼容性问题。
✅ 什么是 Jellyfin 的硬件加速?
Jellyfin 支持使用 GPU(如 NVIDIA)来加速视频解码(H.264、HEVC 等),从而减轻 CPU 负担,提升播放流畅度,尤其是高码率 4K 视频。
🧪 验证硬件加速是否在 Jellyfin 客户端中生效
🔍 方法一:查看 Jellyfin 播放详情(最简单)
- 打开 Jellyfin 客户端或 Web 客户端(浏览器访问 Jellyfin)
- 播放任意一个视频
- 点击右下角的 “播放信息” 图标(通常是一个小 i 或设置图标)
- 查看 转码信息
如果硬件加速生效,你会看到类似:
Transcoding: H264 → H264 (Nvidia NVENC)
Decoding: H264 (Nvidia CUVID)
如果没有硬件加速,通常是:
Transcoding: H264 → H264 (Software)
🔍 方法二:查看 Jellyfin 服务器日志
如果你有权限访问 Jellyfin 服务端(本地或远程),可以查看日志:
journalctl -u jellyfin -f
或查看日志文件:
cat /var/lib/jellyfin/logs/jellyfin.log | grep -i "nvenc\\|vaapi\\|cuda"
如果看到这些关键词(如 NVENC
, CUVID
, FFmpeg: Using hardware decoding via cuda
),说明硬件加速生效了。
🔍 方法三:使用 nvidia-smi
实时监控 GPU 使用情况
- 打开一个终端,输入:
watch -n 1 nvidia-smi
- 然后在 Jellyfin 中播放一个需要转码的视频(如 4K HEVC)
如果硬件加速生效,你会看到:
nvidia-smi
中有一个进程(如ffmpeg
或jellyfin-ffmpeg
)- GPU 使用率上升(
Volatile GPU-Util
不为 0)
🧪 额外测试:使用 ffmpeg
手动测试硬件加速
ffmpeg -hwaccels
应该输出:
Hardware acceleration methods:
cuda
nvenc
nvdec
🎯 目标:选择最佳播放格式以充分利用硬件加速
✅ 首先,理解三种播放方式
在 Jellyfin 中,视频播放主要有 三种方式:
播放方式 | 是否转码 | 是否用到硬件加速 | 说明 |
---|---|---|---|
Direct Play | ❌ 不转码 | ❌ 不用加速 | 客户端直接播放原始文件,最省资源 |
Direct Stream | ✅ 轻度转码(封装格式) | ❌ 通常不用 | 只改变封装格式,不转码视频流 |
Transcode | ✅ 转码 | ✅ 可用硬件加速 | 改变编码格式、分辨率、码率等,最消耗资源 |
📌 最推荐的播放方式:Direct Play
- 优点:零转码,零延迟,画质无损,CPU/GPU 几乎不占用
- 要求:客户端必须支持原始视频的编码格式、分辨率、封装格式(如 MP4、MKV)
✅ Direct Play 支持的格式(推荐)
编码格式 | 封装容器 | 是否支持硬件解码(NVIDIA) |
---|---|---|
H.264 (AVC) | MP4 / MKV | ✅ |
H.265 (HEVC) | MP4 / MKV | ✅(需较新显卡,如 GTX 10 系列以上) |
VP9 | WebM / MKV | ❌(NVIDIA 不支持硬解) |
AV1 | MKV / MP4 | ✅(需 RTX 30 系列以上) |
✅ 如果必须转码,推荐使用:
转码编码格式:
编码器 | 支持硬件加速 | 推荐理由 |
---|---|---|
H.264 (NVENC) | ✅ | 兼容性最好,几乎所有设备都支持 |
H.265 (HEVC NVENC) | ✅ | 更高压缩率,但客户端兼容性略差 |
AV1 (CPU 转码) | ❌(NVIDIA 目前转码支持有限) | 画质好但转码效率低,不推荐目前使用 |
🔧 Jellyfin 设置建议(管理员后台)
进入:设置 → 播放 → 硬件加速
推荐设置:
- ✅ 启用硬件加速:✔️
- 解码器:选择
NVIDIA NVDEC
- 编码器:选择
NVIDIA NVENC
- ✔️ 启用 H.264、HEVC 加速
- ✔️ 允许转码时使用硬件加速
- ✔️ 启用 10-bit HEVC(如果你播放 HDR 内容)
🚀 进阶建议:如何让更多视频走 Direct Play?
- 使用兼容格式编码视频文件:
- 视频编码:H.264 或 H.265
- 音频编码:AAC 或 AC3(避免 DTS)
- 封装格式:MP4 优于 MKV(尤其在 Web 客户端)
- 避免字幕触发转码:
- 使用外挂字幕(如
.srt
),避免内嵌硬字幕(图像字幕) - 某些字幕格式(如 PGS)会强制转码
- 使用外挂字幕(如
- 客户端使用 Jellyfin 原生 App 或 Kodi 插件
- 浏览器播放时支持有限,容易触发转码
💡 总结:最佳播放格式建议
视频类型 | 最佳编码 | 容器 | 是否硬解 | 说明 |
---|---|---|---|---|
普通高清 (1080p) | H.264 | MP4 | ✅ | 兼容性最强 |
4K HDR | H.265 (10-bit) | MKV | ✅(需新显卡) | 高压缩率,高画质 |
Web 视频 | VP9 | WebM | ❌ | 不推荐转码 |
AV1 | AV1 | MKV | ✅(仅 RTX 30/40) | 未来趋势,但兼容性差 |
🧪 想测试某个视频是否会转码?
你可以上传该视频到 Jellyfin,然后播放它并检查:
- 播放详情是否显示 Direct Play
nvidia-smi
是否有 GPU 活动- 日志中是否调用了
ffmpeg