基于 Jellyfin 打造家庭影音中心

Photo by James Barrett on Unsplash

Jellyfin 是一款开源免费的媒体服务器软件,发现功能十分强大,刮削器比 VideoStation 给力多了,这次改造的目标是:

  1. NAS 安装 Jellyfin 并实现硬解转码
  2. 内网连接使用 Kodi 直传
  3. 外网连接使用实时转码

遇到的坑

家里的群晖是 DS418Play,CPU 为 J3355,支持硬解,离线安装 docker 后按照网上的通用教程,在 Docker 内搜索 jellyfin/jellyfin 直接配置安装,发现根本实现不了硬件转码。播放视频时 CPU 飙到 100%,折腾了一个通宵,把 GPU 驱动、ffmpeg 版本、文件权限都检查过了,最后发现是 Docker 的原因:

Docker 默认不会加载 GPU 驱动文件,要在容器启动前先映射

Docker内搜索Jellyfin

Docker 创建容器时的图形界面,在环境一栏尝试增加 --device /dev/dri/renderD128 依旧无法加载驱动文件,使用命令行方式的安装就正常

安装过程

检查显卡驱动

SSH 登录到群晖,输入 ls /dev/dri,如果查询到目录下存在 renderD128 则表示显卡驱动已安装,否则是不能硬解的。

1
ls /dev/dri

创建文件目录

在 Docker 共享文件夹内新建 jellyfin 文件夹,为 everyone 用户分配读写权限,在文件夹内新建两个文件夹:

  1. cache:用于存放 jellyfin 缓存文件
  2. config:用于存放 jellyfin 配置文件

安装 Jellyfin

SSH 登录到群晖,使用以下指令安装,其中 /volume1/video 是存放视频的共享文件夹,/volume1/docker/jellyfin 是刚才创建的文件目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//切换到root账户
sudo su

//下载jellyfin映像
sudo docker pull jellyfin/jellyfin

//运行容器,两行-p是HTTP和HTTPS端口,根据自己的需要设置
sudo docker run -d --name jellyfin \
-v /volume1/docker/jellyfin/config:/config \
-v /volume1/docker/jellyfin/cache:/cache \
-v /volume1/video:/video \
-p 8096:8096 \
-p 8920:8920 \
--device=/dev/dri/renderD128 \
--restart unless-stopped \
jellyfin/jellyfin

检查驱动装载

通过 docker ps 获取 jellyfin 的 ID,然后切换到容器环境下检查显卡驱动

1
2
3
4
5
6
7
8
9
10
11
12
//切换到root账户
sudo su

//显示容器列表,在输出结果中找到jellyfin的CONTAINER ID,记下来,假设是:745de62cbd31
docker ps

//进入容器环境
docker exec -it 745de62cbd31 /bin/bash

//检查显卡驱动
ls /dev/dri

输入 ls /dev/dri 后观察输出结果,如果目录下存在 renderD128 则表示驱动已加载,否则回头看一下是不是哪些地方输错了,重新试一下,最后 Ctrl+D 退出容器环境

配置 Jellyfin

通过 Nas地址:8096 进入 jellyfin, 在转码页面选择硬件加速为 VA API, 同时勾选硬件编码,就实现 GPU 硬件转码了,实测 1080P 视频实时转码时,CPU 占用在 50% 以下。其他设置项网上教程很多,这里不再展开。

jellyfin转码设置

内网直传

内网机器安装 Kodi 播放器,通过 Kodi 链接 Jellyfin 服务器获取影视资源,这一步比较简单,根据官方 Wiki配置即可,简单翻译一下步骤

  1. 下载 jellyfin 的 kodi 插件:repository.jellyfin.kodi.zip
  2. 下载 Kodi 安装包并安装:官网地址
  3. 打开 kodi 设置-系统-插件,允许未知来源,然后返回设置-插件从Zip文件安装,选择第一步下载的 zip 包
  4. 返回设置-插件从库安装,选择 Jellyfin - 视频插件
  5. 安装完成,配置服务器为 Nas地址:8096,登录即可

Kodi直连jellyfin

外网访问

如果家里的网络有公网 IP,在路由上做好 DDNS,端口映射,然后外网使用域名:映射端口号就能访问到媒体库了,外网主要是手机在用,jellyfin 有安卓客户端,有了实时硬件转码,手机播放就很流畅了

手机jellyfin客户端

应用感受
VideoStation 刮削器不给力,手机播放有时候会黑屏
Plex 到处都要收费,没钱!
Jellyfin 实时转码,有折腾的价值