LunaTV 换源 3 分钟,播放源自动跟着更新
【免费下载链接】LunaTV本项目采用 CC BY-NC-SA 协议,禁止任何商业化行为,任何衍生项目必须保留本项目地址并以相同协议开源项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTV
你手里有一份别人分享的播放源订阅地址,想接到刚跑起来的 LunaTV 上,又不想手改 JSON。LunaTV 的配置订阅就是干这个的:地址贴进管理后台,拉取解码出整份配置,保存后播放源立刻换新;再打开自动更新,源一更新你的站跟着刷,不用人工碰文件。全程约 3 分钟,是 LunaTV 换源教程里最省事的一条路。
你拿到地址之后的第一件事:确认它是编码过的
订阅接口不认任意 JSON 链接。服务端把 URL 返回的内容拿来跑一遍 Base58 解码——还原成原始 JSON 文本。所以链接必须返回 Base58 编码过的字符串,不能是明文 JSON。
- 用浏览器直接打开这个地址看一眼。
- 看到
Lk3qX…这类字母数字串,就能用。 - 看到
{ "api_site": … }明文,说明对方没编码,让他重发或换个地址。
踩坑提醒:明文 JSON 拉不动。服务端只对 Base58 文本解码,看到明文就是地址不对,换掉重试。
把地址贴进后台,拉取并保存
- 用站长账号登录(拉取和保存都只对站长开放,接口只放行环境变量
USERNAME对应的那个账号),进管理后台,展开配置文件标签页。 - 在配置订阅卡片的订阅URL输入框里贴入地址。
- 点拉取配置。成功提示
配置拉取成功,解码出的 JSON 自动回填到下方编辑框。 - 扫一眼编辑框,这是整份配置:播放源
SourceConfig、自定义分类CustomCategories、直播源LiveConfig都在里面。 - 按需打开自动更新开关,点保存。
拉取走 配置订阅拉取接口;保存走 配置文件管理接口,它先JSON.parse校验再落盘,同时写入订阅 URL、自动更新开关和最后检查时间。成功提示配置文件保存成功,卡片右上角最后更新时间刷新,新源立刻能搜能播,不用重启。
保存那一刻,服务端做了什么
手动这一路是:fetch 订阅 URL → Base58 解码 → 回填编辑框 → 保存时JSON.parse校验 → 通过才写ConfigFile,并更新ConfigSubscribtion的 URL、AutoUpdate、LastCheck。前台读的是落盘后的配置,所以新源即时生效。字段含义可对照 配置文件数据结构。
开了自动更新之后,它会自己刷
定时任务由 定时任务实现 驱动,触发时只认两个条件:订阅 URL 已填、自动更新开关开着。都满足才跑"拉取 → 解码 → 校验 → 覆盖保存";缺一就跳过,只记一条跳过刷新:未配置订阅地址或自动更新。这等于让播放源自动更新。
拉取、解码、校验任一步失败,只写一条刷新配置失败日志,不动现有配置,前台继续用旧的。频率取决于部署平台,仓库vercel.json默认每天 01:00 一次(0 1 * * *),其他环境以实际版本为准。想更频繁,去对应平台改触发频率;不想等平台,直接请求/api/cron接口立刻跑一次。
现象 → 排查
| 现象 | 排查动作 |
|---|---|
拉取配置失败 | 多半返回的不是 Base58 文本,或 URL 访问不到;浏览器确认,换地址重试 |
权限不足,只有站长可以拉取配置订阅 | 当前不是站长账号;只有USERNAME那个账号能操作,换站长登录 |
配置文件格式错误,请检查 JSON 语法 | 保存前JSON.parse没过;编辑框 JSON 有语法问题,改完再保存 |
自动更新开着,最后更新不动 | 定时任务没触发,或拉取/解码/校验某步失败被静默记日志;用手动拉取验证地址是否还有效 |
想自己发布一个订阅源给别人
把本地配置 JSON 做 Base58 编码,得到一个订阅地址,放到公网可访问处分享给对方,对方贴进订阅URL即可。装一下bs58包即可运行下面片段。
const bs58 = require('bs58'); const encoded = bs58.encode(Buffer.from(JSON.stringify(config)));多个实例要同步,把同一 URL 填进每个实例的订阅卡片即可,各自独立保存,没有中心节点。USERNAME、NEXT_PUBLIC_STORAGE_TYPE的取值见 README。
之后要换源,把订阅URL改成新地址重新拉取一次就行,自动更新开关的状态会保留。
【免费下载链接】LunaTV本项目采用 CC BY-NC-SA 协议,禁止任何商业化行为,任何衍生项目必须保留本项目地址并以相同协议开源项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTV
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考