Emby加快扫库并使用直链播放

Emby加快扫库并使用直链播放

本文通过 Docker Compose 方式部署 Alist ,在 VPS 使用 WebDAV 本地挂载,同时通过 Auto_Symlink 生成 strm 文件加快 Emby 扫库速度,最后通过 MediaLinker 使 Emby 使用网盘直链播放。

前言

本文的适用对象:

  • VPS 部署 Emby
  • 网盘存放影视资源
  • 部署 Alist
  • 影视资源已刮削完毕

家庭 NAS 用户可适当参考。

Tip

文中所有的容器都使用 docker compose 方式部署,但并没有将所有项目放入同一个文件,这样方便选择性部署及调试,如果需要放入同一文件,挂载时注意各个容器内文件的映射路径。

用到的项目地址:

部署 Alist

Alist 是一个可以将网盘集中到一个程序展示的应用,同时支持 WebDav,本文通过 docker 部署,部署后自行添加存储,同时在 设置-全局 中关闭 签名所有 选项。

Note

文章都使用 docker compose 部署容器。

创建配置文件:

1mkdir -p /opt/alist && cd /opt/alist && vim compose.yaml

添加 docker 配置:

 1version: '3.3'
 2services:
 3    alist:
 4        image: 'xhofe/alist:latest'
 5        container_name: alist
 6        volumes:
 7            - './alist_data:/opt/alist/data'
 8        ports:
 9            - '5244:5244'
10        environment:
11            - PUID=0
12            - PGID=0
13            - UMASK=022
14        restart: unless-stopped

启动容器,需要在 compose 文件所在目录 :

1docker compose up -d
2# 初始化账号密码
3docker exec -it alist ./alist admin 你的密码

部署完成后访问 http://ip:5244 添加相应的存储即可。

本地挂载 Alist

部署后需要将 Alist 挂载到本地,以便媒体服务器 Emby 等扫描媒体文件,Alist 支持 WebDav,可以使用 CloudDrive2 或者 Rclone 挂载,这里使用 Rclone

首先安装 fuse3 ,然后安装 Rclone

1# 安装依赖
2apt-get install fuse3
3# 安装 rclone
4curl https://rclone.org/install.sh | sudo bash

接下来输入 rclone config 添加本地网盘,选择 WebDAV

 1# 选择新远程
 2No remotes found, make a new one?
 3n) New remote
 4s) Set configuration password
 5q) Quit config
 6n/s/q> n #这里选择n
 7
 8# 设置名字
 9name> remote
10Type of storage to configure.
11Choose a number from below, or type in your own value
12[snip]
13XX / WebDAV
14   \ "webdav"
15[snip]
16Storage> alist #这里输入远程的名字,之后就是你的远程名称
17
18# 设置远程地址url http://your_alist_ip:port/dav
19URL of http host to connect to
20Choose a number from below, or type in your own value
21 1 / Connect to example.com
22   \ "https://example.com"
23url> http://127.0.0.1:5244/dav #这里设置alist的地址和端口,后面要带dav,这是alist要求的
24
25# 这里选6就可以了,1-5都不是我们使用的
26Name of the WebDAV site/service/software you are using
27Choose a number from below, or type in your own value
28 1 / Fastmail Files
29   \ (fastmail)
30 2 / Nextcloud
31   \ (nextcloud)
32 3 / Owncloud
33   \ (owncloud)
34 4 / Sharepoint Online, authenticated by Microsoft account
35   \ (sharepoint)
36 5 / Sharepoint with NTLM authentication, usually self-hosted or on-premises
37   \ (sharepoint-ntlm)
38 6 / Other site/service or software
39   \ (other)
40vendor> 6
41
42# 设置远程账号
43User name
44user> admin #这里是你alist的密码
45
46# 设置远程密码
47Password.
48y) Yes type in my own password
49g) Generate random password
50n) No leave this optional password blank
51y/g/n> y #这里输入y
52Enter the password: #这输入你的密码,密码是看不到的
53password:
54Confirm the password: #再次输入你的密码
55password:
56
57# 这里直接回车即可
58Bearer token instead of user/pass (e.g. a Macaroon)
59bearer_token>
60Remote config
61
62# 这里可能会问你是默认还是高级,选择默认即可
63
64# 你的远程信息
65--------------------
66[remote]
67type = webdav
68url = http://127.0.0.1:5244/dav
69vendor = Other
70user = admin
71pass = *** ENCRYPTED ***
72--------------------
73
74# 确认
75y) Yes this is OK
76e) Edit this remote
77d) Delete this remote
78y/e/d> y #输入y即可,
79
80# 最后按q退出设置

输入对应的信息后,验证是否挂载成功(第二个命令慎用):

1# 查看alist的目录
2rclone lsd alist:
3
4# 查看alist的文件
5rclone ls alist:

挂载命令:

1rclone mount rclone添加的名称:/ /本地挂载地址 --cache-dir /tmp --allow-other --vfs-cache-mode writes --allow-non-empty --daemon

解除挂载:

1# 解除本地挂载,后面跟的是挂载的本地目录  
2fusermount -qzu /alist

开机自动挂载:

1vim /usr/lib/systemd/system/rclone.service

粘贴下面的内容:

 1[Unit] 
 2Description=rclone
 3Before=docker.service
 4
 5[Service] 
 6User=root 
 7ExecStart=/usr/bin/rclone mount rclone添加的名称:/ /本地挂载地址 --cache-dir /tmp --allow-other --vfs-cache-mode writes --allow-non-empty --daemon
 8
 9[Install] 
10WantedBy=multi-user.target
1systemctl daemon-reload
2systemctl enable rclone.service
3systemctl start rclone.service

此项目可以为挂载到本地的网盘文件创建软链接或者供 Emby 刮削的 strm 文件。

创建配置文件:

1mkdir -p /opt/auto_symlink && cd /opt/auto_symlink && vim compose.yaml

添加 docker 配置:

 1version: '3.9'
 2services:
 3    auto_symlink:
 4        image: 'shenxianmq/auto_symlink:latest'
 5        restart: unless-stopped
 6        user: '0:0'
 7        ports:
 8            - '8095:8095'
 9        volumes:
10            - './config:/app/config'  # auto_symlink 配置映射路径,右侧不能修改
11            - '/media/strm:/strm'     # 软链接或者 strm 文件映射路径,左右都可修改
12            - '/alist:/alist:rslave'  # 挂载到本地的网盘路径映射到容器内,第一个冒号左右侧要完全一致,第二个冒号右侧后不需要修改
13        environment:
14            - TZ=Asia/Shanghai
15        container_name: auto_symlink

运行容器后访问 http://ip:8095 可以访问程序界面,默认账户密码为:admin, password

Web 界面添加对应的同步任务,选择对应的媒体目录及链接存放目录。

  • 媒体目录compose 配置中映射到容器内的网盘路径,volume 下第三行配置。这里选择会选择到 auto_symlink 容器内的映射路径。
  • 本地目录compose 配置中映射到容器内的链接存放路径,volume 下第二行配置,同样会选择到 auto_symlink 容器内的映射路径。生成链接文件后会将此文件夹下的内容映射到宿主机 media/strm 文件夹下,可供 Emby 等媒体服务器访问。

  • 软链接模式:推荐使用 strm,可以加速 Emby 扫库。
  • strm 模式:选择 cloud 后文件内是 http 开头的链接。
  • 挂载类型:这里选择 Alist
  • alist 根目录Alist 挂载的根目录,例如我的 Alist 网盘路径中该选择 /Alist。这里仍然是映射到容器的文件夹。
1AList
2├── E5
3└── 阿里云盘

其余选项按需添加,保存后在 全局设置-手动同步 开启链接生成,可以在 查看日志 中看到进程,最后生成的链接会映射到 compose 配置中第二行 volumes 冒号左侧的文件夹,本文中的配置是 /media/strm

Note

可以到对应的目录中选择一个 strm 文件打开,将其中的链接放入浏览器,如果出现下载视频任务,说明链接获取成功。

部署 Emby

Emby 可以使用官方的镜像,本文使用特别版。

创建目录及 compose 文件:

1mkdir -p /opt/emby && cd /opt/emby && vim compose.yml

添加 docker 配置:

 1version: "3.3"
 2services:
 3  emby:
 4      network_mode: bridge
 5      ports:
 6          - '8096:8096'
 7          - '8920:8920'
 8      volumes:
 9          - ./config:/config
10          - /media/strm:/strm   # 将auto_symlink 生成的链接文件夹映射到 emby 容器内
11      environment:
12          - TZ=Asia/Shanghai
13          - UID=0
14          - GID=0
15          - GIDLIST=0
16      restart: always
17      container_name: embyserver
18      image: lovechen/embyserver:latest

部署完成后添加媒体库时媒体文件路径在容器 /strm 下选择,勾选下面两个选项:

  • 启用实时监控
  • 元数据读取器-NFO

添加后 Emby 会很快扫库完成,此时就可以正常使用 Emby,不过此时观看使用的都是服务器流量,如果想要观看是使用网盘链接访问资源,就需要下面的项目。

部署 MediaLinker

首先关闭 Emby 用户的转码权限,在 Emby-设置-用户编辑,将 如有必要,在媒体播放期间允许视频转码 选项关闭,拉到最下方保存。

接下来在 播放-视频 中,将 互联网质量 拉到最大。

然后部署项目,此项目是 emby2Alist 的整合版。

1mkdir -p /opt/medialinker && cd /opt/medialinker && vim compose.yml
 1version: '3'
 2services:
 3    medialinker:
 4        restart: always
 5        volumes:
 6            - './config/:/opt/'  # 配置文件映射,右侧不要修改
 7        environment:
 8            - AUTO_UPDATE=true  
 9            - SERVER=emby
10            - NGINX_PORT=8091
11            - NGINX_SSL_PORT=8095
12            - SSL_ENABLE=true
13            - SSL_CRON=0 3 * * *
14            - SSL_DOMAIN=yourdomain.com
15
16        container_name: medialinker
17        image: 'thsrite/medialinker:latest'
18        network_mode: "host"

配置证书脚本:

1vim /opt/medialinker/config/ssl

粘贴下面的内容,并更改对应的参数配置,DNS 配置:参考地址

1CLOUDFLARE_DNS_API_TOKEN=apikey \
2/lego --email CF邮箱账号 --dns cloudflare --domains "${SSL_DOMAIN}" --accept-tos run

完成后在 /opt/medialinker 目录运行 docker compose up -d 部署容器,部署后会生成 /opt/medialinker/config/constant.js 文件,在其中修改对应的参数,配置中有详细的解释。修改后可以运行下面的命令重新部署容器:

1cd /opt/medialinker
2docker compose down
3docker compose up -d

完成后访问 https://SSL_DOMAIN:NGINX_SSL_PORT 即可访问 Emby,即 compose 文件中设置的参数。

单 compose 文件参考

创建文件夹及 compose 文件:

1cd /opt && mkdir -p {alist,auto_symlink,medialinker,emby} && vim compose.yml
 1version: '3.9'
 2services:
 3  alist:
 4    container_name: alist
 5    image: xhofe/alist:latest
 6    volumes:
 7      - /opt/alist/alist_data:/opt/alist/data
 8    ports:
 9      - '5244:5244'
10    environment:
11      - PUID=0
12      - PGID=0
13      - UMASK=022
14    restart: unless-stopped
15
16  auto_symlink:
17    container_name: auto_symlink
18    image: shenxianmq/auto_symlink:latest
19    restart: unless-stopped
20    user: '0:0'
21    ports:
22      - '8095:8095'
23    volumes:
24      - /opt/auto_symlink/config:/app/config
25      - /media/strm:/strm
26      - /alist:/alist:rslave
27    environment:
28      - TZ=Asia/Shanghai
29
30  medialinker:
31    container_name: medialinker
32    image: thsrite/medialinker:latest
33    restart: always
34    volumes:
35      - /opt/medialinker/config:/opt/
36    environment:
37      - AUTO_UPDATE=true
38      - SERVER=emby
39      - NGINX_PORT=8091
40      - NGINX_SSL_PORT=8094
41      - SSL_ENABLE=true
42      - SSL_CRON=0 3 * * *
43      - SSL_DOMAIN=yourdomain.com
44    network_mode: "host"
45
46  emby:
47    container_name: embyserver
48    image: lovechen/embyserver:latest
49    network_mode: bridge
50    ports:
51      - '8096:8096'
52      - '8920:8920'
53    volumes:
54      - /opt/emby/config:/config
55      - /media/strm:/strm
56    environment:
57      - TZ=Asia/Shanghai
58      - UID=0
59      - GID=0
60      - GIDLIST=0
61    restart: always

下载 medialinker 配置文件及证书脚本文件:

1wget -O /opt/medialinker/config/constant.js https://raw.githubusercontent.com/thsrite/MediaLinker/refs/heads/main/config/emby/constant.js
2wget -O /opt/medialinker/config/ssl https://raw.githubusercontent.com/thsrite/MediaLinker/refs/heads/main/config/ssl

下载修改这两个文件中对应的配置,路径为 /opt/medialinker/config/constant.js/opt/medialinker/config/ssl

完成后运行容器:

1cd /opt && docker compose up -d

参考

文章标题: Emby加快扫库并使用直链播放

文章链接: https://blog.grew.cc/posts/emby-alist-direct-link/

版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0