本文发自 http://www.binss.me/blog/install-jellyfin-in-synology-nas/,转载请注明出处。

缘起

最近发现放在家中的黑群晖 (见 我的黑群晖 NAS 折腾日记 ) 挂了,折腾了一个晚上还是没能恢复,由于工作后实在没有太多精力来折腾黑群晖了,索性决定购入群晖。

经过一番纠结,最后还是决定购入 DS918+ ,原因如下:

  • 四盘位,支持额外插两条 nvme SSD 加速,支持再插一条内存
  • J3455 ,在群晖的一众渣渣 CPU 还算能用,能硬解 4k
  • 国行三年保修

咬咬牙花了 3700 大洋上了车。把黑群晖里原来的四块硬盘(虽然暴风云只有两个盘位,但有四个 SATA 口,我把两块 2.5寸 SSD 塞到机身里面了),结果发现四个硬盘灯有一个没亮,一波研究,发现是原来装黑群晖系统和引导的那块 SSD 挂了,尼玛导致我多花 3k 大洋的凶手是你,三棒子 860 EVO !

既来之则安之,尝试到白裙自带的 quick connect 服务后,我不由说了一句真香,开始认真折腾起来,其中重要的一项是作为媒体服务器为其他如 电视、PC、iPad 等设备提供片源。以往我是在设备上通过 Webdev 挂载到相应的目录下通过如 nplayer 之类的播放器进行播放,但随着视频文件的增多,这种基于文件夹的视频管理方式越来越不方便,能不能实现一种更直观、更方便的多媒体播放方案?网上一搜,原来群晖的 Video Station、Plex、Emby 都是干这个的。

经过一番考察,发现 Plex 、 Emby 价格太高玩不起,群晖自带的 Video station 功能太简陋,最后选择了新出的 Jellyfin ,它是社区看不惯 Emby 收费后另起炉灶、基于 Emby 3.5.2 搞出来的多媒体管理服务,界面看上去很不错。

安装

可惜的是,群晖的套件中心中没有 Jellyfin ,我们转而通过 docker 来安装:

docker - 注册表 (这机翻) 中搜索 jellyfin ,下载,下载完成后在映像中能看到该 image 。由于我们需要硬件解码,因此需要将 /dev/dri/renderD128 设备映射到容器中去,但我在界面上没找到指定 device 的方法,因此我们开启群晖 ssh 服务后登陆到上面去,通过命令启动 Jellyfin 容器:

sudo docker run -d --name jellyfin \
-v /volume1/docker/jellyfin:/config \
-v /volume3/Media:/media \
-p 8096:8096 \
-p 8920:8920 \
--device=/dev/dri:/dev/dri \
--restart unless-stopped \
--network host \
jellyfin/jellyfin

这里 /volume1/docker/jellyfin 是 Jellyfin 用于存放配置和数据的目录,需要预先在 File Station 中创建好并设置 Everyone 都能访问:

而 /volume3/Media 是我存储视频文件的目录,可以根据需要选择替换为自己的目录。

这里暴露两个端口,8096 为 http,8920 为 https 。

启动容器后,通过 docker exec -it jellyfin bash 进入到容器中,确定 /dev/dri 中的设备文件被成功映射:

[email protected]:/# ll /dev/dri/
total 0
drwxr-xr-x 2 root root      100 Sep 14 03:54 ./
drwxr-xr-x 6 root root      360 Sep 14 03:54 ../
crw------- 1 root root 226,   0 Sep 14 03:54 card0
crw------- 1 root root 226,  64 Sep 14 03:54 controlD64
crw------- 1 root root 226, 128 Sep 14 03:54 renderD128
[email protected]:/#

随后可以在群晖 UI 的 docker - 容器 中看到该容器。

配置

初始化

访问 http://群晖ip:8086 打开 Jellyfin 管理界面,注册账号、一路保持默认 next 后初始化完成,进入主界面。

添加媒体库

控制台 - 媒体库 - 添加媒体库:

选择相应的媒体类型,如 电影,然后点击文件夹旁边的加号添加文件夹,输入路径,注意该路径为容器中的路径,比如原来是 /volume3/Media/Movie 的需要填入 /media/Movie,填对后下方会列出该目录下的文件列表,点击确定即可:

随后选择媒体库设置中的首选下载语言和国家,以及勾选元数据下载器(推荐有多少勾多少),这几个选项决定了抓下来的视频元数据信息的来源和语言。最后,建议勾选 将媒体图像保存到媒体所在文件夹 ,会把下载下来的视频信息的图片和视频放到一起,方便编辑。

注意,Jellyfin 下载元信息图片的方式是按需下载,极端情况下直到你打开视频要播放时才会下载,在此之前你的视频元信息图片可能都不会下载,最典型的表现就是没有视频的封面!反正我是不能忍,为此勾选 显示高级设置,会出现 提前下载图片 选项,勾选即可。

OK 后点确定即可,会发现在跑一个进度条,这表示 Jellyfin 开始扫描目录下的电影文件,并根据文件名等信息联网下载元数据。注意这个抓取过程可能很漫长,一方面是元数据网站做了限流,刮削器在抓取过程中比较节制,另一方面是因为国内某些网络无法连接到这些网站,这个时候可以考虑走代理,方法很简单,为 Jellyfin 容器指定 http 代理的环境变量即可:

这里 http://192.168.10.60:6152 是我本地的 http 代理,至于怎么搭代理,本文不做阐述。

硬件加速

由于 DS918+ ,其 CPU 支持硬解,在前面我们也将相应的 device 目录挂载进容器中了,在此我们进行配置:

控制台 - 转码 ,如下设置:

实测在开启硬件加速后,浏览器播放 1080P 视频时的 CPU 占用率从 90%+ 降到 20%+ 。

安装插件

控制台 - 插件 - 目录 中有若干插件,在此介绍我目前正在使用的两个:

Anime

动画党必备,对于很多动画,传统电影 db 中抓不到元信息,安装该插件在媒体类型为 电视节目 下会多出 Anidb 等几个元数据下载器,当然选择全钩上,但本人实测自带的 TVdb / Movie 往往能抓到中文的元信息,因此我建议将其放到后面作为补充。

Open Subtitles

下载视频字幕,需要注册账号,安装后在 控制台 - 插件 - 我的插件 - Open Subtitles ,点击 Register 按钮跳转到 https://www.opensubtitles.org,注册完账号后填入框中,否则无法使用该插件。

随后可以在电影的播放前界面选择修改字幕 - 搜索字幕:

找到想要的字幕下载即可:

桌面快捷方式

每次都要手动输入路径很麻烦,能不能像群晖自带套件那样在桌面点一个图标就进入?可以!

总结

Jellyfin 作为 Emby 的 “开源社区版”,界面上继承了 Emby 的美观,该有的功能也都有,然而在折腾过程中,我发现以下问题:

  • 没有 iOS 客户端支持,Emby iOS 版也封杀了对处于 “老版本” 的 Jellyfin 的支持
  • 网页播放视频时,有一定概率卡住无法播放,需要刷新网页
  • 搜刮器搜刮过程总是卡在 90%+,并且搜刮过程会打一些 error log ,看 github 上有相应的 issue 但很久都没得到解决

虽然折腾 Jellyfin 折腾了好几天,但鉴于我自己的使用场景,最终还是选择了 Plex + Infuse 的方案,欲知后事如何,请听下回分解。