这是一个把 139 网盘分享链接整理成可播放、可挂库、可批量生成 .strm 的小工具。
HLS播放链不是原画质,它更偏向“网页可直接播放的流”- 想要更接近原文件画质,请使用
download-only模式 - 如果你想实验“固定
/media入口 + 每次请求都 302 到最新下载直链”,可以使用download-redirect - 如果你更看重稳定直播放,优先用
mixed - 如果你更看重原始质量,优先用
download-only
它适合拿来做这些事:
- 把 139 分享链接批量生成成
.strm - 给 Emby / Jellyfin / Kodi 提供统一播放入口
- 在网页面板里导入 139 登录态
- 用 WebDAV 暴露已经生成好的库
这个项目的思路很简单:
- 如果 139 页面本身能给出 HLS 播放地址,就优先直接播放
- 如果没有 HLS,就按当前下载模式走下载代理或实验性直跳
- 生成出来的
.strm都走统一入口/media
这样做的好处是:
- 链接结构统一
- 面板里可以切换模式
- 下载直链过期时,不需要你手动重做整库
cp config.example.json config.json
npm start默认地址:
http://127.0.0.1:8787
控制面板:
http://127.0.0.1:8787/panel
默认监听地址是:
0.0.0.0:8787
也就是说:
- 本机访问通常还是用
http://127.0.0.1:8787 - 局域网访问则用宿主机自己的 IP,例如
http://192.168.x.x:8787
推荐顺序:
- 打开控制面板
- 去“导入认证”页,把你当前浏览器里的 139 登录态导进来
- 去“配置”页确认模式
- 去“生成 STRM”页粘贴分享链接
- 等任务跑完后,把生成目录挂到播放器里
推荐默认用这个。
- 页面有 HLS 就直接走 HLS
- 没有 HLS 才回退到下载代理
适合大多数日常播放场景。
- 所有请求都走下载代理
- 更接近原始文件
- 依赖 139 登录态
适合网页本身不提供 HLS,或者你明确只想走原文件代理的时候。
.strm入口仍然是/media/media在每次请求时都会解析最新下载直链并返回302- 不走本机转发流量
- 稳定性取决于播放器是否会重新请求入口
适合你想实验“尽量省 NAS 流量”的场景,但它没有 download-only 稳。
默认情况下,面板里的输出目录是:
./output-panel
也就是说:
- 本地运行时,默认会生成到项目目录下的
output-panel/ - Docker 运行时,默认会生成到容器里的
/data/output-panel
mkdir -p ./data说明:
- 如果
./data/config.json不存在,容器启动时会自动从镜像内的config.example.json复制一份到./data/config.json - 所以第一次跑起来后,你的挂载目录里就能直接看到配置文件
使用 GHCR:
docker run -d \
--name share139-proxy \
-p 8787:8787 \
-v "$(pwd)/data:/data" \
ghcr.io/2982136527/share139-proxy:latest使用 GHCR:
services:
share139-proxy:
image: ghcr.io/2982136527/share139-proxy:latest
container_name: share139-proxy
ports:
- "8787:8787"
volumes:
- ./data:/data
restart: unless-stopped启动:
docker compose up -d使用 Docker Hub:
services:
share139-proxy:
image: docker.io/qiuhusama/share139-proxy:latest
container_name: share139-proxy
ports:
- "8787:8787"
volumes:
- ./data:/data
restart: unless-stopped这份映射:
volumes:
- ./data:/data已经把配置、运行状态、输出目录都一起挂出来了。
比如:
- 配置文件:
./data/config.json - 任务历史:
./data/.share139-runtime.json - 默认输出目录:
./data/output-panel - 如果你自己把输出目录改成
./libraries,那实际路径就是./data/libraries
所以这里不需要再额外挂一个单独的输出目录 volume。
推荐流程:
- 打开面板里的“导入认证”
- 点击“复制采集脚本”
- 在同一个浏览器里打开并登录
yun.139.com - 把脚本贴到控制台执行
- 回面板粘贴采集结果并导入
这个流程是你自己主动导入当前登录态,不是去拦截官方登录。
你可以一次提交多条分享链接。
系统会自动:
- 把它们归到同一个批次
- 给每条分享创建一个子任务
- 支持按批次取消
- 支持重试失败项
- 支持清空已经结束的历史任务
不会。
服务端会把批次和子任务历史保存到:
.share139-runtime.json
所以服务重启以后:
- 任务历史还在
- 失败记录还在
- 排队中的任务也可以恢复
另外,生成 STRM 页里的输入内容也会保存在浏览器本地,刷新页面不会直接清空。
如果你只把它当面板工具用,其实不太需要关心接口。
如果你要自己对接,可以看这些:
/health/api/config/api/status/api/generate/api/test-mode/api/batch/cancel/api/batch/retry-failed/api/tasks/clear-history/media/dav/...
常用的几个:
modedownloadProxyChunkSizedownloadLinkCacheTtlSecondsrequestConcurrencyrequestRetriesplayableVideoSuffixesdownloadVideoSuffixesauth.accountauth.accountTypeauth.authorizationauth.mcloudSkey
如果你不想手改文件,也可以直接在面板里改。
GNU AGPL v3
