LunaTV 播放源订阅配置怎么做:5 分钟搭出一套可自动更新的播放源体系
【免费下载链接】LunaTV本项目采用 CC BY-NC-SA 协议,禁止任何商业化行为,任何衍生项目必须保留本项目地址并以相同协议开源项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTV
LunaTV 刚部署完,首页空空荡荡,一条能播的源都没有——这是每个新手站长的第一道坎。解法不是逐个粘贴源地址,而是 LunaTV 的订阅配置:把一整套播放源配置压缩成一条订阅链接,后台拉取即生效,再开自动更新长期保鲜。
概念先行:一条链路看懂订阅配置怎么生成、拉取与自动更新
先建立全局认知,整条链路只有六步:
一份 JSON 配置文件(含播放源、分类、直播源)→Base58 编码→托管成链接→后台拉取解码→校验保存生效→(可选)自动更新定期重拉。
也就是说,"订阅链接"本质是配置文件的压缩分发形态:你维护的是一份 JSON,别人拿到的是一个 URL,中间的编解码、校验、入库全部由系统代劳。
播放源配置生效后,首页的"继续观看""热门电影"就会按api_site里的源填充内容。
分角色实操
站长侧:LunaTV 订阅链接怎么生成
分三步走:
- 写好 JSON 配置文件。最小可用版本如下:
{ "cache_time": 7200, "api_site": { "dyttzy": { "api": "http://example.com/api.php/provide/vod", "name": "示例资源", "detail": "http://example.com" } }, "custom_category": [ { "name": "华语", "type": "movie", "query": "华语" } ] }- Base58 编码。用
bs58库或任意在线编码工具把整个文件编码成一长串字符。系统硬性要求订阅地址返回的是编码后的字符串,不是 JSON 明文。 - 静态托管。把编码结果放到任意静态服务(自有站点静态目录、对象存储均可),得到的 URL(形如
https://example.com/config.json)就是订阅链接。
原始 JSON 留在本地;以后改配置就"重新编码 → 替换托管文件",订阅即完成一次版本迭代,用这份订阅的所有人同步受益。
用户侧:后台拉取配置的完整步骤
登录站长账号进入管理后台,定位到"配置订阅"卡片(对应源码 src/app/admin/page.tsx 中的ConfigFileComponent),四步走:
- 在订阅URL输入框粘贴订阅地址(占位示例为
https://example.com/config.json); - 点绿色拉取配置按钮。后端请求该地址、做 Base58 解码,成功后自动把 JSON 填入下方的配置文件文本框(接口实现见 src/app/api/admin/config_subscription/fetch/route.ts);
- 花十秒检查解码出的 JSON 是否完整,字段缺失别急着往下走;
- 点保存。后端再次执行
JSON.parse校验,通过后视频源、自定义分类、直播源一并更新(保存接口见 src/app/api/admin/config_file/route.ts)。
想快速体验的话,也可以跳过拉取,直接把 JSON 手填进文本框保存——两种方式走的是同一个保存接口。
订阅配置生效后,播放页右侧"换源"面板会列出api_site中所有源,可对比清晰度、码率与延迟自由切换。
配置文件解剖:核心字段速查表
| 字段 | 含义 | 关键子字段 |
|---|---|---|
cache_time | 接口缓存时长(秒) | 数值;缺省按 7200 处理,控制资源站接口结果的缓存时长 |
api_site | 视频源站点列表 | 以站点key为键的对象,每项含api(vod JSON API 地址)、name(界面显示名)、detail(可选,网页详情根 URL) |
custom_category | 自定义分类 | 数组,由type(movie/tv)+query唯一标识,可在导航栏生成个性化影视分类 |
lives | 直播源列表 | 对象,每项含name、url(m3u 地址),可选ua、epg(节目单地址) |
🔎 细节提醒:api_site里的站点务必符合苹果 CMS V10 标准 API 格式,站点key建议只用小写字母和数字,特殊字符容易引发解析问题。
自动更新:开关怎么开,配置自己"保鲜" 🔁
"配置订阅"卡片底部有自动更新开关,提示语为"启用后系统将定期自动拉取最新配置"。开启后,定时任务(对应 src/app/api/cron/route.ts)会按以下顺序执行:拉取订阅地址 → Base58 解码 →JSON.parse校验。全链路通过后写回配置文件、刷新内存中的配置缓存,并记录最后检查时间;任何一步失败都会打日志"刷新配置失败"并跳过,不会动现有内容。
⚠️ 触发前提务必记住:订阅地址已填写 且 开关开启,两者缺一不可,缺一个任务只会打出"跳过刷新:未配置订阅地址或自动更新"然后直接退出。所以开完开关,确认订阅 URL 不是空的。
适合开启的三类场景:
- 源失效频繁的站点:订阅方换了源,你的实例跟着自愈;
- 多实例共享同一份订阅:站长改一次文件,所有开启自动更新的实例同步跟进;
- 反过来,若你要求每次配置变更都经人工确认,就把开关关掉,只走手动拉取。
报错速查:拉取失败怎么处理 ⚠️
| 报错提示 | 常见原因 | 处理方式 |
|---|---|---|
Base58 解码失败(前端表现为"拉取配置失败") | 订阅地址返回的是 JSON 明文,或托管环节被二次加工(加换行、转码) | 确认托管文件内容就是编码后的长字符串,而非配置明文 |
配置文件格式错误,请检查 JSON 语法 | 解码成功但内容非法:多写逗号、缺括号、混入注释 | 先用任意 JSON 校验工具本地验证,修好再重新编码发布 |
权限不足,只有站长可以拉取配置订阅 | 用普通用户账号登录 | 该接口仅站长可用,确认登录的是部署时USERNAME环境变量指定的站长账号 |
不支持本地存储进行管理员配置 | NEXT_PUBLIC_STORAGE_TYPE为localstorage | 把存储类型改为kvrocks、redis或upstash之一后重启 |
| 拉取成功后保存仍报错 | 文本框内容被截断,或key字段重复 | 核对 JSON 完整性;系统对视频源、自定义分类、直播源分别按key去重合并,同 key 以配置文件版本覆盖 |
权限与安全边界:分享订阅链接前必须知道的事 🔒
- 登录身份校验:拉取与保存两个接口都校验登录态,且当前用户名必须与
USERNAME环境变量完全一致,否则直接 401——普通管理员也改不了配置文件。 - 双重 JSON 校验:前端解码后先提示格式错误,后端保存时再执行一次
JSON.parse,脏数据在两层各拦一道。 - 源合并互不覆盖:从配置文件引入的源标记
from: 'config',手动添加的标记from: 'custom'(合并逻辑见 src/lib/config.ts 的refineConfig)。订阅更新只会覆盖同key的源,不会把你手加的源冲掉。 - 协议底线:本项目采用 CC BY-NC-SA 协议,禁止任何商业化行为。订阅链接背后是你站点配置的完整结构,不要把订阅链接和站点地址公开发布到社交平台——泄露等于把家底亮给别人。
面对"空壳"首页时,拉取一条订阅链接即可让源全部就位。动手前两条建议:先备份当前配置文件,再在新订阅生效后实际播放一部片验证源可用;更多字段与环境变量细节,以项目 README 为准。
【免费下载链接】LunaTV本项目采用 CC BY-NC-SA 协议,禁止任何商业化行为,任何衍生项目必须保留本项目地址并以相同协议开源项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTV
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考