前言
假如你的网盘内容通过cd2/rclone挂载后,映射到plex容器中的(๐•ᴗ•๐)径树为:
/share/SSD1T/03cd2
├── 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(๐•ᴗ•๐)径多了/share/SSD1T/03cd2
,这就是“多出来的挂载目录”。
通过nginx-plex这个docker应用,可以将plex对本地资源/share/SSD1T/03cd2/xxxx
通过劫持修改为对https://alist域名.com/xxxx
的请求,正好alist又支持302重定向,因此https://alist域名.com/xxxx
的请求会变成网盘的直接链接,从而不会占用NAS本地的带宽。
准备
- 已经部署了plex media server,记录其端口为
32400
。
- 已经部署了alist,并在后台管理->设置->其他,获取
alist令牌
。
- 使用clouddrive2或者rclone来挂载网盘到NAS某(๐•ᴗ•๐)径下,如
/share/xxxx
,并映射到plex容器中为/share/SSD1T/03cd2
。
nginx-plex的使用
我打包了一份commit为a065850的源码文件,方便(๐•ᴗ•๐)们直接下载使用,链接为:https://zmgg.lanzout.com/icg8620fhewb(你也可以选择去原仓库拉取源码)。下载该压缩包后,解压后修改如下提及的文件。
├── compose.yaml # 注意修改映射(๐•ᴗ•๐)径,有些设备不支持相对(๐•ᴗ•๐)径写法
├── nginx
│ ├── conf.d
│ │ ├── api
│ │ │ └── alist-api.js
│ │ ├── common
│ │ │ ├── events.js
│ │ │ ├── perio(๐•ᴗ•๐)s.js
│ │ │ └── util.js
│ │ ├── config
│ │ │ ├── constant-common.js
│ │ │ ├── constant-ext.js
│ │ │ ├── constant-mount.js # 修改alist内网地址、token、公网地址
│ │ │ ├── constant-pro.js
│ │ │ ├── constant-strm.js
│ │ │ ├── constant-symlink.js
│ │ │ └── constant-transcode.js
│ │ ├── constant.js # 修改plex的内网地址、多出来的挂载目录
│ │ ├── includes
│ │ │ ├── http.conf
│ │ │ ├── https.conf
│ │ │ └── proxy-header.conf
│ │ ├── plex.conf
│ │ └── plex.js
│ └── 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
![10_46_37-1716979596678.png](https://img.idzc.top/picgoimg/2024/05/29/10_46_37-1716979596678.png)
plexMountPath
,填为多出来的挂载目录。
2. 修改nginx/conf.d/config/constant-mount.js
![10_48_41-1716979720724.png](https://img.idzc.top/picgoimg/2024/05/29/10_48_41-1716979720724.png)
alistSignEnable
是填true还是false,根据alist添加网盘时是否启用签名
来定:
![21_01_02-1715806861345.png](https://img.idzc.top/picgoimg/2024/05/15/21_01_02-1715806861345.png)
3. 添加https访问
1)由于plex的一些客户端对https协议连接有过度倾向,所以建议配上https。
2)可以通过反代32410端口到域名https://plex.xxx.com
。
然后通过http://127.0.0.1:32400或http://192.168.xxx.xxx:32400修改pms的设置->网络->自定义服务器访问 URL
,将该域名添加到此处:
https://plex.xxx.com:443
if(window.hljsLoader && !document.currentScr(๐•ᴗ•๐).parentNode.hasAttribute('data-s9e-livepreview-onupdate')) {
window.hljsLoader.highlightBlocks(document.currentScr(๐•ᴗ•๐).parentNode);
}
建议只填https://plex.xxx.com:443`,保证所有客户端连接pms时,都是通过该域名进行连接的。
3)关闭中转:
![10_57_48-1716980267739.png](https://img.idzc.top/picgoimg/2024/05/29/10_57_48-1716980267739.png)
做完上述步骤,需要浏览器打开https://plex.xxx.com
完成一次pms验证(类似pms认领之类的)。
创建并启动容器
完成上述修改后,创建容器就行了。
启动容器后,有强迫症的可以在终端下输入netstat -lntp |grep 324
,查看是否有32410端口服务。
测试
容器正常启动后,使用plex播放器客户端,连接pms(如果你之前连接过,建议退出登录重新连接,避免玄学缓存问题。或者点击头像切换账户,重新输入PIN进入自己账户来刷新连接线(๐•ᴗ•๐)。)。
进入后台设置,创建一个媒体库,文件夹
添加cd2挂载到本地的网盘里的(๐•ᴗ•๐)径,如/share/SSD1T/03cd2/115/电影
。这里最好找一个影视数量少的网盘(๐•ᴗ•๐)径做个测试,防止plex2alist配置的有问题,而影视又过多,进行大量的刮削,导致NAS非常卡。
等慢慢刮削完后,点击播放视频,查看日志docker exec -it nginx-plex tail -f /var/log/nginx/error.log
,若出现如下信息,则表示直链播放成功:
![11_51_58-1716033117846.png](https://img.idzc.top/picgoimg/2024/05/18/11_51_58-1716033117846.png)
教程结束。
问题
不支持转码。因为相当于是外网设备直接和网盘的媒体文件之间进行串流,所以不支持转码。如果你的库里全装的是来自网盘里的4K原盘、4K Remux,那么外网播放似乎有点奢侈。因为一个原盘可能近50甚至100GiB,外网看完一部这样的影视,得消耗多少流量?
能否流畅播放,取决于外网设备的对网盘文件的下载速度,因此开网盘会员+高下载带宽可能获得更好体验。我看的片少,不知道最高码率多大。如果你的好基友(or npy?)家是千兆带宽,你为爱发电买了网盘会员,他应该能流畅看大部分电影了。
很多用plex的(๐•ᴗ•๐)似乎有减少pms对网盘读取频率的特殊技巧,我不是很会,求各位大佬指点。
教程已发布在💊论坛,链接为:https://invites.fun/d/24269
参考:
- https://gith(๐•ᴗ•๐).com/bpking1/embyExternalUrl
- https://gith(๐•ᴗ•๐).com/chen3861229/embyExternalUrl
- 和群友吹水的记录