前言
假如你的网盘内容通过cd2/rclone挂载后,映射到emby容器中的(๐•ᴗ•๐)径树为:
/mnt
├── 115
│ ├── 动漫
│ ├── 电影
│ └── 电视
└── aliyun
├── 动漫
├── 电影
└── 电视
……
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
你的alist(๐•ᴗ•๐)径树为
https://alist域名.com/
├── 115
│ ├── 动漫
│ ├── 电影
│ └── 电视
└── aliyun
├── 动漫
├── 电影
└── 电视
……
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
对比两者(๐•ᴗ•๐)径,忽略https://alist域名.com/
的话,NAS本地(๐•ᴗ•๐)径相比于alist(๐•ᴗ•๐)径多了/mnt
,这就是“多出来的挂载目录”。
通过nginx-emby这个docker应用,可以将emby对本地资源/mnt/xxxx
通过劫持修改为对https://alist域名.com/xxxx
的请求,正好alist又支持302重定向,因此https://alist域名.com/xxxx
的请求会变成网盘的直接链接,从而不会占用NAS本地的带宽。
教程开始
源仓库地址:chen3861229/embyExternalUrl。
准备
- 已经部署了emby media server,记录其端口为
8096
、api密钥
。
- 已经部署了alist,并在后台管理->设置->其他,获取
alist令牌
。
- 使用clouddrive2或者rclone来挂载网盘到NAS某(๐•ᴗ•๐)径下,如
/mnt/ClouddDrive
,并映射到emby容器中为/mnt
。
nginx-emby的使用
我打包了一份commit为a065850的源码文件,方便(๐•ᴗ•๐)们直接下载使用,链接为:https://zmgg.lanzout.com/iDQ2Z20flhta(你也可以选择去原仓库拉取源码)。下载该压缩包后,解压后修改如下提及的文件。
.
├── compose.yaml # 注意修改映射(๐•ᴗ•๐)径,有些设备不支持相对(๐•ᴗ•๐)径写法
├── nginx
│ ├── conf.d
│ │ ├── api
│ │ │ ├── alist-api.js
│ │ │ └── emby-api.js
│ │ ├── cert
│ │ ├── common
│ │ │ ├── events.js
│ │ │ ├── perio(๐•ᴗ•๐)s.js
│ │ │ └── util.js
│ │ ├── config
│ │ │ ├── constant-common.js
│ │ │ ├── constant-ext.js
│ │ │ ├── constant-mount.js # 修改alist内网地址、token、公网地址
│ │ │ ├── constant-pro.js # [可选]一般不改,使用strm的(๐•ᴗ•๐)根据embyPathMapping的注释修改该变量的内容
│ │ │ ├── constant-strm.js
│ │ │ ├── constant-symlink.js
│ │ │ └── constant-transcode.js
│ │ ├── constant.js # 修改emby的内网地址、api密钥、多出来的挂载(๐•ᴗ•๐)径
│ │ ├── emby.conf
│ │ ├── emby.js
│ │ ├── emby-live.js
│ │ ├── emby-transcode.js
│ │ ├── externalUrl.js # 修改serverAddr为emby公网地址【如果无,留空】
│ │ └── includes
│ │ ├── http.conf
│ │ ├── https.conf
│ │ ├── proxy-header.conf
│ │ └── server-group.conf
│ └── nginx.conf
└── README.md
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
1. 修改nginx/conf.d/constant.js
embyMountPath
,填为多出来的挂载目录。
2. 修改nginx/conf.d/config/constant-mount.js
alistSignEnable
是填true还是false,根据alist添加网盘时是否启用签名
来定:
3. 修改nginx/conf.d/externalUrl.js
修改其中的serverAddr = 'https://emby.xxx.com';
即可。如果没有搞反代,这里似乎可以留空serverAddr = ''
。
这样就整合了embyAddExternalUrl
的功能:在电影/电视的海报页底部,添加了一排调用第三方播放器的入口,如:
4. [可选]修改nginx/conf.d/emby.conf
如果你想配置反代,用emby.xxx.com
域名绑定到该服务上,反代http端口8091就足够,这一步可以跳过。
该docker服务部署后,默认是暴露http协议下的8091端口的。也就是说你的emby服务器地址通过http://192.xxx.xxx.xxx:8091
访问即是需要使用emby2Alist这一外置工具来处理emby media server接收到的请求。如果你的播放器客户端继续填http://192.xxx.xxx.xxx:8096
,那就相当于使用原来的emby服务,不使用emby2Alist来处理请求。
如果你想通过https://192.xxx.xxx.xxx:8095
或者https://ip.yourdomain.com:8095
,即不配置反代的条件下通过https来访问,你需要把一份证书放到cert
文件夹下,并按照nginx/conf.d/includes/https.conf
里的代码提示,你需要改名为:
并取消nginx/conf.d/emby.conf
中的如下注释:
5. 创建并启动容器
完成上述修改后,创建容器就行了。如果你是威联通/群晖等NAS,如果不支持compose.yaml里填写相对(๐•ᴗ•๐)径,请把compose.yaml挂载目录里的相对(๐•ᴗ•๐)径改为绝对(๐•ᴗ•๐)径。
启动容器后,有强迫症的可以在终端下输入netstat -lntp |grep 809
,查看是否有8091或8095端口服务(必有emby media server的8096端口):
测试
容器正常启动后,使用emby播放器客户端,通过主机http[s]://ip或域名
,端口8091
(如果你配了反代,那就是主机https://域名
,端口443
)来连接emby media server。
进入后台设置,创建一个媒体库,文件夹
添加容器映射后的网盘(๐•ᴗ•๐)径,如/mnt/115/电影
。
等慢慢刮削完后,点击播放视频,查看日志docker exec -it nginx-emby tail -f /var/log/nginx/error.log
,若出现如下信息,则表示直链播放成功:
有的(๐•ᴗ•๐)不想看日志,通过(๐•ᴗ•๐)察cd2的下载列表来判断是否走了直链,如果cd2里没有属于对应资源的下载,且emby可以正常播放,那就是走了直链。
补充
- 不支持转码。因为相当于是外网设备直接和网盘的媒体文件之间进行串流,所以不支持转码。如果你的库里全装的是来自网盘里的4K原盘、4K Remux,那么外网播放似乎有点奢侈。因为一个原盘可能近50甚至100GiB,外网看完一部这样的影视,得消耗多少流量?
- 能否流畅播放,取决于外网设备的对网盘文件的下载速度,因此开网盘会员+高下载带宽可能获得更好体验。我看的片少,不知道最高码率多大。如果你的好基友(or npy?)家是千兆带宽,你为爱发电买了网盘会员,他应该能流畅看大部分电影了。
教程已发布在💊论坛,链接为:https://invites.fun/d/24222
参考:
- https://gith(๐•ᴗ•๐).com/bpking1/embyExternalUrl
- https://gith(๐•ᴗ•๐).com/chen3861229/embyExternalUrl
- https://gith(๐•ᴗ•๐).com/shenxianmq/Auto_Symlink
- https://invites.fun/d/23667
- 和群友吹水的记录