115网盘302搭建emby服

目录

使用QMS 和115网盘搭建 emby 网盘服。

最近 115 做活动,八年八百的价格是真的香,就入手了一个。

虽然说我有几个 emby 公益服,但在晚高峰的时候看卡卡的还是不爽,115 保存影片然后自己看正好弥补了这个缺点。

买了后,用爆米花直接看也可以,还带刮削。但是有更加好玩的,115 网盘 302 搭建 emby 的网盘服,整好了后可以很方便用户管理和分享(独乐乐不如众乐乐)。

什么是刮削?

基于视频文件的命名,利用 scraper(刮削器)从网络数据库(如TMDB、IMDB)中搜索并自动匹配信息,方便用户通过海报墙管理本地媒体库。刮削完成后本地会生成一个 nfo 的文件。当 emby 读取到这个文件,就可以生成精美的海报墙了。

/images/remote/20260204181749140_9557254373615845236.webp

/images/remote/20260204181749141_6637205154010354994.webp

Strm

Strm 文件是这次 302 实现的关键。

这里就直接照抄 3.STRM与Emby · 1307super/cloud189-auto-save Wiki · GitHub 了。

什么是 STRM 文件?

STRM 文件是一种纯文本文件,扩展名为 .strm。它的内容只有一行,就是媒体文件的实际播放地址。通过 STRM 文件,我们可以让 Emby 播放网络存储(如天翼云盘)中的视频,而不需要把视频下载到本地。

STRM 工作原理

  1. Emby 扫描到 .strm 文件
  2. 打开文件读取里面的 URL
  3. 通过该 URL 直接播放视频

STRM 生成项目

当然,从别人分享的资源转存,STRM 不会凭空生成,需要用一些项目生成。

我在搜索的时候眼花缭乱,STRM 生成大多是免费的,但是 302 很多项目确实收费的。

最后我选择了免费的 GitHub - qicfan/qmediasync: 基于 网盘 开放平台接口来同步生成 STRM、元数据下载、元数据上传,直链解析播放和外网302播放,Emby联动删除网盘文件等, 下面简称 QMS 。

当然也有付费的:CMS、Mediahelp、Symedia、emby-ngnix。这些一步到位加上了资源搜索转存的功能。

如果有 PT 的话可以看看 MP。

观看步骤

图表 代码
graph LR
    %% 定义全局样式,增加内边距防止文字挤压
    classDef default fill:#f9f9f9,stroke:#333,stroke-width:1px,padding:10px;
    classDef highlight fill:#e1f5fe,stroke:#01579b,stroke-width:2px;

    subgraph Step1 [1. 资源获取]
        A("115 网盘
原始资源") end subgraph Step2 [2. QMS 处理阶段] B("QMS 扫描
115 目录") C("QMS 识别电影
生成本地 .strm") B --> C end subgraph Step3 [3. Emby 索引阶段] D("Emby 扫描目录
读取 NFO/海报") E("展示海报墙
") D --> E end subgraph Step4 [4. 302 重定向播放] F("用户点击播放
请求 strm") G("QMS 获取
115 CDN 直链") H("返回 302 指令
至客户端") I("客户端直连
115 节点播放") F --> G --> H --> I end %% 连接子图 A --> B C --> D E --> F %% 指定重点环节样式 class G,H highlight;
graph LR
    %% 定义全局样式,增加内边距防止文字挤压
    classDef default fill:#f9f9f9,stroke:#333,stroke-width:1px,padding:10px;
    classDef highlight fill:#e1f5fe,stroke:#01579b,stroke-width:2px;

    subgraph Step1 [1. 资源获取]
        A("115 网盘
原始资源") end subgraph Step2 [2. QMS 处理阶段] B("QMS 扫描
115 目录") C("QMS 识别电影
生成本地 .strm") B --> C end subgraph Step3 [3. Emby 索引阶段] D("Emby 扫描目录
读取 NFO/海报") E("展示海报墙
") D --> E end subgraph Step4 [4. 302 重定向播放] F("用户点击播放
请求 strm") G("QMS 获取
115 CDN 直链") H("返回 302 指令
至客户端") I("客户端直连
115 节点播放") F --> G --> H --> I end %% 连接子图 A --> B C --> D E --> F %% 指定重点环节样式 class G,H highlight;
graph LR
    %% 定义全局样式,增加内边距防止文字挤压
    classDef default fill:#f9f9f9,stroke:#333,stroke-width:1px,padding:10px;
    classDef highlight fill:#e1f5fe,stroke:#01579b,stroke-width:2px;

    subgraph Step1 [1. 资源获取]
        A("115 网盘
原始资源") end subgraph Step2 [2. QMS 处理阶段] B("QMS 扫描
115 目录") C("QMS 识别电影
生成本地 .strm") B --> C end subgraph Step3 [3. Emby 索引阶段] D("Emby 扫描目录
读取 NFO/海报") E("展示海报墙
") D --> E end subgraph Step4 [4. 302 重定向播放] F("用户点击播放
请求 strm") G("QMS 获取
115 CDN 直链") H("返回 302 指令
至客户端") I("客户端直连
115 节点播放") F --> G --> H --> I end %% 连接子图 A --> B C --> D E --> F %% 指定重点环节样式 class G,H highlight;
 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
graph LR
    %% 定义全局样式,增加内边距防止文字挤压
    classDef default fill:#f9f9f9,stroke:#333,stroke-width:1px,padding:10px;
    classDef highlight fill:#e1f5fe,stroke:#01579b,stroke-width:2px;

    subgraph Step1 [1. 资源获取]
        A("115 网盘<br/>原始资源")
    end

    subgraph Step2 [2. QMS 处理阶段]
        B("QMS 扫描<br/>115 目录")
        C("QMS 识别电影<br/>生成本地 .strm")
        B --> C
    end

    subgraph Step3 [3. Emby 索引阶段]
        D("Emby 扫描目录<br/>读取 NFO/海报")
        E("展示海报墙<br/>")
        D --> E
    end

    subgraph Step4 [4. 302 重定向播放]
        F("用户点击播放<br/>请求 strm")
        G("QMS 获取<br/>115 CDN 直链")
        H("返回 302 指令<br/>至客户端")
        I("客户端直连<br/>115 节点播放")
        F --> G --> H --> I
    end

    %% 连接子图
    A --> B
    C --> D
    E --> F

    %% 指定重点环节样式
    class G,H highlight;

搭建

前两天恰好看到飞牛爆出漏洞,这种暴露在公网的还是得要小心。尽量权限给小一点,不需要经常访问的就用 SSH 端口转发访问。

docker-compose.yml

 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
services:
  postgresql:
    image: postgres:16-alpine
    container_name: postgresql
    restart: always
    environment:
      POSTGRES_DB: qmediasync
      POSTGRES_USER: moviepilot
      POSTGRES_PASSWORD: pg_password
    networks:
      - web-bridge
    volumes:
      - './postgresql/data:/var/lib/postgresql/data'
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U moviepilot -d qmediasync"]
      interval: 5s
      timeout: 5s
      retries: 5

  qmediasync:
    image: qicfan/qmediasync:latest
    container_name: qmediasync
    restart: unless-stopped
    ports:
      - "127.0.0.1:12332:12332"
      - "127.0.0.1:12333:12333"
      - "127.0.0.1:8095:8095"
      - "127.0.0.1:8096:8096"
    volumes:
      - ./qmediasync/config:/app/config
      - ./media:/media
    environment:
      - GUID=1001
      - GPID=1001
      - TZ=Asia/Shanghai
      - DB_HOST=postgresql
      - DB_PORT=5432
      - DB_USER=moviepilot
      - DB_PASSWORD=pg_password
      - DB_NAME=qmediasync
    networks:
      - web-bridge
    depends_on:
      postgresql:
        condition: service_healthy

  emby:
    image: lscr.io/linuxserver/emby:latest
    container_name: emby
    restart: always
    networks:
      - web-bridge
    environment:
      - PUID=1001
      - PGID=1001
      - TZ=Asia/Shanghai
    volumes:
      - './emby/config:/config'
      - './media:/media'
    healthcheck:
      test: ["CMD-SHELL", "nc -z localhost 8096 || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3

networks:
  web-bridge:
    external: true

权限管理

创建一个非登录用户:

1
2
useradd -u 1001 -U -m -s /sbin/nologin moviepilot
id moviepilot

修改目录权限和所属用户:

1
2
chmod -R 755 /opt/moviepilot
chown -R 1001:1001 /opt/moviepilot

修改数据库目录权限和所属用户:

1
2
chown -R 70:70 ./postgresql/data
chmod -R 700 ./postgresql/data

反向代理

只需要反向代理 QMS 的 8095 端口。 其他需要用的时候用 SSH 端口转发访问就可以了。

使用

Emby service

Emby 关闭自带的刮削(这样可以加快 emby 入库的速度),使用 QMS 的刮削功能。QMS 刮削后还可以将海报同步上传到 115。

Emby 关闭网页端的转码功能,避免 302 失败直接转码导致 VPS 卡死。

有需要的可以下载神医助手这个插件,增强了中文用户的体验,但是我安装提示修改失败,可能是我版本太高了。

Emby client

直接连 QMS 的 8095 端口,而不是 emby 容器的 8095 端口。

如果 emby client 连接的是 emby 的 8095, 那么 302 会失败,并且播放会 error 报错。这也是我前面说只需要反向代理 QMS 的 8095 就可以。这是从 NS 老哥看到的解决办法。

QMS 设置

照着官方wiki 设置就可以了。

可以配置一下 telegram 的通知,这样刮削,入库也会用通知了。 /images/remote/20260204181749142_16468757965426475718.webp

WAF 的设置

我依然用 Cloudflare 的 CDN,依旧用的 Cloudflare 的 WAF。

因为给非中国地区的 IP 访问加上托管质询。要将/web,/emby 路径加上白名单,保证正常观看。

资源获取

Streamlit,这个网站可以搜索出 115 的资源。

还有一个配套容器,可以实现点一下转存(这个搭建在家里的 NAS 就行,我就不搭建了)。