LunaTV 直播接入 IPTV:一条 M3U 订阅变成高清频道列表的完整教程
【免费下载链接】LunaTV本项目采用 CC BY-NC-SA 协议,禁止任何商业化行为,任何衍生项目必须保留本项目地址并以相同协议开源项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTV
收藏夹里躺着一堆 IPTV 订阅链接,却找不到稳定的播放器?LunaTV 直播能帮你把一条 M3U 订阅变成可分组、带节目单的频道列表,在浏览器里直接开播。
直播功能能做什么
- 解析 M3U 订阅,自动按 group-title 归类频道
- 拉取 XMLTV 节目单(EPG),展示今日在播与预告
- 多订阅源并行管理,一键刷新频道列表
- 内置 HLS 播放器,支持换源与频道收藏
最短上手路径
- 部署项目:
git clone https://gitcode.com/GitHub_Trending/lu/LunaTV,按 README 的 Docker Compose 拉起 LunaTV + Kvrocks 两个容器。注意部署后是空壳,不含内置直播源,订阅要自己收集。 - 进管理页的「直播源配置」,点「添加直播源」:填 M3U 链接、EPG 地址(可选)和 User-Agent,再点「刷新直播源」,频道数会自动回填。
- 进直播页:选择源、按分组浏览频道,点任意频道即播,下方节目单条会自动滚到正在播出的位置。
参数速查:四个字段各管什么
| 参数 | 作用 | 默认值 / 来源 |
|---|---|---|
| M3U 订阅链接 | 频道列表的来源,核心解析逻辑在 src/lib/live.ts | 必填,支持 http/https |
| EPG 地址 | XMLTV 节目单;M3U 头带 x-tvg-url 时可留空,自动识别 | 可选,缺省回退到 x-tvg-url |
| User-Agent | 模拟播放器身份,部分源有防盗链校验 | 默认AptvPlayer/1.4.10 |
| 频道数量 | 刷新后自动回填,用于快速判断拉取成败 | 显示 0 表示这次拉取失败 |
容易被忽略的三个能力
频道智能缓存📺。频道列表首次访问后会被存进内存缓存,之后切换分组、刷新页面都是秒开,不再重复拉订阅;源变动后在管理页手动刷新即可,刷新时会清掉旧缓存。
节目单流式解析。EPG 的 XML 体积往往很大,LunaTV 直播用 ReadableStream 逐行读取,只保留订阅里实际出现的 tvg-id 对应节目,把不相关频道直接标记跳过,避免大文件撑爆内存。
播放器换源⚡。基于 ArtPlayer 与 HLS.js,右侧面板列出各资源的带宽与延迟,哪个快切哪个;频道可直接收藏备用。实现见 src/app/live/page.tsx。
对照排障
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 频道列表为空 | 订阅源失效,或需要特定 UA | 换有效订阅,或调 UA 后重新刷新 |
| 没有节目单 | EPG 地址填错,或 tvg-id 对不上 | 核对两个文件里同一频道的 tvg-id 字段是否一致 |
| 部分频道无法播放 | 源本身失效,与 LunaTV 无关 | 换源,或把能播的频道加入收藏 |
适合手头有 M3U 订阅、想开箱即看直播的用户;下一步先把常用频道加入收藏,再挑几个稳定的源固定下来,日常看就省心了。
【免费下载链接】LunaTV本项目采用 CC BY-NC-SA 协议,禁止任何商业化行为,任何衍生项目必须保留本项目地址并以相同协议开源项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTV
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考