emby挂载阿里盘转直链

2021-9-6|2023-8-7
bpking
bpking
type
status
date
slug
summary
tags
category
icon
password
 

文章更新记录

2023/2/2
升级到alist v3了,脚本github地址 bpking1/embyExternalUrl (github.com)
调用外部播放器的油猴脚本账号无法登陆了,换了个新地址:embyLaunchPotplayer (greasyfork.org)
2022/5/13
  1. 兼容jellyfin
  1. 解决infuse无法播放的问题,感谢@amwamw968
  1. 用nignx添加了字幕文件的缓存支持
2022/1/12
  1. 重写了js脚本,支持rclone union,不再需要挂载名和alist盘名一致,不再需要设置emby api_key
  1. 修复了js脚本不能正确获取同一个视频不同清晰度版本的问题
2021/12/06
  1. alist项目作者最近的更新中加入了阿里云盘之外的网盘的支持,且不在需要刷新目录
  1. 换了另外一个用rust语言写的阿里盘webdav项目,内存占用很小
  1. 修改了njs脚本中的正则,来修复emby魔改客户端terminusPlayer没有走直链
  1. 修改nginx配置修复了阿里云盘直链无法在emby web中播放
  1. 修复了由于反代无法使用jellyfin-mpv-shim直链播放
  1. 用nignx添加了emby图片的缓存支持

这篇文章的受众:

写这篇文章默认读者是emby用户,使用rclone挂载网盘,会使用docker,因篇幅问题以上软件的使用方法不在文章范围之中,此项目不会对原有的emby和rclone配置造成影响或修改

原理:

使用aliyundrive-webdav 项目将阿里盘转为webdav, 再使用rclone挂载以供emby读取 使用alist项目 将阿里盘及别的网盘的文件转为直链,使用nginx及其njs模块将emby视频播放地址劫持到 alist直链 (暂时只测试了od,gd和阿里云盘可用,alist目前支持好几种网盘,感兴趣的可以测试一下)

步骤:

1.先将配置文件下载到本地

此时文件结构如下: ~/emby2Alist ├── docker-compose.yml └── nginx ├── conf.d │   ├── emby.conf │   └── emby.js └── nginx.conf

2.

看情况修改emby.js 中的设置项目,通常来说只需要改alist token 这里默认emby在同一台机器并且使用8096端口,否则要修改 emby.js和emby.conf中emby的地址

3 . 如果不挂载阿里云盘 可以跳过这一步

修改docker-compose.yml 中 service.ali-webdav 的 REFRESH_TOKEN 获取方法参考原项目地址: https://github.com/messense/aliyundrive-webdav

4.

启动服务: 在 ~/emby2Alist 目录下执行
查看启动log:
如果log有报错,请按照提示信息修改 ,常见错误可能为
  1. docker端口占用冲突: 修改docker-comopse映射端口
  1. webdav 的refresh token 填写错误 (如果不挂载阿里云盘则忽略)

5.

防火墙放行 5244, 8095 和 8080端口 8080端口为阿里盘 webdav地址 , 8095端口为emby转直链端口与默认的8096互不影响 访问5244端口,初始密码查看docker log能看到 ,根据项目文档 https://github.com/Xhofe/alist 在Alist项目后台添加网盘 注意:
  1. 添加od,gd盘可以直接复制rclone配置里面的 clientid , secret , refreshToken,不用再麻烦去重新搞一次了
  1. 不使用阿里云盘可以跳过这步 alist阿里盘的refreshToken与webdav那个token是不一样的,这里需要的是要不需要referrer请求头的token,详情请参考这个issue , 可以用这个网页来获取 阿里云盘 - RefreshToken (cooluc.com)
  1. 盘名建议一致,这样获取直链更快,不一致也可以
添加的网盘在alist里面的名称需要与 rclone挂载的文件夹名称一样 比如挂载路径为 /mnt/ali 那么盘的名称也要叫 ali

6. 如果不挂载阿里云盘 可以跳过这一步

配置rclone,挂载网盘,这里以阿里盘webdav为例
使用rclone 挂载 阿里盘webdav 第一步name 我这里为 ali rclone config 选 webdav , 地址为http://localhost:8080 默认用户和密码都为admin rclone lsf ali: 看一下能否获取到列表 创建文件夹: mkdir -p /mnt/ali 注:此挂载文件夹的名字需要与 Alist 中的盘名相同 挂载:
也可以写成service

7.

访问 8095端口打开emby 测试直链是否生效,查看执行log
8095端口为走直链端口 , 原本的 8096端口 走 emby server 不变 直链播放不支持转码,转码的话只能走emby server 所以最好 在emby设置中将 播放 --> 视频 --> 互联网质量 设置为最高 ,并且将用户的转码权限关掉,确保走直链 web端各大浏览器对音频和视频编码支持情况不一,碰到不支持的情况emby会强制走转码而不会走直链

已知问题:

  1. emby web播放时如果需要使用内封的字幕,实际上是需要embyServer在后台用ffmpeg去提取的,ffmpeg要读取整个视频文件才能获取所有的字幕流,相当于几乎整个视频文件都要通过rclone下载,并且消耗cpu资源,对于比较大的视频文件是不现实的,所以web端建议使用外挂字幕
  1. google Drive由于api的限制直链只能通过server中转,所以还是建议在cf上搭建goindex来获取直链 ,如何给到emby请参考 这篇文章结尾,另外一种方法是给alist添加cf worker中转gd的支持,有待研究 alist新版已经支持cf worker代理gd下载了,详情参考alist文档
  1. 可能会有其他问题,请留言
 
rclone加解密网盘emby直链播放surface pro4安装官方chrome OS及windows10双系统