1 原理
这个方案利用 emby 支持 strm 文件可以快速入库,切通过 openlist 等支持网盘的 302 重定向,实现快速起播,以下内容中提到的所有工具均为开源项目,当然也有其他可选的工具替代,例如 cd2 可以用 rclone 替代,auto_symlink 可以用其他 strm 工具替代,emby2alist 可以用 go-emby2openlist 替代等。(同时也推荐使用 auto_symlink 作者的 symedia 和 fastemby 项目)
2 关于更优方案的讨论
2.1 115 网盘 302 风控/封号
目前已知 115 网盘在多个地区或超过一定连接数使用 302 重定向可能会触发风控,想请问下各位是否有更好的解决方案,如是否可以做多网盘资源的负载均衡(也可以推荐相应的 vps 走代理的方式)
3 openlist
3.1 作用
- 网盘挂载,可通过 webdav 的方式访问网盘 302 重定向
3.2 docker 部署
mkdir -p /media/docker/alistdocker run -d \--restart=always \-p 5244:5244 \-p 6801:6800 \-e PUID=0 \-e PGID=0 \-e UMASK=022 \--name=openlist \-e TZ=Asia/Shanghai \openlistteam/openlist:beta
4 cd2
4.1 作用
- 网盘挂载,可通过本地映射路径访问(这里也可以用 rclone ,但是据其他博主说 rclone 的速度会比 cd2 慢)套娃挂载 alist 的 webdav ,以支持 cd2 暂不支持的网盘(如夸克网盘等)
4.2 docker 部署
注意点:这里映射了两个媒体目录,一个是cloud_media
,一个是webdav_media
。
cloud_media
用于挂载支持 302 重定向的网盘,如 115 ,天翼等;webdav_media
用于挂载如夸克网盘等;部署前请确认 docker 已开启 MountFlags
version: '3'services: clouddrive: image: cloudnas/clouddrive2 container_name: clouddrive restart: unless-stopped environment: - CLOUDDRIVE_HOME=/Config volumes: - /volume2/Media/mp_downloads:/CloudNAS:shared - /volume2/Media/cloud_media:/media:shared - /volume2/Media/webdav_media:/webdav_media:shared - /volume1/docker_dir/clouddrive2:/Config ports: - "8097:19798" pid: "host" privileged: true devices: - /dev/fuse:/dev/fuse
4.3 针对 115 风控的配置
5 auto_symlink
5.1 作用
- 实时监控目录变化,扫盘,入库
5.2 docker 部署
需注意:
- volume 内的宿主机和容器路径最好一一对应,否则可能出现 emby 内软链接跳转失败的问题支持 302 重定向的网盘和其他网盘的根路径要分开,否则在 emby 播放时,其他网盘的资源会无法播放
version: '3'services: auto_symlink: image: shenxianmq/auto_symlink:latest container_name: auto_symlink environment: - TZ=Asia/Shanghai volumes: - /volume2/Media/cloud_media/clouddrive:/volume2/Media/cloud_media/clouddrive:rslave # cd2 挂载目录 - /volume2/Media/webdav_media/clouddrive:/volume2/Media/webdav_media/clouddrive:rslave - /volume2/Media/strm:/volume2/Media/strm # emby 扫描媒体目录 - /volume2/Media/webdav_strm:/volume2/Media/webdav_strm - /volume1/docker_dir/auto_symlink/config:/app/config ports: - "8095:8095" user: "0:0" restart: unless-stopped
5.3 网页配置
6 emby
6.1 docker 部署
需注意:
- emby 媒体库只需添加包含 strm 的相关文件夹emby 不要开启转码
version: '3'services: emby-server: image: amilys/embyserver container_name: emby-local network_mode: bridge # DLNA and Wake-on-Lan 需要 bridge environment: - UID=0 # 设置容器用户 ID 为 0 (通常是 root) - GID=0 # 设置容器组 ID 为 0 (通常是 root) - GIDLIST=0 # 设置容器组 ID 列表为 0 - TZ=Asia/Shanghai # 设置容器的时区为亚洲/上海 devices: - /dev/dri:/dev/dri # 将主机的 /dev/dri 设备挂载到容器 开启硬解 ports: - 8096:8096 # 对外访问端口 restart: unless-stopped privileged: true volumes: - /volume1/docker_dir/emby_local/config:/config - /volume2/Media/cloud_media/clouddrive:/volume2/Media/cloud_media/clouddrive:rslave - /volume2/Media/local_media:/volume2/Media/local_media - /volume2/Media/webdav_media/clouddrive:/volume2/Media/webdav_media/clouddrive:rslave - /volume2/Media/webdav_strm:/webdav_strm # 其他网盘的 strm(夸克等) - /volume2/Media/strm:/strm # 支持 302 重定向的网盘 strm(115 ,天翼等)
7 emby2alist
7.1 作用
- 通过 nginx 重定向资源地址,将原先 strm 文件指向的挂载路径如
/volume2/Media/cloud_media/115
直接指向 alist 路径下的/115
,从而实现 302 重定向网盘资源由于之前将两种网盘资源分开存放,这里只会匹配支持重定向网盘的根路径,其他网盘仍然会通过挂载在本地的/volume2/Media/webdav_media
路径进行访问7.2 部署
wget https://github.com/bpking1/embyExternalUrl/archive/refs/tags/v0.4.5.tar.gztar -zxvf v0.4.5.tar.gzcd embyExternalUrl-v0.4.5/cd emby2Alist# modify nginx/conf.d/constant.js# 参考下图 1 配置# embyHost 如果是本地 docker 部署的,就是图中的 http://172.17.0.1:8096(端口自行确认)# modify nginx/conf.d/config/constant-mount.js# 参考下图 2 配置# alistAddr 如果是本地 docker 部署的,就是图中的 http://172.17.0.1:5244(端口自行确认)# modify nginx/conf.d/config/constant-pro.js# 参考下图 3 配置# 待替换路径需确认 emby 媒体库内资源路径和 alist 内的路径,填写多出来的部分(仅限支持 302 重定向的网盘资源)
nginx/conf.d/constant.js
nginx/conf.d/config/constant-mount.js
nginx/conf.d/config/constant-pro.js
7.3 常见问题
7.3.1 115 资源无法播放
nginx-emby 容器内日志如下:
[warn] 21#21: *155 js: redirect to: /d/115/xxx
7.3.1.1 原因
匹配到 emby2alist 里的 115 规则,并使用 alist 公网地址进行转发
7.3.1.2 临时解决方案
屏蔽位于constant-mount.js
内clientSelfAlistRule
中与 115 有关的规则
7.3.2 新增网盘后 emby 无法播放
问题描述:在上面的环境正常运转的情况下(emby 启动后),新增了一个夸克盘通过alist
-> cd2
挂载到本地目录/volume2/Media/webdav_media
,可以正常生成新的 strm 文件,emby 也可以正常入库,但是无法播放,并提示无兼容的流。此时在 emby 中查看挂载在 emby 容器上的/volume2/Media/webdav_media
路径,里面的夸克盘路径下是没有东西的
复现方式:
- 在 cd2 内卸载之前的夸克盘挂载去 emby 内看路径
/volume2/Media/webdav_media
下是否已经没有文件夹在 cd2 内重新挂载夸克盘去 emby 内确认路径/volume2/Media/webdav_media
下是否虽然有夸克盘的目录,但里面没东西7.3.2.1 原因
这是因为在之前的步骤中,emby 容器配置中与网盘相关的路径映射如cloud_media
, webdav_media
没有开启 rslave 模式,现已修正
7.3.2.2 解决方案
emby 容器与网盘相关的路径挂载时开启 rslave 模式,详见 4.1
以下操作可保留原先所有配置和刮削记录
# add :rslave to docker-compose.yml 按照 4.1emby 部署的 compose 文件更改docker stop emby_container # emby_container 替换成自己的容器名docker rm emby_container # emby_container 替换成自己的容器名docker-compose up -d # 重新部署
7.3.3 emby 提示无兼容的流
7.3.3.1 原因
该问题一般由指定路径下的文件不存在引起,可以检查下网盘是否正确挂载
参考教程:
url: https://www.nerocats.com/archives/58/title: "alist-clouddrive2-auto_symlink-emby-nginx 实现 emby 播放 115 直链 - 偏爱一丛花"description: "完成效果:1. moviepilot 下载目录(可以不用) 如:/media/docker/moviepilot/downloads2. moviepilot 整理后的媒体库目录,同时也是 cd2..."host: www.nerocats.comfavicon: https://www.nerocats.com/usr/uploads/logo/favicon.ico