IPTV EPG 节目单教程:给 M3U 直播源添加 XMLTV 节目单
EPG(电子节目单)显示每个频道正在播什么、接下来播什么。本文讲清 IPTV 播放列表如何关联 XMLTV 节目单、节目单从哪里来,以及节目单不显示时怎么排查。
EPG 是什么
EPG(电子节目单)就是频道的节目表:正在播什么、下一个节目是什么,以及接下来几个小时的安排。IPTV 播放器几乎都读取 XMLTV 格式的节目单。它是一个普通的 XML 文件,包含两类条目:
<channel id="…">:节目单里的每个频道;<programme start="…" stop="…" channel="…">:每个节目的标题、简介以及开始和结束时间。
覆盖几百个频道的节目单体积很大,所以常以 .xml.gz 压缩格式提供。
M3U 直播源如何关联节目单
播放列表和节目单是两个独立的文件,靠两个地方关联:
- 播放列表头部用
url-tvg(有的服务商写成x-tvg-url)写明节目单地址,多个地址用逗号分隔。 - 每个频道带一个
tvg-id,它必须和节目单里的某个<channel id>完全一致,播放器才知道哪些节目属于哪个频道。
#EXTM3U url-tvg="https://example.com/guide.xml.gz"
#EXTINF:-1 tvg-id="NewsChannel.us" tvg-logo="https://example.com/news.png" group-title="新闻",News Channel
https://example.com/live/news/index.m3u8
如果 tvg-id 缺失或与节目单写法不同,频道照样能播放,但不会显示节目单。
EPG 地址从哪里来
- 你的 IPTV 服务商。大多数付费服务会在播放列表链接旁边提供节目单地址,或直接写在播放列表头部。
- 公开频道的社区节目单。像 iptv-org/epg 这样的开源项目收集免费频道的节目信息。都播的频道页使用 i.mjh.nz 发布的免费流媒体服务节目单。
- 自带节目单的公开播放列表。公开播放列表页面上的 Free-TV 和 iptv-org 列表已经带有
x-tvg-url,加入后节目单会自动加载。
在都播中使用 EPG
都播会自动读取播放列表中声明的节目单,无需任何设置:
- 导入头部带有
url-tvg、x-tvg-url或tvg-url的 M3U / M3U8 链接或文件。 - 都播下载 XMLTV 节目单(支持普通和 gzip 压缩格式),按
tvg-id匹配频道,并缓存六小时。 - 打开频道,播放页会显示正在播出和接下来的节目。如果播放列表还声明了回看,可以从节目单回放已播出的节目。
导入播放列表的具体步骤见使用教程。
节目单不显示怎么办
- 完全没有节目单:用文本编辑器打开播放列表,看第一行有没有
url-tvg。没有的话,向服务商索取节目单地址。 - 部分频道为空:把这些频道的
tvg-id和节目单里的频道 id 对照。M3U 工具可以统计有多少条目带tvg-id。 - 时间整体偏移:这个频道的节目单时区写错了,换一个节目单来源。
- 加载很慢:超大节目单首次加载需要一些时间。优先使用
.xml.gz格式,或只覆盖你常看国家的节目单。
常见问题
EPG 地址是什么?
它是一个 XMLTV 文件的地址(通常以 .xml 或 .xml.gz 结尾),里面列出许多频道的节目。播放列表在第一行用 url-tvg 或 x-tvg-url 指向它,播放器下载后填充节目单。
为什么我的直播源没有节目单?
常见原因有三个:播放列表没有 url-tvg / x-tvg-url,节目单地址已失效,或者频道没有与节目单中频道 id 对应的 tvg-id。先逐一检查这三项。
节目单时间为什么不对?
XMLTV 的时间带有时区偏移(例如 +0000 或 +0800),播放器会换算成你的本地时间。如果所有节目都差同样的小时数,说明节目单文件本身的时区写错了,可以换一个节目单来源。
EPG 是免费的吗?
很多是免费的。IPTV 服务商通常随订阅提供节目单,社区项目也为公开频道发布免费节目单。节目单只描述节目,不会让你获得任何频道的观看权限。