用Portainer安装Jellyfin媒体服务器(安装篇)

最近清理服务器,发现 Jellyfin 已经很久没升级了,主要是老苏习惯直接用 samba,而且对海报墙没啥需求。

群晖上安装 Jallyfin 的教程非常多,但用群晖的 docker 管理器安装并不能启用硬件加速,因为硬件加速需用 device 挂载显卡,老苏准备用 portainer + docker-compose 来试试。

用群晖的 docker 管理器也是可以的,只是需要先 导出容器设置 到本地,按下面的内容修改完 devices 后再导入

1
2
3
4
5
6
7
8
9
10
11
12
"devices" : [
{
"CgroupPermissions" : "rwm",
"PathInContainer" : "/dev/dri/renderD128",
"PathOnHost" : "/dev/dri/renderD128"
},
{
"CgroupPermissions" : "rwm",
"PathInContainer" : "/dev/dri/card0",
"PathOnHost" : "/dev/dri/card0"
}
],

什么是 Jellyfin ?

Jellyfin 是一套开源的多媒体应用软件,旨在组织、管理和共享数字媒体文件,是 Emby 的一个免费开源分叉。Jellyfin 能自动刮削下载的电影所有信息,以海报墙的形式展示。用户只需要简单部署了服务端,其它的客户端就能轻松访问服务端的所有媒体文件。它还能在服务端转码,给不同的设备串流合适的内容。

准备

Jellyfin 支持硬件转码。关于硬件转码在『 用Dim搭建轻量级媒体服务器 』一文中只是简单介绍了一下如何快速检测自己的群晖是否支持,但实际情况要复杂的多。

Jellyfin 支持使用 FFMpeg 进行视频编码/解码的硬件加速 (HWA)。FFMpegJellyfin 可以通过 Video Acceleration API(VA-API) 支持多种硬件加速实现,例如: Intel Quicksync (QSV)AMD AMFnVidia NVENC/NVDECOpenMax OMXMediaCodec

VA-API 跟操作系统、硬件、驱动版本密切相关,更多的内容请查阅官方的文档:https://jellyfin.org/docs/general/administration/hardware-acceleration.html

老苏这次安装的目标机器是 DS918+,一台只有集显的机器,型号应该是 Intel HD 5500

老苏找了个 Intel CPU&集显ID 速查速查手册:https://shuiyunxc.gitee.io/2020/04/01/Graphics/index/

上回已经用 ls /dev/dri 检查过,DS918+ 支持硬件加速,这是硬件解码必要的基础

安装

docker 文件夹中,创建一个新文件夹,并将其命名为 jellyfin,然后在其中再建 3 个子文件夹,分别为 cacheconfigmedia

官方 docker 使用硬件加速的示例直接用于群晖会有各种报错

  1. 每种硬件加速类型以及每种 Jellyfin 安装类型都需要不同的设置选项才能使用。最好查阅有关您选择的加速类型的 FFMpeg 文档以获取最新信息:https://trac.ffmpeg.org/wiki/HWAccelIntro

  2. 之所以要使用主机模式进行联网,是为了使用 DLNA

  3. 群晖的权限和其他 linux 主机有所不同

而老苏的群晖上 /dev/dri/renderD128 的所有者并不是官方说的 render group

基于上面的原因,老苏修改了官方的示例,在支持硬件转码的集显机器上可以试试用下面👇这段脚本

这台机器的 docker 目录在 volume1 上,注意根据自己的修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
version: "3"
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
network_mode: "host"
volumes:
- /volume1/docker/jellyfin/config:/config
- /volume1/docker/jellyfin/cache:/cache
- /volume1/docker/jellyfin/media:/media
# 更多的媒体库
- /volume2/netdisk/AirDisk/USB-DISK-A:/airdisk
devices:
# VAAPI Devices
- /dev/dri/renderD128:/dev/dri/renderD128
- /dev/dri/card0:/dev/dri/card0
restart: unless-stopped

poratiner 左侧菜单找到 Stacks –> Add stack

将上面的内容贴入 Web editor,别忘了填上 Name

Name 注意不要用大写字母和特殊字符

点最下面的 Deploy the stack,然后等待完成

不出意外的话,在 Containers 中应该可以看到容器 jellyfin 正在 running

在群晖 Docker 管理器中也是一样的

  1. 日志中会有类似下面的内容,说明 DLNA 启动成功

  1. 不支持硬件转码的机器上用上面那段会报错: no such file or directory Encountered errors while bringing up the project,所以要去掉 devices 的部分,或者直接用常规的方法进行安装

运行

在浏览器中输入 http://群晖IP:8096 就能看到设置向导界面

完成设置后需要登录

进入控制台 –> 播放 –> 硬件加速 ,默认 硬件加速,相当于是软件转码

选择 Video Acceleration API(VAAPI),这个相当于是硬件转码

老苏本来还想试试 Intel Quick Sync ,但在播放时会报错

报错的原因是没有安装 Intel 的驱动,如果你有兴趣可以等着看下一篇(升级篇)

测试

老苏找了个 4K 的片源做测试,影片信息如下:

VAAPI 时日志中的相关显示

网页端的播放信息

软件转码,只能到 21

硬件转码(VAAPI),可以到 32

容器资源使用情况

软件转码基本上已经爆表

软件ds918

硬件转码(VAAPI)也不算低

VAAPI

字体

可以进入容器内安装字体,需要的空间比较大

1
2
3
4
5
# 更新源
apt update

# 安装字体
apt install -y fonts-noto-cjk-extra

安装特别耗时间

安装完成后需要重启容器,还需要在封面图上选择 修改图片,并删除已有的封面图。

然后重新扫描媒体库,生成的新的封面就 OK

参考文档

jellyfin/jellyfin: The Free Software Media System
地址:https://github.com/jellyfin/jellyfin

Jellyfin: The Free Software Media System
地址:https://jellyfin.org/

/dev/dri/renderD128 owned by “render” group on some hosts · Issue #105 · dlandon/zoneminder.machine.learning
地址:https://github.com/dlandon/zoneminder.machine.learning/issues/105

Intel CPU&集显ID速查(7月30日更新) | 独行秀才的老窝
地址:https://shuiyunxc.gitee.io/2020/04/01/Graphics/index/

How to install Jellyfin on a Intel-based Synology docker with a working Intel Quick Sync (H/W transcoding) : jellyfin
地址:https://www.reddit.com/r/jellyfin/comments/r9k8mk/how_to_install_jellyfin_on_a_intelbased_synology/