作者在0.3.3.5版本中加入仅收费版可以启动,有需要的可以加作者TG群购买

https://t.me/cloud_media_sync

前言

最近,使用网盘挂载进行观影的用户可能频繁遇到某网盘的“429”风控提示。这种情况轻则导致短时间内无法正常观影,重则可能导致已经完成入库和刮削的媒体库被删除,引发了某些群组的广泛抱怨。

只要在短时间内大量访问网盘内容,就会触发网盘的风控机制,迫使用户重新更换 Cookie 并重新挂载网盘。虽然有用户通过将网盘的 MaxQueriesPerSecond 参数调整为 0.9 来有效缓解 429 问题,但这也引发了新的问题。更改后,网盘的刮削和媒体库刷新等操作变得非常缓慢。原本不到1小时就能完成的 500 部电影的整理、刮削和入库,现在需要 2-3 小时才能完成。(CD2更新0.8.5后固定参数为1,无需手动调整为0.9,但相对于原来的3,还是慢很多。)

为了解决这些问题,为大家带来了一种全新的方法——使用 STRM 文件

什么是STRM文件

用最简单能理解的话来说就是STRM文件就相当于生成一个网盘文件的快捷方式到本地。并且STRM 文件是一种简单的文本文件,可以用于在媒体播放器中播放网盘中的内容。它的作用类似于远程链接,指向实际的网盘位置/本地文件位置,而不是存储文件本身。通过这种方式,媒体服务器如 Emby等媒体服务器可以直接读取 strm 文件中的链接(plex不支持strm),从而获取网盘上的媒体资源,而无需将整个媒体文件下载到本地服务器。

STRM类型

local(本地路径)

local类型strm更像是软链接,指向本地路径,用过CloudDrive的同学都知道,将网盘挂载到/mnt/addons/CloudDrive下,而local文件内容就去掉/mnt/addons/CloudDrive,就是我115网盘内的路径,这样Emby就可以读取到路径,从而直接播放。

Cloud(云盘链接)

Cloud类型的strm文件则是直接指向网盘路径,可能大家看到这一串乱码会很头疼,但实际上它指向的也是网盘路径,不过用记事本等软件打开时不支持URL编码,用支持的软件打开就会看到如下路径:

与上面内容一致,去掉CloudDrive2的IP地址,则同样为115网盘的媒体路径。

为什么要生成strm文件

由于各类网盘的严苛风控规则,传统的大规模视频文件扫描与刮削已难以实现。而 strm 文件的远程链接特性在此场景中提供了有效的解决方案。刮削软件能够将 strm 文件视作实际的视频文件,通过文件名提取元数据信息,而无需直接访问或读取网盘中的视频文件,从而有效规避了因文件读取带来的风控限制。同时,即便文件名经过修改,链接仍可保持准确指向目标的远程地址。此外,网盘文件列表的获取仅需读取目录信息,而非实际访问文件内容,因此更准确地说,这一过程是对目录的扫描,而非文件的读取

整理、生成思路

  1. 所有媒体资源通过不同下载器下载到本地

  2. MP使用目录监控整理本地目录,自动整理通过CloudDrive2上传到网盘(可以选择整理+削刮,但大量上传容易造成网盘风控)

  3. Cloud-Media-Sync通过全量/增量任务生成strm到本地目录

  4. 通过MP进行削刮,生成图片、NFO等媒体元数据,供Emby读取

  5. 通过Cloud-Media-Sync容器中nginx进行302直链获取播放

https://hub.docker.com/r/imaliang/cloud-media-sync

自动整理上传网盘思路、Emby部署可以参考

https://hi.keba.host/archives/moviepilot-v2https://hi.keba.host/archives/clouddrive2https://hi.keba.host/archives/emby

部署容器(任选一种方式部署即可)

创建文件夹

Cloud-Media-Sync配置文件夹

Nginx配置文件夹

Strm文件存放文件夹

下载Docker镜像失败的可以看一下篇文章

https://hi.keba.host/archives/Docker

客户端部署

需要修改的地方均用红色的方框标出

EMBY图片缓存策略,包括主页、详情页、图片库的原图→环境变量:IMAGE_CACHE_POLICY(按需填写)
0: 不同尺寸设备共用一份缓存,先访问先缓存,空间占用最小但存在小屏先缓存大屏看的图片模糊问题
1: 不同尺寸设备分开缓存,空间占用适中,命中率低下,但契合 emby 的图片缩放处理
2: 不同尺寸设备共用一份缓存,空间占用最大,移除 emby 的缩放参数,直接原图高清显示
3: 关闭 nginx 缓存功能,已缓存文件不做处理

Docker Compose部署

创建Yaml文件夹

查看文件夹真实路径

我的真实路径为:/volume1/docker/AppData/sync/config/volume1/docker/AppData/sync/nginx/logs/volume1/docker/AppData/sync/nginx/cache/volume1/library,稍后要填入yaml文件,注意保存。

services:
  emby:  # Emby 服务
    image: amilys/embyserver:latest  # 指定 Emby 服务器 Docker 镜像
    container_name: emby  # 容器名称,方便管理和识别
    network_mode: host  # 使用主机网络模式,方便访问,但存在安全风险!强烈建议使用命名网络。
    environment:
      - PUID=0  # 设置容器内用户ID为0 (root)
      - PGID=0  # 设置容器内组ID为0 (root)
      - TZ=Asia/Shanghai  # 设置时区为上海
      - NO_PROXY=172.17.0.1,127.0.0.1,localhost  # 指定不使用代理的地址,如果不需要emby削刮可以不加
      - ALL_PROXY=http://192.168.1.2:7893  # 设置全局代理,用于访问外部网络,如果不需要emby削刮可以不加
      - HTTP_PROXY=http://192.168.1.2:7893  # 设置 HTTP 代理,与 ALL_PROXY 保持一致,如果不需要emby削刮可以不加
    volumes:
      - /volume1/docker/AppData/embyserver:/config  # 映射 Emby 配置文件目录
      - /volume1/library:/library  # 映射媒体文件库目录
    ports:
      - "8096:8096"  # 映射 Emby Web 界面的端口
      - "8920:8920"  # 映射 Emby 安全 Web 界面的端口 (可选)
    devices:
      - /dev/dri:/dev/dri  # 映射图形加速设备,用于硬件加速解码 (如果需要)
    privileged: true  # 赋予容器特权。
    restart: unless-stopped  # 容器在主机重启后自动启动,除非手动停止

  cloud-media-sync:  # cloud-media-sync 服务
    privileged: true  # 赋予容器特权。
    container_name: cloud-media-sync  # 容器名称
    image: imaliang/cloud-media-sync:latest  # 指定 cloud-media-sync 镜像
    restart: always  # 容器总是重启
    network_mode: host  # 使用主机网络模式,方便访问,但存在安全风险!强烈建议使用命名网络。
    volumes:
      - /volume1/docker/AppData/sync/config:/config  # 映射 cloud-media-sync 配置文件目录
      - /volume1/docker/AppData/sync/nginx/logs:/logs  # 映射 nginx 日志目录
      - /volume1/docker/AppData/sync/nginx/cache:/var/cache/nginx/emby  # 映射 nginx 缓存目录
      - /volume1/library:/library  # 映射媒体文件库目录,与 Emby 共享
    ports:
      - "9527:9527"  # 映射 核心配置端口
      - "9096:9096"  # 映射 Nginx直链302端口
    environment:
      - PUID=0  # 设置容器内用户ID为0 (root)
      - PGID=0  # 设置容器内组ID为0 (root)
      - UMASK=022  # 设置文件掩码
      - TZ=Asia/Shanghai  # 设置时区为上海
      - RUN_ENV=online  # 设置运行环境为线上
      - ADMIN_USERNAME=xxxxx  # 设置管理员用户名
      - ADMIN_PASSWORD=xxxxxx  # 设置管理员密码
      - EMBY_HOST_PORT=http://127.0.0.1:8096  # 指定 Emby 服务的地址和端口
      - EMBY_API_KEY=xxxxxx  # 指定 Emby API 密钥
      - IMAGE_CACHE_POLICY=2  # 设置镜像缓存策略

EMBY图片缓存策略,包括主页、详情页、图片库的原图→环境变量:IMAGE_CACHE_POLICY(按需填写)
0: 不同尺寸设备共用一份缓存,先访问先缓存,空间占用最小但存在小屏先缓存大屏看的图片模糊问题
1: 不同尺寸设备分开缓存,空间占用适中,命中率低下,但契合 emby 的图片缩放处理
2: 不同尺寸设备共用一份缓存,空间占用最大,移除 emby 的缩放参数,直接原图高清显示
3: 关闭 nginx 缓存功能,已缓存文件不做处理

在最下面提示参数配置错误,需要在文件管理器中查看Nas是否创建了这个文件夹。

image-bvue-lkux.png

食用方法

进入Emby后台,创建API

返回Compose界面,填入API

浏览器访问http://设备ip:9527 进入容器后台

核心配置

扫码登录115账号,获取cookie

STRM配置

企业微信通知配置

参考MP企微内容

https://hi.keba.host/archives/wxchat

TMDB配置

自动整理(也可以不需要配置)

文件夹cid获取

MP默认命名规则:

  • 电影文件夹命名规则:{title} ({year})

  • 电影文件命名规则:{title} ({year})

  • 剧集文件夹命名规则:{title} ({year})

  • 剧集命名规则:{title}.{year}.{season_episode}

也可以编辑自己想要的规则,查看变量说明/语法说明

全量同步

选择你需要的视频格式尾缀

选择你需要的视频元数据格式尾缀

如果没有你需要的,你也可以自己打字,然后选择即可

测试访问反代后Emby

浏览器输入http://NasIP:9096测试访问,正常访问Emby容器即表示部署成功。

只需要映射9096端口到外网,即可实现302直链播放

推荐大家用lucky反代9096端口,实现https访问

增量同步

在完成全量同步后,会根据自定义cron表达式,进行增量同步。(由于增量同步依赖115生活事件,所以无法同步文件重命名,不过文件重命名后并不影响直连的获取,所以影响不大。)

Emby添加媒体库设置

监控上传

题外话(神医助手-一款强大的Emby插件)

  • 提高首次播放的起播速度

  • 解决可能的无进度条问题

  • 视频截图预览缩略图增强

  • 片头片尾探测增强

  • 自动合并同目录视频为多版本

  • 独占模式提取媒体信息

  • 独立的外挂字幕扫描

  • 自定义TMDB备选语言

  • 使用替代TMDB配置

  • 演职人员增强TMDB

  • 获取原语言海报

  • 中文搜索增强

  • 拼音首字母排序

  • 媒体信息持久化

  • 支持代理服务器

  • 支持TMDB剧集组刮削

感谢大佬的开源项目

https://github.com/sjtuross/StrmAssistant

下载最新的文件:下载困难点→StrmAssistant.dll

安装插件

查看emby的配置文件存放本地目录

将下载好的插件放入emby插件文件夹,然后重启Emby

根据提示按需配置插件

手动运行插件

由于我的技术有限,文章可能有不足。希望大家理解,欢迎提出意见。
如果这篇文章对您有帮助,可以考虑打赏支持。您的支持是我创作的动力。谢谢阅读!