☰
LunaTV 播放源订阅配置怎么做:5 分钟搭出一套可自动更新的播放源体系
2026/10/14 2:19:30 网站建设 项目流程

LunaTV 播放源订阅配置怎么做:5 分钟搭出一套可自动更新的播放源体系

【免费下载链接】LunaTV本项目采用 CC BY-NC-SA 协议,禁止任何商业化行为,任何衍生项目必须保留本项目地址并以相同协议开源项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTV

LunaTV 刚部署完,首页空空荡荡,一条能播的源都没有——这是每个新手站长的第一道坎。解法不是逐个粘贴源地址,而是 LunaTV 的订阅配置:把一整套播放源配置压缩成一条订阅链接,后台拉取即生效,再开自动更新长期保鲜。

概念先行:一条链路看懂订阅配置怎么生成、拉取与自动更新

先建立全局认知,整条链路只有六步:

一份 JSON 配置文件(含播放源、分类、直播源)→Base58 编码→托管成链接→后台拉取解码→校验保存生效→(可选)自动更新定期重拉。

也就是说,"订阅链接"本质是配置文件的压缩分发形态:你维护的是一份 JSON,别人拿到的是一个 URL,中间的编解码、校验、入库全部由系统代劳。

播放源配置生效后,首页的"继续观看""热门电影"就会按api_site里的源填充内容。

分角色实操

站长侧:LunaTV 订阅链接怎么生成

分三步走:

  1. 写好 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": "华语" } ] }
  1. Base58 编码。用bs58库或任意在线编码工具把整个文件编码成一长串字符。系统硬性要求订阅地址返回的是编码后的字符串,不是 JSON 明文。
  2. 静态托管。把编码结果放到任意静态服务(自有站点静态目录、对象存储均可),得到的 URL(形如https://example.com/config.json)就是订阅链接。

原始 JSON 留在本地;以后改配置就"重新编码 → 替换托管文件",订阅即完成一次版本迭代,用这份订阅的所有人同步受益。

用户侧:后台拉取配置的完整步骤

登录站长账号进入管理后台,定位到"配置订阅"卡片(对应源码 src/app/admin/page.tsx 中的ConfigFileComponent),四步走:

  1. 在订阅URL输入框粘贴订阅地址(占位示例为https://example.com/config.json);
  2. 点绿色拉取配置按钮。后端请求该地址、做 Base58 解码,成功后自动把 JSON 填入下方的配置文件文本框(接口实现见 src/app/api/admin/config_subscription/fetch/route.ts);
  3. 花十秒检查解码出的 JSON 是否完整,字段缺失别急着往下走;
  4. 点保存。后端再次执行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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询