基于网盘302的emby方案

FOXBALL-ONE Lv1

最近从网上拿到了点兔的2106p的视频资源,总计60g。手机256g的空间经不起霍霍,家里的pve服务器有上传QOS风险(已经被电信标记为上传高危用户,触发后只能手动找运维解除)。然后就在想能不能丢到网盘上面,用emby去播放。

于是就去谷歌搜索了一下,发现有现成的方案,然后就基于这些方案搓了出来。理论上所有网盘通用

事先声明:被封号了不管我的事,自行承担后果。(毕竟是薅羊毛+涉及滥用)。115和123有专门的支持,推荐这两个

阅读本文需要有一定的 Docker 基础知识,了解什么是容器、镜像、卷、网络等概念,并且能够使用 Docker 命令行工具进行基本的操作。推荐文档:https://201.ustclug.org/

1. 安装 OpenList

作为 Alist 的继任者,这套方案的核心就是利用 OpenList 去获取到视频文件的直连地址。如果已经安装好了可以跳过此步骤。

安装好之后请自行添加网盘,webdav 策略默认使用 302 方式(如果网盘有限制可以改为代理试试)

2. 安装 AutoFilm

得先说明 STRM 文件是什么:STRM 文件是一个文本文件,里面存储了视频文件的地址,emby 可以通过读取这个文件来获取视频的地址。而 AutoFilm 就是一个可以自动生成 STRM 文件的工具。

Docker 安装

1
2
3
4
5
6
7
8
9
docker run -d \
--name autofilm \
--restart unless-stopped \
--network host \
-v /yourpath/autofilm/config:/config \ # 挂载配置目录
-v /yourpath/autofilm/logs:/logs \ # 挂载日志目录,可选
-v /yourpath/autofilm/strm:/strm \ # 挂载 STRM 生成目录
# 以上 /yourpath 改为你实际存放配置的路径
akimio/autofilm

配置文件

config 的编写请参考项目的示例文件,我这里提供一个我自己的配置文件,供参考。

注意:

  • 必须要让容器能连接到 OpenList
  • cron 表达式只支持到分钟级别,我提供的配置是每个小时的第 51 分钟的时候执行一次
  • 如果想要多个扫描任务就取消掉下面的注释,按照 YAML 格式添加即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Settings:
DEV: True # 开发者模式(可选,默认 False)

Alist2StrmList:
- id: 动漫 # 标识 ID
cron: 51 * * * * # 后台定时任务 Cron 表达式
url: http://127.0.0.1:5244 # Alist 服务器地址
public_url: http://127.0.0.1:5244 # 公共访问地址,用于 AlistURL 模式生成 .strm 文件内容(可选,默认使用 url)
username: # Alist 用户名
password: # Alist 密码
token: # Alist Token 永久令牌(可选,使用永久令牌则无需设置账号密码)
source_dir: /111/bangumi # Alist 服务器上文件夹路径
target_dir: /strm/bangumi # 输出路径(这里是容器内的地址)
flatten_mode: False # 平铺模式,开启后 subtitle、image、nfo 强制关闭(可选,默认 False)
subtitle: True # 是否下载字幕文件(可选,默认 False)
image: True # 是否下载图片文件(可选,默认 False)
nfo: True # 是否下载 .nfo 文件(可选,默认 False)
mode: AlistPath # Strm 文件中的内容(可选项:AlistURL、RawURL、AlistPath)
overwrite: True # 覆盖模式,本地路径存在同名文件时是否重新生成/下载该文件(可选,默认 False)
sync_server: True # 是否同步服务器(可选,默认为 True)
sync_ignore: \.(nfo|jpg)$ # 同步时忽略的文件正则表达式(可选,默认为空,仅对文件名及拓展名有效,对路径无效)
smart_protection: # 智能保护,防止 Alist 故障导致的大量删除(可选)
enabled: True # 启用保护(默认:False)
threshold: 100 # 触发保护的文件数量阈值(默认:100)
grace_scans: 3 # 删除前需要的扫描次数(默认:3)
other_ext: # 自定义下载后缀,使用西文半角逗号进行分割,(可选,默认为空)
max_workers: 50 # 最大并发数,减轻对 Alist 服务器的负载(可选,默认 50)
max_downloaders: 5 # 最大同时下载文件数(可选,默认 5)
wait_time: 0 # 遍历请求间隔时间,避免被风控,单位为秒,默认为 0

# - id: 电影 # 标识 ID
# cron: 51 * * * * # 后台定时任务 Cron 表达式
# url: http://127.0.0.1:5244 # Alist 服务器地址
# public_url: http://127.0.0.1:5244 # 公共访问地址,用于 AlistURL 模式生成 .strm 文件内容(可选,默认使用 url)
# username: # Alist 用户名
# password: # Alist 密码
# token: # Alist Token 永久令牌(可选,使用永久令牌则无需设置账号密码)
# source_dir: /111/bangumi # Alist 服务器上文件夹路径
# target_dir: /media/bangumi # 输出路径
# flatten_mode: False # 平铺模式,开启后 subtitle、image、nfo 强制关闭(可选,默认 False)
# subtitle: True # 是否下载字幕文件(可选,默认 False)
# image: True # 是否下载图片文件(可选,默认 False)
# nfo: True # 是否下载 .nfo 文件(可选,默认 False)
# mode: AlistPath # Strm 文件中的内容(可选项:AlistURL、RawURL、AlistPath)
# overwrite: True # 覆盖模式,本地路径存在同名文件时是否重新生成/下载该文件(可选,默认 False)
# sync_server: True # 是否同步服务器(可选,默认为 True)
# sync_ignore: \.(nfo|jpg)$ # 同步时忽略的文件正则表达式(可选,默认为空,仅对文件名及拓展名有效,对路径无效)
# smart_protection: # 智能保护,防止 Alist 故障导致的大量删除(可选)
# enabled: True # 启用保护(默认:False)
# threshold: 100 # 触发保护的文件数量阈值(默认:100)
# grace_scans: 3 # 删除前需要的扫描次数(默认:3)
# other_ext: # 自定义下载后缀,使用西文半角逗号进行分割,(可选,默认为空)
# max_workers: 50 # 最大并发数,减轻对 Alist 服务器的负载(可选,默认 50)
# max_downloaders: 5 # 最大同时下载文件数(可选,默认 5)
# wait_time: 0 # 遍历请求间隔时间,避免被风控,单位为秒,默认为 0

需要自行修改的部分有

1
2
3
4
5
6
7
8
9
- id: 动漫                                # 标识 ID
cron: 51 * * * * # 后台定时任务 Cron 表达式
url: http://127.0.0.1:5244 # Alist 服务器地址
public_url: http://127.0.0.1:5244 # 公共访问地址,用于 AlistURL 模式生成 .strm 文件内容(可选,默认使用 url)
username: # Alist 用户名
password: # Alist 密码
token: # Alist Token 永久令牌(可选,使用永久令牌则无需设置账号密码)
source_dir: /111/bangumi # Alist 服务器上文件夹路径
target_dir: /strm/bangumi # 输出路径(这里是容器内的地址)

3. 安装 Emby 并添加媒体库

安装好 emby 之后,添加一个媒体库,路径指向 /media/strm

1
2
3
4
5
6
7
8
docker run -d \
--name emby \
--network host \
-v /yourpath/emby/data:/config \
-v /yourpath/emby/media:/media/strm \ # 这里是STRM文件的挂载路径,和上面AutoFilm的/yourpath/autofilm/strm一致
-p 8096:8096 \
--restart unless-stopped \
emby/embyserver:beta

4. 安装 MediaWarp

  • 项目地址:https://github.com/AkimioJR/MediaWarp
  • 项目简介:MediaWarp 是前置于 EmbyServer/Jellyfin/飞牛影视 的反向代理服务器,修改了原媒体服务器返回响应以实现特殊功能

Docker 安装

1
2
3
4
5
6
7
8
9
docker run -d \
--name MediaWarp \
--restart unless-stopped \
--network host \
-v /yourpath/mediawarp/config:/config \ # 挂载配置目录
-v /yourpath/mediawarp/logs:/logs \ # 挂载日志目录,可选
-v /yourpath/mediawarp/static:/static \
# 以上 /yourpath 改为你实际存放配置的路径
akimio/mediawarp:0.2.0

配置文件

注意:

  • alist_strm 的 prefix_list 跟上面 autofilm 的 target_dir 要对应上(通常匹配到最开始的目录就好了,例如 target_dir 是 /aaa/bbb,prefix_list 可以填写 /aaa 或者 /aaa/bbb)
  • openlist 凭据那里使用 token 或者账号密码都可以,推荐专门开一个账号并且限制文件访问,安全性更高一些
  • mediawarp访问emby是通过api接口的方式,所以先安装emby,然后去生成一个api key给mediawarp使用,填写在配置文件里server.auth那里
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
port: 9000                                  # MideWarp 监听端口

server: # 媒体服务器相关设置
type: Emby # 媒体服务器类型(可选选项:Emby、Jellyfin、 FNTV)
addr: http://127.0.0.1:8096 # 媒体服务器地址(FNTV默认端口号为8005而不是5666)
auth: # 媒体服务器认证方 # 媒体服务器认证方式(FNTV不需要这一项)

log: # 日志设定
access: # 访问日志设定
console: true # 是否将访问日志文件输出到终端中
file: true # 是否将访问日志文件记录到文件中
service: # 服务日志设定
console: true # 是否将服务日志文件输出到终端中
file: true # 是否将服务日志文件记录到文件中

# ttl 格式说明:
# 有效的时间单位包括 "ns"(纳秒)、"us"(或 "µs",微秒)、"ms"(毫秒)、"s"(秒)、"m"(分钟)、"h"(小时)
# 支持的时间格式示例:"300ms"、"-1.5h" 或 "2h45m" 等
# 仅当值大于 0 时生效,否则表示禁用该项缓存
# 如果你不清楚你在做什么,建议保持默认设置
cache: # 缓存相关设置
enable: true # 是否启用 HTTPStrm 重定向内存缓存
http_strm_ttl: 1m # 重定向缓存有效期(当启用 http_strm 中的 final_url 配置项时才生效)
alist_api_ttl: 10m # Alist API 缓存有效期
image_ttl: 10m # 图片缓存有效时间
subtitle_ttl: 2h # 字幕缓存有效时间

web: # Web 页面修改相关设置(FNTV 不支持)
enable: true # 总开关
custom: true # 是否加载自定义静态资源
index: false # 是否从 custom 目录读取 index.html 文件
head: | # 是否添加自定义字段到 index.html 的头部中
<script src="/MediaWarp/custom/emby-front-end-mod/actor-plus.js"></script>
<script src="/MediaWarp/custom/emby-front-end-mod/emby-swiper.js"></script>
<script src="/MediaWarp/custom/emby-front-end-mod/emby-tab.js"></script>
<script src="/MediaWarp/custom/emby-front-end-mod/fanart-show.js"></script>
<script src="/MediaWarp/custom/emby-front-end-mod/playbackRate.js"></script>

robots: | # 自定义 robots.txt,若为空表示不修改
User-agent: *
Disallow: /

crx: false # crx 美化(Emby:https://github.com/Nolovenodie/emby-crx;Jellyfin:https://github.com/newday-life/jellyfin-crx)
actor_plus: false # 过滤没有头像的演员和制作人员
fanart_show: false # 显示同人图(fanart 图)
external_player_url: false # 是否开启外置播放器(仅 Emby)
danmaku: false # Web 弹幕(Emby:https://github.com/9channel/dd-danmaku;Jellyfin:https://github.com/Izumiko/jellyfin-danmaku)
video_together: false # 共同观影,详情见 https://videotogether.github.io/

client: # 客户端过滤器
enable: false # 是否启用客户端过滤器
mode: BlackList # WhileList / BlackList # 黑白名单模式
list: # 名单列表
- Fileball
- Infuse

http_strm: # HTTPStrm 相关配置(Strm 文件内容是 标准 HTTP URL)
enable: true # 是否开启 HttpStrm 重定向
proxy: false # 是否允许流量经过媒体服务器(true: 允许串流、转码行为;false: 仅支持直接播放)FNTV无效
final_url: true # 对 URL 进行重定向判断,找到非重定向地址再重定向给客户端,减少客户端重定向次数(适用于 Strm 内容是局域网地址但是想要在公网之中播放)
compatibility_mode: true # 兼容模式,开启后将使用更兼容但效率较低的方式获取最终 URL
prefix_list: # 媒体服务器中 Strm 文件的前缀(符合该前缀的 Strm 文件且被正确识别为 HTTP 协议都会路由到该规则下)
- /media/strm/http
- /media/strm/https

alist_strm: # AlistStrm 相关配置(Strm 文件内容是 Alist 上文件的路径,目前仅支持适配 Alist V3)
enable: true # 是否启用 AlistStrm 重定向
proxy: false # 是否允许流量经过媒体服务器(true: 允许串流、转码行为;false: 仅支持直接播放)FNTV无效
raw_url: true # Fasle:响应 Alist 服务器的直链(要求客户端可以访问到 Alist) true:直接响应 Alist 上游的真实链接(alist api 中的 raw_url 属性)
list: # Alist 服务关配置列表
- addr: http://127.0.0.1:5244 # Alist 服务器地址
token:
prefix_list: #媒体服务器中 Strm 文件的前缀(符合该前缀的 Strm 文件都会路由到该下)
- /media # 同一个Alist可以有多个前缀规则
- /media/dramas

subtitle: # 字体相关设置(仅 Emby 支持)
enable: true # 启用
art2ass: true # SRT 字幕转 ASS 字幕
ass_style: # SRT 字幕转 ASS 字幕使用的样式
- "Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding"
- "Style: Default,楷体,20,&H03FFFFFF,&H00FFFFFF,&H00000000,&H02000000,-1,0,0,0,100,100,0,0,1,1,0,2,10,10,10,1"

需要自行修改的地方有:

1
2
3
4
5
6
list:                                     # Alist 服务关配置列表
- addr: http://127.0.0.1:5244 # Alist 服务器地址
token:
prefix_list: #媒体服务器中 Strm 文件的前缀(符合该前缀的 Strm 文件都会路由到该下)
- /media # 同一个Alist可以有多个前缀规则
- /media/dramas
1
2
3
4
server:                                     # 媒体服务器相关设置
type: Emby # 媒体服务器类型(可选选项:Emby、Jellyfin、 FNTV)
addr: http://127.0.0.1:8096 # 媒体服务器地址(FNTV默认端口号为8005而不是5666)
auth: # 媒体服务器认证方 # 媒体服务器认证方式(FNTV不需要这一项)

5.问 MediaWarp 的监听端口,看看能不能正常播放。如果不能播放,请查看日志来进行排障。

注意:

  • 要求 OpenList 能被 AutoFilm 和 MediaWarp 访问,MediaWarp 能访问到 Emby。
  • 如果发现PlaybackInfo接口耗时过长,请检查网盘设置,这跟autofilm和mediawarp没有关系,请勿去对应的仓库提交issue。

以下是路径关系的简单解释(涉及到 Docker 的目录映射,这方面请自行学习和理解):

  1. OpenList 中视频文件的路径为 /aaa/bbb/ccc.mkv,那么在 AutoFilm 配置文件中 Alist2StrmListsource_dir 就是 /aaa/bbb
  2. AutoFilm 中生成的 target_dir 目录是生成出 strm 文件的地方,需要映射进 Emby 容器内,能让 Emby 读取到这些 strm 文件。
  3. MediaWarp 中的 prefix_list 是以 Emby 容器内的目录为基准,容器内 strm 的目录是 /media/strm/http,那么 prefix_list 内就写 /media 或者 /media/strm,要写到 strm 的上一级文件夹。

参考资料

感谢以下作者的分享与贡献:

  1. Emby N+1(自动入库新番、直链、AList、单点认证……) 最终解决方案
  2. MediaWarp说明文档
  3. AutoFilm说明文档
  • 标题: 基于网盘302的emby方案
  • 作者: FOXBALL-ONE
  • 创建于 : 2026-02-28 23:11:14
  • 更新于 : 2026-04-01 10:49:10
  • 链接: https://blog.utf-8.fun/2026/02/28/基于网盘302的emby方案/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论