Emby 302 播放网盘影视
目录索引
通过 OpenList + go-emby2openlist + Emby,可以让 Emby 直接播放网盘中的影视资源。
整个方案的核心思路是:
- OpenList:挂载 115 网盘,并提供网盘文件访问能力。
- OpenList Strm:将网盘中的影视资源生成
.strm文件并保存到本地。 - go-emby2openlist:负责将 Emby 的播放请求转换为 OpenList 网盘直链,并通过 302 重定向返回给客户端。
- Emby:负责影视库管理、刮削、播放等功能。
- 115 网盘:负责实际存储影视资源。
准备工作
开始之前,需要准备以下环境:
- 115 网盘
- 飞牛 NAS、Linux 服务器,或者其他支持 Docker 的设备
- Docker / Docker Compose
- Emby
- OpenList
- go-emby2openlist
本文以飞牛 NAS + Docker + 115 网盘为例进行说明。
部署 OpenList
首先运行一个 OpenList Docker 实例, 以飞牛 NAS 为例:
- 打开 Docker 面板。
- 新增 Compose 项目。
- 项目名称填写
openlist,名称可以自行修改。 - 项目路径建议使用:
Docker/openlist如果目录不存在,可以自行创建,也可以选择其他目录。
- 选择「创建 docker-compose.yml」。
- 填入以下配置:
services: openlist: image: 'openlistteam/openlist:latest' container_name: openlist network_mode: host user: '0:0' volumes: - './data:/opt/openlist/data' - './strm:/strm' ports: - '5244:5244' environment: - UMASK=022 - TZ=Asia/Shanghai restart: always其他 Docker 环境部署方式基本相同。
如果使用 Linux,可以直接进入 OpenList 工作目录创建 docker-compose.yml,然后执行:
docker compose up -d获取 OpenList 管理员密码
OpenList 第一次启动后会生成初始管理员密码。
飞牛 NAS 可以直接在 Docker 面板查看容器运行日志。
Linux 可以执行:
docker logs -f openlist在日志中找到生成的管理员密码。
挂载 115 网盘
这里以 115 网盘为例。
- 使用
admin账户登录 OpenList。 - 进入「管理 → 存储」,添加存储。
- 驱动选择:
115网盘开放平台挂载路径填写:
/115也可以根据自己的习惯修改。
- 浏览器新建标签页访问:
- 网盘名称选择:
115网盘(OAuth2)跳转登录或者使用扫码登录。
- 按照页面提示完成 115 登录。
- 登录成功后点击「获取 Token」。
- 获取到以下两个参数:
访问令牌(Access Token)刷新令牌(Refresh Token)- 将这两个参数分别填写到 OpenList 的:
访问令牌刷新令牌建议同时勾选:
启用签名最后保存即可。
115 网盘目录结构
下面是我的 115 网盘目录结构:
115/media/剧集├── 华语剧集├── 外语剧集└── 动漫剧集
115/media/电影├── 华语电影├── 外语电影└── 动画电影
115/media/正在热播实际目录结构可以按照自己的媒体库习惯进行调整。
生成 Strm 文件
这里建议将不需要频繁更新的影视资源生成 Strm 文件并保存到本地。
例如:
- 电影
- 已完结剧集
- 已经整理完成的动漫
- 其他基本不会发生变化的资源
而对于仍在持续更新的剧集,则建议使用后面的 go-emby2openlist 自动生成 Strm。
这样可以避免每次网盘内容发生变化时,都需要重新生成大量 Strm 文件。
创建 OpenList Strm 存储
在 OpenList 中再次添加存储,驱动选择:
Strm1. 挂载路径
自定义一个与 /115 不重复的路径。
例如:
/strm-1152. 路径
填写需要生成 Strm 的 OpenList 路径。
例如:
/115/media/剧集3. 站点 URL
如果 OpenList 和 Emby 位于同一台设备,或者位于同一个局域网,可以填写 OpenList 的局域网访问地址。
例如:
http://192.168.0.254:5244如果 OpenList 与 Emby 部署在同一台设备,也可以根据实际网络环境填写对应地址。
4. 过滤文件类型
可以根据自己的需求添加视频文件后缀。
例如:
iso5. 编码路径
一般情况下可以不勾选。
6. 保存设置
建议勾选:
携带签名保存 Strm 到本地7. Strm 本地保存路径
填写:
/strm这里的 /strm 对应 Docker Compose 中的:
volumes: - './data:/opt/openlist/data' - './strm:/strm'因此,OpenList 容器中的 /strm 实际会映射到宿主机当前目录下的:
./strm8. 本地保存模式
第一次生成时建议选择:
更新等待所有 Strm 文件生成完成后,可以根据实际需求修改为:
同步OpenList 会自动将网盘中的资源逐步生成 Strm 文件并保存到本地。
go-emby2openlist
Go 语言编写的 Emby + OpenList(Alist)网盘直链反向代理服务,支持 OpenList 本地目录树生成以及网盘直链 302 重定向。
项目地址:
https://github.com/AmbitiousJun/go-emby2openlist
Docker 老手
如果熟悉 Docker,可以直接执行:
git clone --branch v2.8.2 --depth 1 https://github.com/AmbitiousJun/go-emby2openlistcd go-emby2openlist新手部署方式
如果不熟悉 Git,可以直接下载项目压缩包。
- 浏览器访问项目地址并下载 ZIP:
https://github.com/AmbitiousJun/go-emby2openlist/archive/refs/heads/main.zip
- 解压:
go-emby2openlist-main.zip- 将解压后的
go-emby2openlist-main文件夹上传到飞牛 NAS 用于 Docker Compose 的工作目录。
配置 go-emby2openlist
修改 config.yml
首先将:
config-example.yml重命名为:
config.yml编辑 config.yml
即使此时 Emby 还没有启动,也可以先修改:
host: http://127.0.0.1:8096mount-path: /media其中:
host为 Emby 的访问地址。
mount-path为 Emby 容器内部挂载媒体目录的路径。
path-map
继续配置:
path-map: - http://192.168.0.254:5244 => http://127.0.0.1:5244internal-redirect-enable: true这里的作用是进行地址转换。
前面的:
http://192.168.0.254:5244是 OpenList Strm 文件中使用的地址。
后面的:
http://127.0.0.1:5244则是本机可以访问 OpenList 的地址。
如果不希望客户端直接访问 OpenList,而是由 go-emby2openlist 在服务端内部完成访问,可以开启:
internal-redirect-enable: true具体是否开启,需要根据自己的网络结构决定。
OpenList 配置
找到:
# openlist 访问配置openlist: host: http://127.0.0.1:5244 token: openlist-xxxxx local-tree-gen: enable: true virtual-containers: strm-containers: mp4,mkv,flv,ts,rmvb scan-prefixes: - /115/media/正在热播这里不需要直接复制整段配置,主要修改以下几个参数。
host
host: http://127.0.0.1:5244OpenList 的访问地址。
由于 OpenList 和 go-emby2openlist 都使用 host 网络模式,因此在同一台设备上可以直接使用:
127.0.0.1token
token: openlist-xxxxx这里填写 OpenList 的 API Token。
登录 OpenList 管理后台后,在:
设置 → 其他 → Token中获取。
local-tree-gen.enable
enable: true如果希望使用 go-emby2openlist 自动生成和更新 Strm 文件,则设置为:
enable: true如果不需要此功能,则设置为:
enable: falsescan-prefixes
scan-prefixes: - /115/media/正在热播用于指定需要生成 Strm 的 OpenList 目录。
这里非常推荐将仍在持续更新的影视目录交给 go-emby2openlist 管理。
例如:
/115/media/正在热播这样新剧集上传到网盘后,可以自动生成对应的 Strm 文件。
virtual-containers
建议删除内容,保持为空:
virtual-containers:strm-containers
用于指定需要处理的视频文件后缀:
strm-containers: mp4,mkv,flv,ts,rmvb可以根据自己的媒体文件类型进行调整。
path 配置
找到:
path: emby2openlist: - /media:/115/media一般情况下这里不需要修改。
其中:
/media是 Emby 容器中的媒体挂载路径。
而:
/115/media是 OpenList 中实际对应的网盘路径。
简单理解就是:
Emby /media ↓OpenList /115/mediaDocker Compose
修改 docker-compose.yml。
如果不熟悉 Docker,可以直接使用下面的配置。
这里需要注意:网络模式必须使用 host。
services: go-emby2openlist: build: context: . dockerfile: Dockerfile environment: - TZ=Asia/Shanghai - GIN_MODE=release container_name: go-emby2openlist network_mode: host restart: always volumes: - ./config.yml:/app/config.yml - ./strm:/app/openlist-local-tree ports: - 8095:8095Linux 进入项目目录后执行:
docker compose up -d即可启动。
飞牛 NAS
在飞牛 Docker 面板中:
- 进入「Compose」。
- 新增项目。
- 项目路径选择刚才上传的
go-emby2openlist-main。 - 勾选「创建项目后立即启动」。
- 点击「确认」。
Emby
接下来部署 Emby。
Emby 的 Docker 部署方式与前面的 OpenList 基本一致。
由于 OpenList 和 go-emby2openlist 都使用 host 网络模式,因此这里也推荐 Emby 使用 host 网络模式。
如果对 Docker 网络比较熟悉,也可以自行改成 bridge 模式。
Emby 镜像
本文示例使用 ARM64 平台。
image: amilys/embyserver_arm64v8:4.8.10.0如果使用 x86_64 平台,则替换为:
image: amilys/embyserver:4.8.10.0这里使用 4.8.10.0,主要是因为神医助手社区版目前最高支持该版本。
如果使用的是捐赠版,则可以根据实际兼容情况使用更新版本的 Emby。
另外,由于本方案使用的是 Strm + 302 重定向播放,播放本身并不依赖 Emby Premiere。
Emby Docker Compose
下面以 ARM64 平台为例:
services: emby: image: amilys/embyserver_arm64v8:4.8.10.0 container_name: emby restart: always network_mode: host privileged: true ports: - 8096:8096 environment: - TZ=Asia/Shanghai - HTTP_PROXY=http://127.0.0.1:7890 - HTTPS_PROXY=http://127.0.0.1:7890 - ALL_PROXY=http://127.0.0.1:7890 volumes: - ./config:/config - /vol1/1000/Docker/go-emby2openlist/strm/115/media:/playing - /vol1/1000/Docker/openlist/strm:/media如果不需要代理,可以删除:
- HTTP_PROXY=http://127.0.0.1:7890- HTTPS_PROXY=http://127.0.0.1:7890- ALL_PROXY=http://127.0.0.1:7890这里添加代理主要是为了方便 Emby 访问 TMDB 等刮削服务。
具体代理 IP 和端口需要根据自己的环境修改。
Emby 媒体目录映射
重点看下面两个目录:
- /vol1/1000/Docker/go-emby2openlist/strm/115/media:/playing- /vol1/1000/Docker/openlist/strm:/media/playing
前面的:
/vol1/1000/Docker/go-emby2openlist/strm/115/media是 go-emby2openlist 自动生成的 Strm 文件目录。
后面的:
/playing是 Emby 容器内部的目录。
也就是:
go-emby2openlist ↓宿主机 Strm ↓Emby /playing/media
前面的:
/vol1/1000/Docker/openlist/strm是 OpenList 生成并保存到本地的 Strm 文件目录。
后面的:
/media是 Emby 容器内部的媒体目录。
最终 Emby 中可以看到:
/media/playing两个媒体目录。
启动 Emby
启动 Emby 后,访问:
http://你的NAS地址:8096按照向导完成初始化。
添加媒体库时,选择前面映射到容器中的:
/media以及:
/playing完成初始化后,建议重启一次 go-emby2openlist 容器,确保 Emby 与 OpenList 的相关配置已经正常加载。
测试 302 播放
全部服务启动后,可以查看:
go-emby2openlist的容器日志。
然后使用 Emby 客户端访问:
http://NAS地址:8095此时应该可以正常进入 Emby。
打开网盘中的影视资源进行播放。
如果配置正确,go-emby2openlist 日志中会出现类似:
[SUCCESS] 重定向 strm: https://xxx?xxx这里的:
https://xxx?xxx就是 OpenList 获取到的网盘直链。
Emby 不需要自己下载或者转发整个视频文件,而是通过 302 Redirect 将播放请求重定向到网盘直链。
最终数据流大致为:
Emby 客户端 ↓Emby ↓go-emby2openlist ↓OpenList ↓115 网盘 ↓获取网盘直链 ↓302 Redirect ↓Emby 客户端 ↓直接播放这样可以避免 NAS 服务器承担完整的视频流量转发。
总结
整个方案可以简单理解为:
┌──────────────┐ │ 115 网盘 │ └──────┬───────┘ │ ↓ ┌──────────────┐ │ OpenList │ └──────┬───────┘ │ ┌─────────────┴─────────────┐ │ │ ↓ ↓ 已完结/稳定资源 正在更新资源 │ │ ↓ ↓ OpenList Strm go-emby2openlist │ │ └─────────────┬─────────────┘ ↓ Emby │ ↓ Emby 客户端 │ ↓ 302 重定向播放 │ ↓ 115 直链核心策略就是:
不经常更新的资源
例如:
电影已完结剧集已经整理完成的动漫使用 OpenList Strm 生成 Strm,并保存到本地。
这样可以减少重复扫描和 Strm 重新生成。
正在更新的资源
例如:
正在热播连载中的电视剧连载中的动漫使用 go-emby2openlist 自动扫描并生成 Strm。
这样网盘中新增加一集内容后,可以自动更新到 Emby 媒体库。
最终,Emby 负责:
媒体库刮削海报字幕播放界面用户管理OpenList 负责:
网盘挂载获取文件生成网盘直链go-emby2openlist 则负责:
Emby 播放请求 ↓识别 Strm ↓调用 OpenList ↓获取网盘直链 ↓302 重定向因此整个过程中,NAS 主要承担媒体库管理和请求处理,实际的视频数据可以直接从 115 网盘传输到客户端。