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

部署 AList
参考 AList 官方文档自行部署。
Docker Compose 文件参考如下:
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、开启启用签名、关闭保护重名。
在路径中填写:
/天翼云盘/bangumi
/OneDrive/bangumi
随后,这两个文件夹中的内容都会显示在 /bangumi 目录下。
为什么要用别名
假设我在不同网盘都存放了视频,但是一个个分别挂载太过麻烦,这时候别名功能就能让你把多个网盘的文件汇总在同一个文件夹下。
AutoFilm 自动生成 strm 文件供 Emby 刮削

部署 AutoFilm
参考 AutoFilm说明文档 | 秋澪的博客 部署。
Docker Compose 文件参考如下:
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 写入以下配置文件:
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 一把梭:
version: '3.1'
emby:
image: emby/embyserver:beta # 可自行修改
container_name: emby
volumes:
- ./data:/config # 持久化配置文件
- ./media:/media # 持久化媒体文件
restart: unless-stopped # 当容器停止时除非手动停止,自动重启
ports:
- 8096:8096 # Emby 默认端口
MediaWarp 是前置于 EmbyServer 的 反向代理服务器,修改了原版 EmbyServer 的 API 返回内容以实现特殊功能。

参考 MediaWarp说明文档 | 秋澪的博客 部署。
Docker Compose 文件参考如下:
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 写入以下配置文件:
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 应当就可以正常访问了。
这篇文章一开始是在三月份写的,但是考虑到原文中部分功能实际上大多数人用不到,所以简单改了下发到论坛来。
由于也过去了差不多半年,部分配置文件可能已经存在部分差别,对此仅供参考,请根据实际调整。
基于Emby N+1(自动入库新番、直链、AList、单点认证......) 最终解决方案修改。
首发于奶昔论坛,CC-BY-NC-SA 4.0 许可协议。