九千个频道,你看的只有二十个
iPhone 和 CarPlay 上的 IPTV 频道分组。 是二十个频道,不是九千个。
iPhone 和 CarPlay 上的 IPTV 频道分组来自播放列表文件本身:#EXTINF 行上的 group-title 属性,或者它下面的一行 #EXTGRP。Dashow 在 iPhone 上用这些值搭出电视直播的分组菜单。两者都不声明的播放列表进来是平的,这时把你常看的频道添加到收藏。
- 01
分组写在播放列表里:#EXTINF 行上的 group-title,或者单独一行的 #EXTGRP。
- 02
group-title 是事实上的 M3U 扩展,所以同一个文件在每个播放器里的排法都不一样。
- 03
文件里没有分类时,“收藏”和“最近观看”是最快找到 IPTV 频道的路。
使用方法
快速上手
- 01
在“浏览”里打开电视直播
“浏览”从位置开始,电视直播里放着你的 IPTV 频道。
- 02
用分组菜单
先选来源,再用分组菜单把频道范围缩小。
- 03
把常看的添加到收藏
把你常看的频道标记一下,它们就聚到“收藏”里。
- 04
打开播放列表文件看看
没有分组菜单时,打开那个 .m3u,搜索 group-title 和 #EXTGRP。
一列到底的频道列表,是文件的属性。
你缺的那份分组,不是播放器里的一个设置。它是播放列表里的数据。M3U 是一个文本文件,每个频道至少占两行:一行 #EXTINF 带着这个频道的元数据,紧接着下面是流媒体地址。分类就写在那个地址上面。
所以装着同样频道的两份播放列表,在同一部 iPhone 上表现不同。一份打开时带着新闻、体育、电影这几个分组菜单。另一份打开是九千行排成一列。手机这边没有任何差别。差别在文件。
读一行 #EXTINF,再看看有没有 #EXTGRP。
这是一条完整的频道条目:#EXTINF:-1 tvg-id="123" tvg-name="Channel Name" tvg-logo="http://example.com/logo.png" group-title="News", Channel Name。时长和逗号之间的全部内容是键值元数据,逗号后面的文字是播放器显示的名称。时长写 -1 或 0,表示这是一路没有预定长度的流媒体。
多数播放列表里会出现四个属性,其中一个做出了分类。分组也可以写在单独一行上。#EXTINF 行上的 group-title 优先;它不存在时,下面那一行 #EXTGRP 为紧随其后的条目指定分组。用纯文本编辑器把 .m3u 里这两样都搜一遍,因为一个文件可以带着分类,却全文没有 group-title。
- tvg-id,服务商分配给这条频道条目的标识符。
- tvg-name,来源那边写法的频道名称,和逗号后面的显示名称分开存放。
- tvg-logo,频道台标图片的 HTTP 地址。
- group-title,分类名称。搭出分组的就是这个属性。
group-title 是事实上的扩展,不是规范。
RFC 8216 把 #EXTINF 规定为 HTTP 实时流媒体的一部分,定义的是时长和逗号后面的标题文字。它对 tvg-id, tvg-logo, group-title 和 #EXTGRP 只字未提。这些属性是在播放列表工具和播放器的实际使用中长出来的,没有任何标准组织批准过它们。
没有裁判。这就解释了为什么一个播放器能从播放列表搭出分类树,另一个把同一个文件显示成一长列:各自决定了读哪些属性。这也解释了为什么服务商改一个属性,就能把你的分类重新排一遍。
用“收藏”建一份短名单。
播放列表里完全没有 IPTV 频道分组时,答案是“收藏”。把一个直播频道标记一下,它就进了“浏览”里的“收藏”位置,这份名单由你自己拟,而不是服务商写好的。标记二十个频道,效果就像一个没有任何 #EXTINF 行声明过的分类。
其余的交给“最近观看”。你打开过的直播频道会按观看顺序留下来,用的是设备本地记录的观看时间。一份短短的“收藏”加上“最近观看”,午饭时间 iPhone 打开就是新闻,而不是九千行。
刷新会带来新文件声明的那些分类。
播放列表刷新是事务性的:新列表完整到达时才替换旧的,刷新失败则设备上已有的频道原样保留。刷新成功之后,分类就是新文件声明的那些。服务商把 Sports 改名成 SPORT,你的分组就跟着改名。
这一页停在列表这里。添加播放列表是 M3U 播放列表那篇指南,列表加载不出来或播不了属于播放列表排查指南,直播频道上车载显示屏则是 CarPlay 看 IPTV 那一页。文件不声明任何分类时,可以请来源加上 group-title。




