Emby使用115直链播放视频,不占用本地上传

2024年5月15日更新:

1、更新emby2Alist套件,外网访问4-10秒可加载(具体看网速,原来的需要20秒左右)

★如为了为了安全,emby可以反代,但是alist不能反代,反代后起播时间倍数增长,可以把5244换成其他端口

2、Nginx使用host模式,默认为8091端口,如需更改,自行设置映射端口

3、emby2Alist项目的地址,作者持续更新,后续可以根据需求自行替换文件更新

https://github.com/bpking1/embyExternalUrl/tree/main/emby2Alist

流程图 & 原理介绍

之前的原理图,可以看到直链播放的时候, web -> nginx -> alist ->115 是实际播放路径,webdav -> rclone -> file -> emby 是不走的,这条路径的起到的作用仅仅是给 emby 读取文件用的。

简单点来说,emby上面的所有视频文件的播放链接会被 nginx 动态修改为 alist 302 的 115 直链。

但是为了让 emby 中有「视频文件」,你得给 emby 添加影视库,但是 emby 添加影视库需要「文件」, alist 本身没办法把网盘文件挂载到本地硬盘,所以需要通过 rclone 将网盘文件挂载到本地硬盘。

也就是说,除了 rclone,只要能有工具将网盘文件挂载到本地,让 emby 顺利加载「影视库」,都是不影响最终的直链播放效果的。

理论上来讲,你搞一堆虚假的文件,重命名为视频文件,只要目录结构和名称和网盘一致,骗过 emby 能够顺利入库的方案都是可以的。

115.png

采用 cd2 的原因是因为,cd2 挂载的效果比 rclone 要好,能够显著的加速 emby 入库时间,新版本的入库流程如下。

之前写博文画图的时候有意识到可以换成 cd2, 但是感觉没啥意义,后来部分朋友采用 cd2 发现扫库很快

经验证 alist -> webdav -> cd2 -> file 依然很慢,所以具体的瓶颈是出在了 alist -> webdav,或者 webdav 协议本身的限制

如果是 rclone 原生支持的网盘,比如 google drive 个人感觉应该不会和 cd2 有扫库速度上的明显差异,除非 rclone 在设计上和 cd2 有明显的差距(个人倾向于不会,毕竟都是比较成熟的网盘挂载工具,感兴趣的朋友可以验证一下)

关于 alist -> webdav 慢的部分,究竟是 alist 的设计问题,还是 webdav 协议本身的限制,笔者也没有过多探究,如果有了解的朋友,还望不吝赐教一下,谢谢

cd2.png

原理和做法:安装emby、alist、cd2【原本有可以不用重新安装】、另外重点是用Nginx反代。

安装

以下大部分流程与之前是一致的,但是为了照顾一些第一次看到本教程的玩友,还是照抄一遍吧。

测试服务器: 阿里云服务器

测试环境: 纯 docker

建议跟着我的步骤来,打开一个记事本,记录所有教程中要求记下的值(我会以红色标记)

安装 alist(如果是Nas,/home/alist替换成/volume/……之类的路址)

docker run -d \
  --restart=always \
  -v /home/alist:/opt/alist/data \
  -p 5244:5244 \
  -e PUID=0 \
  -e PGID=0 \
  -e LMASK=022 \
  --name=alist \
  xhofe/alist:latest

 

设置密码

docker exec -it alist ./alist admin set password

记录 alist 帐号密码,示例: admin, password

访问 http://外网ip:5244, 登录管理后台,添加 115 网盘,按需配置,对配置项不太理解的朋友建议直接抄我的

记录: alist 外网地址,示例: http://119.119.119.119

图片[3]-NAS/群晖 Emby使用115直链播放视频

图片[4]-NAS/群晖 Emby使用115直链播放视频

记录 alist token 值,示例: alist-56aed914-dc75-4exxxxx

图片[5]-NAS/群晖 Emby使用115直链播放视频

记录 alist 内网 IP 地址,示例: 172.17.0.2

 

Nas/群晖无法用shared方式挂载

运行一下代码,volume1改为对应的盘符

mount --make-shared /volume1

开启后是失效,可以建立【任务计划】

【控制面板】—【任务计划】—【新建-触发的任务】—【用户账号选择root】

图片[6]-NAS/群晖 Emby使用115直链播放视频

安装 clouddrive2(unstable版)

为了照顾之前采用 rclone 的用户无缝迁移到 cd2 版本,我对路径做了匹配,之前已经刮削过的数据也不受影响

如果你之前用了我上个 rclone 版本的教程,或者对一些底层原理和命令不是很熟悉,建议完全按照我的步骤和配置来

安装前检查一下 是否安装了

fuse find /dev/fuse

显示/dev/fuse就是已安装,如果没有的话

apt install fuse3

安装cd2(自行修改路径)

建立路径

mkdir -p /mnt/alist && chmod -R 777 /mnt/alist
docker run -d \
      --name clouddrive \
      --restart=always \
      --env CLOUDDRIVE_HOME=/Config \
      -v /mnt/alist:/CloudNAS:shared \
      -v /home/cd2:/Config \
      --network host \
      --pid host \
     --privileged \
     --device /dev/fuse:/dev/fuse \
     cloudnas/clouddrive2-unstable

 

安装成功后,打开 http://119.119.119.119:19798 进入后台地址,登录 cd2,扫码添加硬盘。

cd2添加硬盘.png

扫码添加完毕后,你的 cd2 根目录会出现一个网盘(名称随意),双击进入 网盘根路径,点击左上角挂载按钮

图片[8]-NAS/群晖 Emby使用115直链播放视频挂载.png

选择挂载路径(这里十分关键跟后面的 constant.js 中的路径直接相关,如果不一致会导致直链播放失败,建议按照我的配置来

选择挂载路径.png

选择好 alist 文件夹,点击确定后,会显示如下路径,建议修改权限为 777。挂载路径配置.png

点击挂载后,查看挂载是否成功,若「失败原因」处显示空白,则证明一切正常。
检查挂载是否成功.png

安装 embyserver

Nas或服务器不允许用shared方式,可以执行一下代码【volume1改成实际需要Nas或服务器路径或盘符】

mount --make-shared /volume1

自行修改路径(不允许写入刮削文件到网盘,新增媒体库时候,不勾选“将媒体图像保存到媒体文件夹中”):

docker run -d \
   --name=emby \
   -e PUID=0 \
   -e PGID=0 \
   -e TZ=Asia/Shanghai \
   -p 8096:8096 \
   -v /docker/emby:/config \
   -v /mnt/alist:/mnt/alist:rslave \
   --restart=always \
   --network=host \
  amilys/embyserver:latest

记录 embyserver 的内网地址,示例: 172.17.0.3

docker inspect --format="{{.NetworkSettings.Networks.bridge.IPAddress}}" emby

图片[13]-NAS/群晖 Emby使用115直链播放视频

创建 & 记录 embyserver 的 APIKEY,示例: a159ebxxxxxx

访问 http://外网ip:8096, 初始化 emby,生成并记录 embyserver 的 API KEY

embyserver.png其他配置

关闭转码等

转码.png

关于刮削文件建议

如果刮削文件放在网盘,反复通过网盘读取小文件,可能会影响速度,从而导致卡顿,建议重新用emby刮削(emby怎么实现刮削,后期专门出个教程),建立媒体库时候勾选刮削,并不勾选,具体可以自行研究测试

图片[16]-NAS/群晖 Emby使用115直链播放视频

安装 nginx

Emby2Alist下载链接(点击下载)

上传到服务器/nas,解压emby2Alist

unzip emby2Alist.zip
cd emby2Alist/nginx/conf.d

或者修改好再上传按照下图修改constant.js

图片[17]-NAS/群晖 Emby使用115直链播放视频

【重点,挂载路径:const embyMountPathArr = ["/mnt/alist"],需匹配alist的地址,例如alist显示的网盘路径是/115/电影/xx.mp4,这个地址需要保证跟alist一致,如下图出现2个/115,那个这个地址就改成

const embyMountPathArr = ["/media/115"]   ““这个删除的意思””

随便找一部电影,看地址:

【emby 的地址】/media/115/115/Emby媒体库/电影/华语电影/97家有喜事 (1997)/97家有喜事 (1997) - 1080p.mkv

【alist 的地址】/115/Emby媒体库/电影/华语电影/97家有喜事(1997)/97家有喜事 (1997) - 1080p.mkv

需要把 emby 的地址,变成跟 alist 一样,这样就实现反代

按照上面的例子,就是只要“/media/115”删掉,就能保持跟 alist 一致,所以const embyMountPathArr = ["/media/115"]   就是删掉[" "]的内容

以上只是一个例子,大家理解一下意思

 

emby

图片[18]-NAS/群晖 Emby使用115直链播放视频

alist图片[19]-NAS/群晖 Emby使用115直链播放视频

,最终查看网盘的文件路径是/volume2/115emby/media/115,这里填的是/media

但是如果像我一样,cd2挂载后文件夹是/volume2/115emby/media/115/115,这里填的是/media/115)

图片[20]-NAS/群晖 Emby使用115直链播放视频

图片[21]-NAS/群晖 Emby使用115直链播放视频

完成上方配置后输入

docker-compose up -d

或者(自行修改路径)

docker run -d \
   --name=emby-nginx \
   -e PUID=0 \
   -e PGID=0 \
   -e TZ=Etc/UTC \
   -v /home/emby2Alist/nginx/nginx.conf:/etc/nginx/nginx.conf \
   -v /home/emby2Alist/nginx/conf.d:/etc/nginx/conf.d \
   -v /home/emby2Alist/nginx/embyCache:/var/cache/nginx/emby \
   -v /home/emby2Alist/nginx/log:/var/log/nginx \
   --restart=always  \
   --network=host \
   nginx:alpine

测试和使用

不能网页端播放,地址为:外网ip/域名:8091(放行端口);只能通过软件,如emby、infuse、Vidhub、fileball(会提示错误,点击播放可继续播放)等之类,请查看上传是否占用,如占用上传或出现错误,请仔细检查constant.js的路径(docker映射后的路径)。emby2Alist

 

可付费远程协助

文章已经多次细化修改,可对着教程一步一步能,如果图方便,可找我们远程协助,直接弄(提前安装 todesk),咸鱼链接:

【闲鱼】https://m.tb.cn/h.gWGwSfJ?tk=onHqWwVJE1h HU9046 「我在闲鱼发布了【emby+115(或阿里云盘),可多人共享,观影不占用宽带上】」
点击链接直接打开
© 版权声明
THE END
喜欢就支持一下吧
点赞13分享
评论 共7条

请登录后发表评论