什么是 Jellyfin
Jellyfin 是一个完全免费、开源、无广告的媒体服务器软件,能让你轻松将家里的电影、剧集、动漫和音乐整理成私人 Netflix。它支持多设备(手机、平板、电视、网页),自动刮削元数据、生成海报墙,并能根据客户端能力智能转码或直通播放——无论你是在客厅用电视看 4K 原盘,还是在地铁上用手机看压缩流,Jellyfin 都能无缝适配。
接下来,我们就将 OrangePi 3B 打造成为一个私人媒体库。
安装 GPU 驱动
在安装 Jellyfin 之前,若你希望启用硬件加速转码功能,需先为你的设备安装相应的 GPU 驱动。不同硬件平台所需的驱动和配置方式差异较大,请根据你的具体设备型号查阅相关教程。
如果你的设备也是 OrangePi 3B,可以参考我的这篇文章:
OrangePi 3B 编译 5.10.160 内核 Panfrost GPU 驱动,并启用 VPU 硬件加速
如果你仅在局域网内进行直接播放(即不触发转码),或对转码性能无要求,也可以跳过硬件加速相关配置,Jellyfin 仍可正常工作。
Docker 安装 Jellyfin
首先,创建一个用于存放 Jellyfin 配置和数据的目录,例如 ~/docker/jellyfin。
mkdir -p ~/docker/jellyfin进入该目录,并创建 docker-compose.yml 文件。
cd ~/docker/jellyfin
vim docker-compose.yml根据实际需求编辑配置文件。
8096是 Jellyfin Web 界面的访问端口/mnt/hdd:/hdd表示将宿主机的/mnt/hdd目录挂载到容器内的/hdd路径- 特别注意:如果你的设备也是 OrangePi 3B,请务必保留
security_opt、devices和group_add这三项配置——它们赋予容器访问 GPU 硬件设备(如/dev/mpp_service、/dev/dri等)所需的权限。其他平台可根据实际情况调整或省略。
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
ports:
- '8096:8096/tcp' # Web 管理界面
- '7359:7359/udp' # 用于局域网自动发现服务
security_opt:
- systempaths=unconfined
- apparmor=unconfined
group_add:
- 44 # video 组 ID,确保容器内进程有权限访问视频设备
devices:
- '/dev/dri:/dev/dri'
- '/dev/dma_heap:/dev/dma_heap'
- '/dev/rga:/dev/rga'
- '/dev/mpp_service:/dev/mpp_service'
volumes:
- './config:/config' # 配置文件持久化
- './cache:/cache' # 缓存目录
- '/mnt/hdd:/hdd' # 媒体库挂载点
restart: unless-stopped保存文件后,启动服务。
docker compose up -dDocker 将自动拉取镜像并启动容器。完成后,在浏览器中访问 http://<你的设备IP>:8096,即可进入 Jellyfin 初始化界面。
如果docker-compose.yml中未配置7359/udp端口,Jellyfin 客户端可能无法通过“自动发现”找到服务器,此时需手动输入IP:8096地址进行连接。

初始化 Jellyfin
创建用户。
暂时先不添加媒体库。
元数据也可以不用设置,之后我们使用外部刮削器来刮削元数据。
允许远程访问。
完成 Jellyfin 初始化。
刮削元数据
当你把电影或整季动漫复制到了硬盘里,文件名也规规矩矩,但打开 Jellyfin 却只看到一串冷冰冰的文件名——没有海报、没有剧情简介、没有演员信息,更别提按类型或年份分类了。这是因为 Jellyfin 还不知道这些文件“是什么”。
元数据的作用正是赋予这些文件“身份”:一旦成功刮削,你的私人媒体库将焕然一新,呈现出媲美主流流媒体平台的专业界面——支持海报墙展示、智能分类、收藏夹、推荐系统等高级功能。
刮削剧集元数据(电影、电视剧、动漫等)
然而 Jellyfin 自带的元数据刮削器在国内常因网络限制导致刮削失败或信息不全。所以接下来我们使用第三方刮削工具 tinyMediaManager。
首先确认剧集文件名命名规范,标题完整。
打开 tinyMediaManager,选择刮削类型(电影 或 电视节目),然后添加媒体库。
点击更新媒体库。
右键选择搜索并刮削选定的电视节目。
刮削器会自动匹配相应的剧集信息,然后点击确定,开始刮削元数据(需要科学上网)。
刮削完成后,tMM 会在媒体目录中生成 .nfo 文件及海报、背景图等资源。
刮削书籍元数据
Jellyfin 不仅支持影音媒体,也具备电子书管理与阅读功能。为了让书籍在 Jellyfin 中显示封面、作者、简介等信息,我们需要为其补充相应的元数据信息。这里我们借助 Calibre,并配合豆瓣元数据插件,完成书籍的元数据刮削。
打开 calibre,点击添加书籍,手动导入电子书文件(目前还没有办法能做到一键导入整个目录的电子书)。
接下来下载 calibre 豆瓣元数据刮削插件(github),访问不了 github 的可从我这里下载。
打开首选项,点击插件。
点击从文件加载插件,选择刚才下载的豆瓣刮削器。
回到 calibre 主界面,选择一本电子书,点击编辑元数据。
点击下方的 下载元数据,插件会自动在豆瓣搜索匹配项,从结果中选择最准确的一条,点击确定即可。
这样就刮削完成了。
右键点击书籍,打开书籍所在文件夹。
刮削结果如图所示。奇怪的是文件名被重命名成拼音了,改一下就好。这里建议把每本电子书和其元数据文件放进单独的文件夹,便于 Jellyfin 识别,最好不要都放在同一个文件夹里。
添加 Jellyfin 媒体库
节目(电视剧、动漫等)
进入 Jellyfin 管理控制台,添加媒体库。文件夹选择 /hdd,这正是我们在 docker-compose.yml 中通过卷映射挂载的宿主机目录。
“节目”类型适用于电视剧、动画等多集内容。
书籍、音乐等其他媒体类型同样支持元数据刮削,具体配置可参考相关教程。
由于我们已使用 tinyMediaManager 提前完成了元数据刮削,请务必取消勾选所有在线刮削器,避免覆盖已有的元数据。
记得勾选 Nfo,然后保存。稍等片刻,Jellyfin 将自动扫描并导入媒体内容。
此时,Jellyfin 将完整显示剧集名称、海报、简介等信息,界面焕然一新:

书籍
进入 Jellyfin 管理控制台,点击左侧菜单插件,找到 Bookshelf。
点击安装。
然后重启 Jellyfin 服务器。
然后添加媒体库。
在元数据获取器中,将 Open Packaging Format 排在第一位,因为我们之前已经刮削得到 metadata.opf 元数据文件了。然后取消全部的元数据下载器和图片获取器。如果没有 metadata.opf 文件的话,那就选择 Epub Metadata,直接从电子书中读取信息,但一般不推荐这样做。
等待 Jellyfin 扫描媒体库后,查看效果:

配置 Jellyfin 硬件加速
先别急着播放视频,我们还没有配置 Jellyin 的硬件解码功能。进入 Jellyfin 管理后台,再左侧菜单中找到 播放,点击 转码 选项卡。在 硬件加速 下拉菜单中。根据你的设备所使用的 GPU 驱动进行选择。
对于 OrangePi 3B,其 VPU 硬件加速功能由 Rockchip MPP(RKMPP) 提供,因此选择 Rockchip MPP(RKMPP)。

查阅 OrangePi 3B 用户手册,可知其 VPU 支持 4K@60fps H.265/H.264/VP9 视频解码和 1080P@60fps H.265/H.264 视频编码。
勾选 AVC 和 HEVC 这两个编码器,然后滚动到最下面,保存更改。
测试转码效果
为了触发转码(而非直接播放),在播放视频时手动将视频码率调低。这样 Jellyfin 会启动转码流程,从而验证硬件加速是否生效。
如下图所示,转码已成功启动,当前转码性能达到 151 fps(6.30x),充分表明硬件加速已被正确调用。
移动客户端
Jellyfin 官方提供功能完整的移动客户端,支持 Android 和 iOS。如果你需要 Android 版本,可从下面的链接下载:
Jellyfin Android 客户端 v2.6.3
客户端界面与网页端高度一致,并针对移动设备进行了布局和交互优化。下图为 Android 客户端示例:
Jellyfin 移动端默认使用 HTML 视频播放器,该播放器无法调用手机的硬件解码能力。这会导致 Jellyfin 强制转码,如果你在之前没有配置过硬件解码,此时播放视频就会卡顿。
如果你只想在局域网内直接播放,就进入 Jellyfin 移动客户端的 设置 -> 客户端设置:
然后更改视频播放器类型为 综合播放器,这样 Jellyfin 就不会在局域网内也强制转码了。
参考资料
Setup Jellyfin with Hardware Acceleration on Orange Pi 5 (Rockchip RK3558)