Emby + Alist + AutoFilm + MediaWarp 实现网盘直链播放
最近给某个群内搭建了 Emby 媒体服务器作为群服务提供,中间因为各种原因踩了大大小小的坑,最后才有了这篇文章。## 目录:
- AList + 网盘挂载
- AutoFilm 自动生成 strm 文件供 Emby 刮削
- 部署 Emby 服务端
- MediaWarp + Emby 向客户端返回网盘直链作为播放链接
## AList + 网盘挂载

### 部署 AList
参考 (https://alist.nn.ci/zh/guide/install/manual.html)自行部署。
Docker Compose 文件参考如下:
```yaml
version: '3.3'
services:
alist:
image: 'xhofe/alist:beta'
container_name: alist
volumes:
- '/etc/alist:/opt/alist/data'
ports:
- '5244:5244'
environment:
- PUID=0
- PGID=0
- UMASK=022
restart: unless-stopped
```
### 挂载网盘
假设我已经分别挂载了天翼云盘和 OneDrive,且他们都有 `bangumi` 这个文件夹。
那么我们可以使用**别名**功能,选择添加存储 - 别名,设置挂载路径为 `/bangumi`、**开启启用签名、关闭保护重名**。
在路径中填写:
```text
/天翼云盘/bangumi
/OneDrive/bangumi
```
随后,这两个文件夹中的内容都会显示在 `/bangumi` 目录下。
**为什么要用别名**
假设我在不同网盘都存放了视频,但是一个个分别挂载太过麻烦,这时候别名功能就能让你把多个网盘的文件汇总在同一个文件夹下。
## AutoFilm 自动生成 strm 文件供 Emby 刮削

### 部署 AutoFilm
参考 (https://blog.akimio.top/posts/1031/) 部署。
Docker Compose 文件参考如下:
```yaml
version: '3.1'
services:
autofilm:
restart: always
volumes:
- ./autofilm_config:/config # AutoFilm 配置文件存放位置
- ./media:/media # .strm 文件存放位置
- ./autofilm_logs:/logs # AutoFilm 日志存放位置
container_name: autofilm
image: akimio/autofilm:latest
```
在 `./autofilm_config/config.yaml` 写入以下配置文件:
```yaml
Settings:
DEV: False # 开发者模式(可选,默认 False)
Alist2StrmList:
- id: 动漫 # 标识 ID
cron: 0 * * * * # 后台定时任务 Crontable 表达式
url: http://alist:5244 # Alist 服务器地址
username: alist # Alist 用户名
password: alist # Alist 密码
# token: alist-d22d23ddf42fvv2 # Alist Token 永久令牌(可选,使用永久令牌则无需设置账号密码)
source_dir: /bangumi/ # Alist 服务器上文件夹路径
target_dir: /media/bangumi/ # 输出路径
flatten_mode: False # 平铺模式,开启后 subtitle、image、nfo 强制关闭(可选,默认 False)
subtitle: True # 是否下载字幕文件(可选,默认 False)
image: False # 是否下载图片文件(可选,默认 False)
nfo: False # 是否下载 .nfo 文件(可选,默认 False)
raw_url: False # 是否使用原始地址替换 Alist 服务器下载地址(可选,默认 False)
overwrite: False # 覆盖模式,本地路径存在同名文件时是否重新生成/下载该文件(可选,默认 False)
sync_server: True # 是否同步服务器(可选,默认为 True)
sync_ignore: \.(nfo|jpg)$ # 同步时忽略的文件正则表达式(可选,默认为空,仅对文件名及拓展名有效,对路径无效)
max_workers: 2 # 下载文件最大并发数(可选,默认 5)
max_downloaders: 2 # 下载文件最大并发数(可选,默认 5)
mode: AlistPath # 下载模式(可选项:AlistPath、AlistFile、AlistList,默认 AlistPath)
```
需要注意的点:
- `mode` 请填写 `AlistPath`,因为可以**配合下面的 MediaWarp 使用**。
- `cron` 不能填写 `* * * * *`,所以你不能一分钟刷新一次。
随后,定时任务执行后,`./media` 文件夹下应当已经生成了 `.strm` 文件。
## 部署 Emby 服务端
Docker Compose 一把梭:
```yml
version: '3.1'
emby:
image: emby/embyserver:beta # 可自行修改
container_name: emby
volumes:
- ./data:/config# 持久化配置文件
- ./media:/media# 持久化媒体文件
restart: unless-stopped# 当容器停止时除非手动停止,自动重启
ports:
- 8096:8096 # Emby 默认端口
```
## MediaWarp 向客户端返回网盘直链作为播放链接
MediaWarp 是**前置于 EmbyServer 的 反向代理服务器**,修改了原版 EmbyServer 的 API 返回内容以实现特殊功能。

### 部署 MediaWarp
参考 (https://blog.akimio.top/posts/1041/) 部署。
Docker Compose 文件参考如下:
```yml
version: '3.1'
services:
mediawarp:
image: akimio/mediawarp:latest
container_name: mediawarp
restart: unless-stopped
volumes:
- ./mediawarp_config:/config
- ./mediawarp_logs:/logs
- ./static:/static
ports:
- 9000:9000
```
在 `./autofilm_config/config.yaml` 写入以下配置文件:
```yaml
Port: 9000 # MideWarp监听端口
MediaServer: # 媒体服务器相关设置
Type: Emby # 媒体服务器类型(可选选项:Emby)
ADDR: http://emby:8096 # 媒体服务器地址
AUTH: authkey # 媒体服务器认证方式
Cache: # 缓存设置
Type: Memory # 缓存类型(可选项:Memory内存缓存)
WebCache: False # 是否启用Web缓存中间件(若MdiaWarp离上游服务距离较近则不建议启用)
Logger: # 日志设定
AccessLogger: # 访问日志设定
Console: True # 是否将访问日志文件输出到终端中
File: False # 是否将访问日志文件记录到文件中
ServiceLogger: # 服务日志设定
Console: True # 是否将服务日志文件输出到终端中
File: True # 是否将服务日志文件记录到文件中
Web: # Web页面修改相关设置
Enable: True # 总开关
Custom: True # 是否加载自定义静态资源
Index: false # 是否从static目录读取index.html文件
Head: | # 是否添加自定义字段到index.html的HEAD中
<script src="/MediaWarp/static/custom/emby-front-end-mod/actor-plus.js"></script>
<script src="/MediaWarp/static/custom/emby-front-end-mod/emby-swiper.js"></script>
<script src="/MediaWarp/static/custom/emby-front-end-mod/emby-tab.js"></script>
<script src="/MediaWarp/static/custom/emby-front-end-mod/fanart-show.js"></script>
<script src="/MediaWarp/static/custom/emby-front-end-mod/playbackRate.js"></script>
ExternalPlayerUrl: True # 是否开启外置播放器
ActorPlus: false # 过滤没有头像的演员和制作人员
FanartShow: True # 显示同人图(fanart图)
Danmaku: True # Web显示弹幕
VideoTogether: False # 共同观影,详情见 https://videotogether.github.io/
BeautifyCSS: True # Emby美化CSS样式
ClientFilter: # 客户端过滤器
Enable: False # 是否启用客户端过滤器
Mode: BlackList # WhileList / BlackList # 黑白名单模式
ClientList: # 名单列表
- Fileball
- Infuse
# 302重定向相关配置
HTTPStrm:
Enable: False # 是否开启HttpStrm重定向
TransCode: True # False:强制关闭转码 True:保持原有转码设置
PrefixList: # EmbyServer中Strm文件的前缀(符合该前缀的Strm文件且被正确识别为http协议都会路由到该规则下)
- /media/strm/http
- /media/strm/https
AlistStrm: # AlistStrm相关配置(Strm文件内容是Alist上文件的路径,目前仅支持适配Alist V3)
Enable: True # 是否启用AlistStrm重定向
TransCode: False # False:强制关闭转码 True:保持原有转码设置
RawURL: True # Fasle:直接响应 Alist 上游的真实链接 True:响应 Alist 服务器的直链(要求客户端可以访问到 Alist)
List: # Alist服务关配置列表
- ADDR: http://1Panel-alist-fvbK:5244 # Alist服务器地址
Token: AlistToken# Alist Token
PrefixList: # EmbyServer中Strm文件的前缀(符合该前缀的Strm文件都会路由到该规则下)
- /media/bangumi # 同一个Alist可以有多个前缀规则
- /media/movies
- /media/dramas
Subtitle: # 字体相关设置
Enable: True # 启用
SRT2ASS: False # SRT 字幕转 ASS 字幕
ASSStyle: # 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"
```
其中,`MediaServer` 的 `authkey` 可以在 **Emby 管理后台 - 高级 - API 密钥** 获取。
## 后记
此时访问服务器 IP:9000 应当就可以正常访问了。
这篇文章一开始是在三月份写的,但是考虑到原文中部分功能实际上大多数人用不到,所以简单改了下发到论坛来。
由于也过去了差不多半年,部分配置文件可能已经存在部分差别,对此仅供参考,请根据实际调整。
---
基于(https://blog.byteloid.one/2025/03/23/emby-all-in-one-solution]https://blog.byteloid.one/2025/03/23/emby-all-in-one-solution)修改。
首发于奶昔论坛,CC-BY-NC-SA 4.0 许可协议。 很有用的内容但是建议换openlist( SatoHideki 发表于 2025-9-30 00:20
很有用的内容但是建议换openlist(
+1 换openlist放心些 alist不知道有没有投毒,好多奶友都说改openlist 这个alist可以改成openlist吗,我看他们好像是一个东西... 不同分支? 感觉openlist会好点 非常棒的教程,就是alist现在不太敢用了 openlist适用吗 牛啊 alist已经不是原来的alist了 又是学到技术的一天 好高级!学习下 +1 换openlist AList 不是被卖了吗?还安全吗? 一个浏览器扩展脚本就能做到播放的事情,为啥要搞这么复杂啊? 牛逼刮削的影片信息用什么比较好? Alist好像被一个之前投过毒的公司收购了 直接 list,管他哪个,alist不更新就好了,挂载云盘,网易爆米花刮削的蛮好,搜索也很好用,没必要那么麻烦了,infuse也买了,刮削太可怕,设置不好,播放是比其他成熟,比较好 感谢佬分享
页:
[1]