Bingxin 发表于 2025-9-30 00:02:40

Emby + Alist + AutoFilm + MediaWarp 实现网盘直链播放

最近给某个群内搭建了 Emby 媒体服务器作为群服务提供,中间因为各种原因踩了大大小小的坑,最后才有了这篇文章。

## 目录:
- AList + 网盘挂载
- AutoFilm 自动生成 strm 文件供 Emby 刮削
- 部署 Emby 服务端
- MediaWarp + Emby 向客户端返回网盘直链作为播放链接

## AList + 网盘挂载

![实现流程图](https://pic.r2.byteloid.one/2025-3-23-2.webp)

### 部署 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 刮削

![实现流程图](https://pic.r2.byteloid.one/2025-3-23-1.webp)

### 部署 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 返回内容以实现特殊功能。

![实现流程图](https://pic.r2.byteloid.one/2025-3-23-4.webp)

### 部署 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 许可协议。

SatoHideki 发表于 2025-9-30 00:20:54

很有用的内容但是建议换openlist(

xian 发表于 2025-9-30 00:38:11

SatoHideki 发表于 2025-9-30 00:20
很有用的内容但是建议换openlist(

+1 换openlist放心些

nyarime 发表于 2025-9-30 01:29:21

alist不知道有没有投毒,好多奶友都说改openlist

pbby 发表于 2025-9-30 01:41:25

这个alist可以改成openlist吗,我看他们好像是一个东西... 不同分支?

km6923 发表于 2025-9-30 08:31:47

感觉openlist会好点

tuuer 发表于 2025-9-30 10:27:31

非常棒的教程,就是alist现在不太敢用了

fkgww 发表于 2025-10-1 01:28:46

openlist适用吗

luoli 发表于 2025-10-1 04:09:26

牛啊

NX10086 发表于 2025-10-17 13:55:36

alist已经不是原来的alist了

smhw3565 发表于 2025-10-18 18:48:30

又是学到技术的一天

tianzi 发表于 2025-10-19 09:00:15

好高级!学习下

youngkingdom 发表于 2025-11-6 09:59:10

+1 换openlist

kinsou 发表于 2025-11-6 10:31:06

AList 不是被卖了吗?还安全吗?

jm1234 发表于 2025-11-6 10:34:37

一个浏览器扩展脚本就能做到播放的事情,为啥要搞这么复杂啊?

epay55pay 发表于 7 天前

牛逼刮削的影片信息用什么比较好?

xhl300 发表于 6 天前

Alist好像被一个之前投过毒的公司收购了

xingyun9500 发表于 6 天前

直接 list,管他哪个,alist不更新就好了,挂载云盘,网易爆米花刮削的蛮好,搜索也很好用,没必要那么麻烦了,infuse也买了,刮削太可怕,设置不好,播放是比其他成熟,比较好

MILKXXXX1 发表于 5 天前

感谢佬分享
页: [1]
查看完整版本: Emby + Alist + AutoFilm + MediaWarp 实现网盘直链播放