Emby 自有授权媒体库(一)
使用 Emby 管理自有授权媒体文件
1 准备工作
本文只讨论管理自己拥有合法使用权的媒体文件。请遵守云存储服务条款和所在地区的法律,不要把这套配置用于共享、传播或访问未授权内容。
如果你把自有授权文件存放在云存储里,可以用 .strm 索引文件把播放地址交给 Emby 或其他本地播放器,减少服务器上行带宽压力。这个方案适合个人媒体库使用,部署前请先确认文件来源和授权范围。
我先把我的 docker 树目录再放出来,方便你修改路径,如果和我一样的路径就不需要修改。
/root根目录
├── mnt
| ├── docker # 创建容器脚本文件夹
| ├── apps
| ├── auto_symlink # 生成strm文件
| ├── alist # 挂载云存储(你可以用rclone,我不会)
| ├── cloudDrive2 # 挂载云存储并且挂载到本地路径
| ├── emby # 搭建emby
| ├── embynginx # nginx反代302
| ├──conf.d # nginx 配置文件夹,需要修改,并且从github项目中同步并上传
| ├──embyCache # emby日志
| ├──log # nginx日志
| ├── docker-compose
| ├── strm302.yaml # alist+cd2+302+strm+emby
| ├── CloudNAS # 通过cd2挂载的云存储到本地
| ├── Media # 生成的strm文件媒体库
| ├── Strm
| ├── Movie
| ├── TV
| ├── 其他Strm
- 认真对比自己的目录,如果这个目录错了,很麻烦的,最好就是和我一样。
- 因为我在拉取项目时候,在反代那里因为会报错,所以我先创建文件夹上传两个必须上传的配置文件,后面的配置内容可以安装好项目再修改。
- 我在路径为
/mnt/docker/apps/embynginx路径下上传了从下面 GitHub 项目获取的两个文件,分别是文件夹 conf.d和文件 nginx.conf。
2 创建 strm302 项目
2.1 什么是 strm?
可以在 Emby 中播放各种网络视频和音频流,使用 .strm 文件的效果就像将它们本地存储在媒体中心一样。 只要 Emby 支持格式和流传输方法(网络协议),就可以使用流。后缀为 .strm 的基本文本文件,内容包含 Internet 流的 URL 或本地文件路径位置。
2.2 什么是302?
302 就是重定向,通过你部署环境重定向到一个地方,云存储 302 就是重定向到云存储官网,从而达到不走你部署环境上行流量的情况。
2.3 什么是 strm302 项目?
strm302 项目,就是用工具生成 .strm 索引文件,可选工具包括 alist-strm、auto_symlink、MediaPrism 等。然后通过 nginx 反向代理把播放请求转发到云存储服务,减少自建服务的上行带宽压力。该项目文件包含 cloudDrive2、alist、emby、auto_symlink、nginx 五个镜像。
# alist+cd2+auto_symlink+amilys-emby+embynginx = 授权云存储302转发
# 本项目整合,主要是通过alist挂载云存储,cd2映射云存储到本地路径,auto_symlink生成strm文件,amilys-emby读取strm,最后embynginx反代
# 更新auto_symlink端口从8085换到了8095
# ---
name: strm302
# 最后编辑时间:2025-03-13
services:
alist:
# 镜像地址,此为正式版,内置aria2
image: xhofe/alist-aria2:latest
# 容器名字
container_name: alist
# 主机名
hostname: alist
# 路径
# 环境配置
environment:
# 给最高权限,直接让它可以访问到你的全部东西,注意要做好映射
- PUID=0
- PGID=0
# 默认创建新文件的权限,一般写022
- UMASK=022
# 时区
- TZ=Asia/Shanghai
volumes:
# 配置文件目录
# - 左边是你本机路径 : 右边是容器路径
- /mnt/docker/apps/alist:/opt/alist/data
# 网络模式:桥接模式:bridge,需要手动映射端口 主机模式:host,不需要手动映射端口
network_mode: bridge
ports:
# webUI端口:5244,aria2端口:6800
- 5244:5244
- 6800:6800
# 重启策略,可根据实际情况而选择 no/always/unless-stopped/on-failure/on-failure
# 一般选择always 或者 unless-stopped
restart: always
clouddrive2:
# 镜像地址,该镜像使用的是非正式版,如需使用测正式版,镜像改为cloudnas/clouddrive2:latest
image: cloudnas/clouddrive2-unstable-test
# 容器名字
container_name: clouddrive
# 主机名
hostname: clouddrive2
# 特权模式,赋予容器几乎与主机相同的权限,必须
privileged: true
# 环境配置
environment:
# 自定义配置目录
- CLOUDDRIVE_HOME=/Config
# 时区
- TZ=Asia/Shanghai
# 路径
volumes:
# 挂载云存储目录,shared 挂载点是共享的,在宿主机上进行的挂载或卸载操作会传播到所有容器中
- /mnt/CloudNAS:/mnt/CloudNAS:shared
# 配置文件目录,可在变量中进行配置
- /mnt/docker/apps/clouddrive2:/Config
# 挂载驱动
devices:
# Clouddrive 使用 fuse3 来挂载云存储服务,使用fuse3在Docker容器中挂载云存储服务时,需要在主机系统上启用共享挂载
- /dev/fuse:/dev/fuse
# host网络模式,端口为:19798,需要这个19798端口不被占用
network_mode: host
# 重启策略
restart: always
auto_symlink:
# 镜像地址
image: shenxianmq/auto_symlink:latest
# 容器名字
container_name: auto_symlink
# 主机名
hostname: auto_symlink
# 最高管理者root权限 #admin password
user: 0:0
# 环境配置
environment:
# 时区
- TZ=Asia/Shanghai
# 路径
volumes:
# cd2挂载云存储的目录,rslave 挂载点是私有的,宿主机上的挂载点不会传播到容器,同样容器中的挂载也不会传播到宿主机或其他容器
- /mnt/CloudNAS:/mnt/CloudNAS:rslave
# 生成Strm目录
- /mnt/Media/Strm:/mnt/Media/Strm
# 配置文件目录
- /mnt/docker/apps/auto_symlink/config:/app/config
# 备份目录
- /mnt/docker/apps/auto_symlink/backup:/app/backup
# 端口
ports:
# webUI端口:8095
- 8095:8095
# 重启策略
restart: always
amilys-emby:
# 镜像地址,如需测试版追新,latest更改为beta
# arm64v8设备使用 amilys/embyserver_arm64v8
image: amilys/embyserver:beta
# 容器名
container_name: amilys-emby
# 主机名
hostname: amilys-emby
# 特权模式,赋予容器几乎与主机相同的权限,给root即可,使用
privileged: true
environment:
# 时区
- TZ=Asia/Shanghai
# 最高权限,和上面特权模式重复,开一个就行
#- UID=0
#- GID=0
#- GIDLIST=0
# 更换为自己的http代理
# - ALL_PROXY=http://【IP:PORT】
# 更换为自己的http代理
# - HTTP_PROXY=http://【IP:PORT】
volumes:
# cd2挂载云存储的目录,rslave 挂载点是私有的,宿主机上的挂载点不会传播到容器,同样容器中的挂载也不会传播到宿主机或其他容器
- /mnt/CloudNAS:/mnt/CloudNAS:rslave
#cd2生成Strm目录,emby扫媒体文件
- /mnt/Media/Strm:/mnt/Media/Strm
# amilys-emby配置文件
- /mnt/docker/apps/amilys-emby:/config
# 驱动
devices:
# 开启硬件转码
- /dev/dri:/dev/dri
# 网络模式
network_mode: bridge
# 端口
ports:
# http webUI端口:8096,https webUI端口:8920
- 8096:8096
- 8920:8920
# 重启策略,总是重启
restart: always
embynginx:
# 镜像地址,反向代理
image: nginx:1.27.1
# 容器名
container_name: nginx-emby
# 主机名
hostname: nginx-emby
# 路径
volumes:
# nginx配置文件
- /mnt/docker/apps/embynginx/nginx.conf:/etc/nginx/nginx.conf
# emby缓存日志
- /mnt/docker/apps/embynginx/embyCache:/var/cache/nginx/emby
# nginx配置文件,反代需要修改constant.js、constant-mount.js、server-group.conf、constant-pro.js
- /mnt/docker/apps/embynginx/conf.d:/etc/nginx/conf.d
# 日志文件
- /mnt/docker/apps/embynginx/log:/var/log/nginx
# 网络模式
network_mode: bridge
# 端口
ports:
# 代理emby的8096webUI端口为:8091
- 8091:8091
# 重启策略,总是重启
restart: always
3 容器文件的配置
3.1 emby 文件的配置
首先是配置 emby,浏览器打开 http://192.168.x.x:8096,安装配置基础设置。
其次最重要的是生成一个 API KEY 给 302 反代备用。
3.2 alist 文件的配置
- 首先 alist,打开
http://192.168.x.x:5244,安装配置基础设置,默认账号 admin,密码在日志里面,有且只会出现一次。 - 其次最重要的是复制 alist API 给 302 反代备用。
- 再次,设置-全局,把签名所有关掉。
- 最后就是你需要挂载你的云存储,如果你是自有授权云存储,另一个云存储服务,123盘,天翼云这个官方教程很多。
注意:是否支持 302 转发取决于云存储服务自身策略,请以服务商文档为准。 - 但是如果你是 自有授权云存储,我建议你在用户脚本管理器里面安装一个不大助手,因为不同的端,我需要给不一样得 cookie,不然共用会抢登录。不大助手如图所示。
3.3 cd2 文件的配置
- 首先 cd2,打开
http://192.168.x.x:19798,需要你用邮箱注册一个账号并且登录上去。 - 其次,挂载云存储,如果是你的是另一个云存储服务,cd2 不支持,你只能套娃 alist,挂载 webdeav,挂载地址填写
192.168.x.x:5244/dav,然后就是 alist 账号密码。 - 如果你是 自有授权云存储我建议你用上面安装的不大助手获取一个与 alist 不同的 cookie 登陆上去。
- 最后,就是用cd2挂载云存储到本地磁盘路径。选择根目录,挂载点为
/mnt/CloudNAS/CloudDrive,云存储路径为 /,权限 777。 - 挂载好以后,可以去服务器检查一下,挂载的路径
/mnt/CloudNAS/CloudDrive,有没有文件,能不能读取到云存储文件。
4. 生成strm文件
4.1 登录
首先浏览器打开 http://192.168.x.x:8095,账号是admin,密码是password。
4.2 全局设置
其次进入全局设置,打开挂载检测,路径为 /mnt/CloudNAS/CloudDrive/ 云存储名字(选择你实际使用的云存储即可),如图所示设置。
4.3 添加同步
4.3.1 任务名称
随便写一个对应云存储名称就可以。
4.3.2 文件夹设置
- a 媒体目录
通过浏览的方式选择到你的媒体,最好路径全是英文,例如 /mnt/CloudNAS/CloudDrive/<云存储名称>/Media
截图里的云存储名称以我当时的测试环境为准,核心是确认挂载路径可以正常读取授权文件,索引文件生成逻辑是通用的。
- b 本地目录
本地目录说的是生存 strm 文件到哪里,按照我的目录是这样 /mnt/Media/Strm
4.3.3 掉盘检测
- 首先在电脑创建一个 测试 .txt 的文件,内容为 abcd123456,乱写一些。
- 其次将这个文件上传到云存储根目录。
- 文件路径就是这个你挂载到本地盘的路径,例如
/mnt/CloudNAS/CloudDrive/<云存储名称>/测试.txt - 文件链接就是这个测试 .txt 文件在 cd2 通过网页打开的浏览器链接 ,按你的实际云存储路径填写即可。
4.3.4 其他设置
同步开关,同步功能,清除功能就行,定时任务建议关闭,担心服务限制。
4.3.5 软连接配置
挂载类型选择 cd2,云端地址就是 cd2 地址 192.168.x.x:19798,cd2 根目录为/mnt/CloudNAS/CloudDrive,只要和我路径一样。如图所示,最后保存同步。
4.3.6 手动同步
害怕云存储服务限制,我建议手动同步,打开常用工具然后手动同步,选择同步模式同步线程 2,开始同步,如图所示。
如果你和我一样的路径一样的配置,这样就能愉快生成 strm 文件了。
5 添加 emby2nginx 反代
既然生成了strm文件,那么我们来弄 302 反代,打开那会儿我们上传的文件夹 conf.d和文件 nginx.conf。
5.1 文件一修改
路径为 /mnt/docker/apps/embynginx/conf.d/constant.js 修改以下参数。
5.2 文件二修改
路径为 /mnt/docker/apps/embynginx/conf.d/config/constant-mount.js 修改以下参数。
5.3 文件三修改
路径为 /mnt/docker/apps/embynginx/conf.d/includes/server-group.conf 修改以下参数
5.4 文件四修改
路径为 /mnt/docker/apps/embynginx/conf.d/config/constant-pro.js 修改以下参数,这个是替换播放地址前缀的关键步骤,具体值请按你使用的云存储名称填写。
保存配置文件,重启项目所有 docker。
6. 添加媒体库
首先我们打开 http://192.168.x.x:8091,这个就是反代的 emby 端口,添加媒体库。
其次 strm 是不能用浏览器观看的,所以你要么使用 windows emby 客户端,要么浏览器装用户脚本管理器+ embyToLocalPlayer 插件,要么使用手机,有 afusekt,yamby以及emby客户端观看。
7. 反代
你可以通过 lucky,nginx 或者 ddns 转发或者其他方式,转发 hhtp://192.168.x.x:8091 这个端口的 emby,就能够实现 302 反代。
8. 总结
云存储服务的可用性、吞吐和 302 支持情况会随官方策略调整,部署前请以最新官方文档为准。
只建议用于管理自己拥有合法使用权的媒体文件。
分享文章
生成精美分享图或复制链接,与更多人分享本文。