用Dim搭建轻量级媒体服务器

什么是 Dim ?

Dim 是一个自托管媒体管理器。通过最少的设置,Dim 将组织和美化您的媒体收藏,让您随时随地访问和播放它们。

从功能上来说,Dim 像简版的 Jellyfin,设置也更简单。

准备

Jellyfin 一样,Dim 也支持硬件转码。关于硬件转码老苏查了一下,有限定条件:

  • 首先、群晖的系统版本需要 DS918+,反正 DS3617xs 不支持,但跟白裙、黑裙没啥关系;
  • 其次、要有 DRM( Direct Rendering Manager),这是 Linux 内核的一个子系统,负责与显卡的 GPU 连接;
  • 最后、一般来说主板上都有集显,理论上越厉害的 CPU 带的集显也越牛,但是有些可能需要打补丁,还有些打了补丁可能也没用;

如何快速知道自己的群晖是否支持呢?最简单的办法还是 SSH 客户端登录到群晖,通过下面的命令来检测

1
2
# 查看系统是否支持显卡硬件转码
ls /dev/dri

DS3617xs 显然是不支持

而另一台 DS918+ 则是支持

安装

docker 文件夹中,创建一个新文件夹,将其命名为 dim,然后在其中建两个子目录 configmedia

其实 Dim 是个单容器的项目,但是官方没有在 Docker Hub 上托管镜像,这就有点尴尬了,所以老苏决定还是用 portainer 来安装。

官方提供了 docker-compose.yml 文件,原版在这里:https://github.com/Dusk-Labs/dim/blob/master/docker-compose-template.yml

老苏的 docker 目录在 volume2 上,注意根据自己的修改

支持硬件转码的机器上用下面👇这段脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "3.8"
services:
dim:
container_name: dim
image: ghcr.io/dusk-labs/dim:dev
ports:
- 8585:8000
volumes:
- /volume2/docker/dim/config:/opt/dim/config
- /volume2/docker/dim/media:/media
# 像下面这样添加更多文件夹:
# - /<host_media_path>:/media2
# 使用以下几行通过硬件加速您的设备
devices:
# VAAPI Device example:
- /dev/dri/renderD128:/dev/dri/renderD128

不支持硬件转码的机器上用上面那段会报错: no such file or directory Encountered errors while bringing up the project,所以要去掉 devices 的部分👇

1
2
3
4
5
6
7
8
9
10
11
12
version: "3.8"
services:
dim:
container_name: dim
image: ghcr.io/dusk-labs/dim:dev
ports:
- 8585:8000
volumes:
- /volume2/docker/dim/config:/opt/dim/config
- /volume2/docker/dim/media:/media
# 像下面这样添加更多文件夹:
# - /<host_media_path>:/media2

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

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

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

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

下载镜像的速度有点慢,说实话挺煎熬的,老苏是先用命令行 docker pull ghcr.io/dusk-labs/dim:dev 下载之后再执行 docker-compose.yml,虽然不会加速,但是好歹能看到下载的进度,所以感觉要好很多😂

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

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

运行

在浏览器中输入 http://群晖IP:8585 就能看到主界面

注册管理员

第一次需要注册账号,注册的第一个用户就是管理员

密码不能少于 8

登录之后就是主界面,开始并没有内容

点中间橘黄色的 Add library

开始扫描加载

扫描完成后的 Libraries 界面

  1. 从日志看匹配影片是通过 tmdb,但匹配度非常低,而且即便你已经通过刮削器处理过依然不能识别,可能还需要手动匹配;
  2. 如果不将 themoviedb.org 加入科学上网,在手动匹配的时候会没有反应;

Dashboard 界面还是非常炫酷的

注册新用户

除了管理员之外,如果再注册用户,需要提供 Invite token

管理员登录后,Preferences –> Invites –> Generate a new token

新生成的 Token ,状态是 Available,可以用于注册用户,当 Token 注册了用户之后,状态会变成注册的用户名

小结

Dim 作为轻量级媒体服务器,基本的播放都是没问题的,不仅可以选择播放质量

还可以设置硬件转码,当然首先要设备支持才行

老苏并没有验证硬件转码,不过 VA-API 应该没问题,是否支持 QSV 就不确定了,虽然有驱动,但毕竟 Dim 不像 Jellyfin 有专门的设置项

Dim 从功能上不如 Jellyfin 多,但设置比 Jellyfin 简单,没有一堆让你晕晕乎乎的专业名词,这是 Dim 的优点。

要说缺点,就是在影片的识别方面还亟待提高。总的来说还是值得持续关注。

附录

如果镜像实在下不动,可以到老苏的天翼云共享

https://cloud.189.cn/web/share?code=eaUbuqaaYzyq(访问码:mf6h)

中下载 ghcr-io-dusk-labs-dim(dev).syno.tar 文件,然后将其上传到群晖的一个目录中

打开群晖 docker 管理器,映像 –> 新增 –> 从文件添加

选择上传的文件

然后在 SSH 客户端中执行下面👇的命令

1
2
3
4
5
6
7
docker run -d \
--name dim \
--device /dev/dri/renderD128:/dev/dri/renderD128 \
-p 8585:8000 \
-v /volume1/docker/dim/config:/opt/dim/config \
-v /volume1/docker/dim/media:/media \
ghcr.io/dusk-labs/dim:dev

参考文档

Dusk-Labs/dim: Dim, a media manager fueled by dark forces.
地址:https://github.com/Dusk-Labs/dim