“EPG 无法加载”是在 Android TV 上设置 IPTV 的人最常见的抱怨,而且几乎所有原因在用户看来都一模一样:频道列表正常、视频能播,但节目单一片空白。好消息是故障模式很有限——大约就六种,其中大多数几分钟内就能排除。
本指南按照值得检查的顺序逐一讲解。如果开始之前先把您的 XMLTV 链接粘进 EPG 校验器,第 2–4 步可以直接跳过。
频道 ID 按字节精确匹配:一个大写字母就足以让频道的节目单变成空白。
1. 确认您真的有一条 EPG 链接
要验证的第一件事,是您是否配置了节目单来源。有些 IPTV 服务商把频道列表(M3U)和节目单(XMLTV)作为两条独立链接提供,而相当多用户只设置了其中一条,还以为另一条是随附的。
打开播放器的来源设置,找找有没有两个不同的输入框。M3U 链接以 .m3u、.m3u8 结尾,或包含 type=m3u_plus;XMLTV 链接通常以 .xml、.xml.gz 结尾,或包含 xmltv.php。如果只填了一个框,问题就在这里。大多数 Xtream 式服务商在与播放列表相同的主机名下提供 XMLTV;路径通常是 /xmltv.php?username=…&password=…,凭据相同。
2. 确认链接真的返回 XMLTV
把链接粘到浏览器里。您应该看到 XML——以 <?xml 或 <tv> 开头、满是 <channel> 和 <programme> 标签的文本。如果看到的是一个 HTML 页面,说明服务商把您重定向到了登录页或强制门户,您的播放器收到的也是同样的响应。解决办法在服务商那边:这条链接需要另外的凭据或新的令牌。
如果看到的是 XML 但非常小——不到几 KB——说明服务商返回了一份空文档。这同样是他们的问题;几千个频道的 XMLTV 文件大多在 5–50 MB。
3. 检查文件结构
这正是 EPG 校验器大显身手的地方。把链接粘进校验器,看顶部的四个数字:
- 频道数。应与您 M3U 里的频道数量大致相符。如果只有十分之一,说明这份文件不是服务商的完整节目单。
- 节目数。应该有数千条。总共不到 100 条节目的节目单渲染不出任何有用的东西。
- 未来 24 小时覆盖。最重要的一个数字。如果为零,说明节目单已过期——文件能解析,但里面每一条都是过去的。播放器没有可显示的内容。
- 总小时数。健康的 EPG 从当前时刻起向后覆盖 24–168 小时。小于 24 意味着节目单今天就会用尽。
4. 查看问题面板
如果数字看起来没问题但节目单仍然是空的,下一个要看的是校验器的问题列表。真实服务商的输出里常见三种问题:
孤儿节目。节目引用的频道 ID 没有在同一文件中声明为 <channel>。严格的播放器(大多数现代 Android TV 播放器)会在导入时丢弃它们——节目找不到可挂靠的频道,于是消失。如果服务商只有几百条孤儿节目,属于正常且无害;如果有好几万条,这就是您节目单大片空白的原因。
重复频道。同一个频道 ID 在 <channel> 中出现多次。大多数解析器保留第一条声明,其余静默丢弃。如果被丢弃的那条显示名不同,频道会出现在节目单里,但标签是错的。
无当前播出覆盖。校验器的头号检查:现在此刻有没有频道在播节目?如果答案是零,即便 XMLTV 文件在技术上有效,任何行为规范的播放器都会把节目单渲染成全空。节目单过期了,需要服务商刷新。
5. 核对频道 ID 匹配
这一条几乎绊倒所有人。XMLTV 里 <channel id="…"> 的值必须与您 M3U 里的 tvg-id="…" 完全一致。区分大小写,没有模糊匹配。如果 M3U 写的是 tvg-id="bbc1" 而 XMLTV 写的是 <channel id="BBC1">,播放器无法把两者对上,该频道的节目单格子就是空白。
检查方法:用文本编辑器打开您的 M3U,随便看一个 tvg-id 值,再到校验器的“Top channels”表里查同一个频道。两边的 ID 应当逐字节一致。如果不一致,您有三个选择:
- 找服务商要一份 tvg-id 映射文件(有些会公开)。
- 手动编辑 M3U,使其与 EPG 中的 ID 一致。
- 换一款按显示名做模糊匹配的播放器。Klipa 支持——但大多数不支持。
6. 检查时区
XMLTV 规范使用 YYYYMMDDHHMMSS +ZZZZ 格式的时间戳。有些服务商把偏移量去掉了,留下不带时区的裸时间戳。严格的解析器把它们当 UTC;宽松的解析器按系统区域设置来猜;两者都可能猜错,结果就是节目单整体偏移好几个小时——节目出现在错误的时间格里,或者昨晚的节目被当成今天的。
如果节目单内容看着都对、只是时间错位,几乎可以肯定就是这个原因。修复方式不太优雅:您需要一个把所有时间戳平移 N 小时的工具。在我们的 EPG 时区调整器上线之前,权宜之计是给服务商提个工单,请他们在输出中带上时区偏移。
都不行的时候
如果六条都查完节目单还是加载不出来,问题就在播放器本身。大多数现代 IPTV 播放器会激进地缓存 EPG——有时刷新后还会缓存好几个小时。强制清除 EPG 缓存,或者卸载重装应用以强制干净导入。
Klipa 不缓存过期 EPG:默认每六小时重新拉取,也可以在设置中手动刷新。如果您想要一款开箱即用、把这六种故障模式都处理妥当的播放器,这就是我们的卖点。