Revue
简体中文

指南

rtp2httpd FCC 快速换台:Apple TV 上换台更快

用 rtp2httpd 转发 IPTV 组播时,可以打开 FCC(Fast Channel Change,快速换台)。做法是在 M3U 里的频道地址后面加上 ?fcc=<FCC 服务器 IP>:<端口>。Revue 这边不需要任何设置。在我们的测试里,显示模式相同的频道之间换台,新台画面开始动的时间从约 2.3 秒缩短到约 1.7 秒。代价是直播画面比不开时晚 1–2 秒。

本文假设你已经按IPTV 组播转单播:用 udpxy、rtp2httpd 在 Apple TV 上看一文,用 rtp2httpd 在 Revue 里看上了频道。

FCC 是什么

普通组播换台慢,慢在等关键帧。视频里只有关键帧带完整画面,后面的帧都要靠它才能解出来。转发程序加入新频道的组播后,收到的第一段数据通常不是关键帧,播放器只能等下一个。关键帧之间一般隔 1 秒到几秒。

FCC 的做法是:换台时,rtp2httpd 先向 IPTV 网络里的 FCC 服务器要这个频道的数据。FCC 服务器从它缓存的关键帧开始,用单播发过来,速度比正常播放稍快(我们测到约 1.2 倍,持续约 10 秒)。单播追上组播后,rtp2httpd 切回组播,断开单播。播放器收到的始终是同一条连续的流,察觉不到切换。

准备

  • rtp2httpd。udpxy 没有 FCC 功能。
  • 你所在 IPTV 网络的 FCC 服务器地址和端口。它和组播地址一样,由你本地的 IPTV 网络决定,本文不提供。rtp2httpd 的文档《FCC 快速换台配置》介绍了查找方法。
  • rtp2httpd 要能连到 FCC 服务器。按 rtp2httpd 文档,一般要求转发设备在 IPTV 网络上拿到了地址(通过 DHCP、IPoE 或 PPPoE),并用 upstream-interface 指定 IPTV 一侧的网卡。
  • rtp2httpd 跑在 NAS、二级路由这类 NAT 设备后面时,默认的 FCC 类型还需要设置 fcc-listen-port-range,并在上级路由器上做端口转发。详见同一篇 rtp2httpd 文档。转发设备直接接入 IPTV 网络时不需要。

第一步:在 M3U 里加上 FCC 参数

在 rtp2httpd 频道地址的末尾加上 ?fcc=<FCC 服务器 IP>:<端口>:

#EXTM3U
#EXTINF:-1 tvg-id="<节目单里的频道 id>" group-title="高清",<频道名>
http://<转发设备 IP>:5140/rtp/<组播地址>:<端口>?fcc=<FCC 服务器 IP>:<端口>
  • fcc-type 用来选择 FCC 协议,可以不写。不写时等于 telecom。按 rtp2httpd 文档,多数情况用它就能工作;少数网络需要在地址后再加 &fcc-type=huawei。
  • 一个地址只能有一个 ?。地址里已经有别的参数时,用 & 连接。
  • 如果你用 rtp2httpd 的 external-m3u 自动改写播放列表,可以直接在源列表的地址后面加参数:rtp://<组播地址>:<端口>/?fcc=<FCC 服务器 IP>:<端口>。
  • 只想给部分频道打开 FCC,就只改这些频道的地址。

改完后,在 Revue 的频道列表页按遥控器的播放/暂停键,重新加载播放列表。

第二步:确认 FCC 生效

只凭感觉判断不可靠。下面两种方法任选一种。

看响应头(需要 rtp2httpd 3.16.0 或更新版本)。 在电脑的终端里运行:

curl -s -o /dev/null -D - --max-time 3 "http://<转发设备 IP>:5140/rtp/<组播地址>:<端口>?fcc=<FCC 服务器 IP>:<端口>"

这条命令只打印响应头,3 秒后自动退出。找到 R2H-FCC-Status 这一行:

  • active:这次是从 FCC 单播起播的,FCC 已生效。
  • fallback:FCC 服务器没有回应,rtp2httpd 改走了普通组播。按文末的常见问题排查。
  • 没有这一行:地址里没带 fcc=,或者 rtp2httpd 的版本低于 3.16.0。

不要用 curl -I。对 HEAD 请求,rtp2httpd 不会去连 FCC 服务器,响应里也没有这一行。

看状态页。 在浏览器打开 http://<转发设备 IP>:5140/status。在 Apple TV 上换一个台,然后马上看这台 Apple TV 那一行(按「客户端」列里 Apple TV 的 IP 找):

  • 「服务」列的地址末尾带着 ?fcc=…,说明 Revue 用的是改好的地址。
  • 换台后约 10 秒内,「状态」列显示「FCC 单播活跃」,说明 FCC 在工作。之后变成「组播活跃」,这是切回组播后的正常状态。

如果换台后一直只看到「组播活跃」,用上面的 curl 命令再确认一次。

能快多少

我们用一台 Apple TV 和 rtp2httpd 3.17.2 测了 6 个频道,其中有 4K HDR 频道。只在显示模式相同的频道之间换台,普通组播和 FCC 各换 24 次。下表是中位数,从按下换台算起:

普通组播 打开 FCC
声音出来 约 0.6 秒 约 0.4 秒
新台画面开始动 约 2.3 秒 约 1.7 秒

按频道看,打开 FCC 后画面早动 0.4–0.9 秒。不同网络、不同频道的关键帧间隔不一样,你的结果会有出入。

为什么有的播放器开了 FCC 也不觉得快

FCC 发来的第一段数据就从关键帧开始。但说明这路流里有哪些音视频的信息(PAT/PMT)常常晚零点几秒才到。有些播放器会丢掉这段信息到达之前收到的数据,开头那个关键帧也跟着丢了,只能再等下一个。这样开不开 FCC,差别不大。

Revue 会先把这段数据存起来,等这段信息到了再接着用,所以能用上 FCC 发来的第一个关键帧。普通组播起播时,这段信息到达之前收到的关键帧,Revue 也一样会用上。

什么时候帮不上

  • tvOS 里打开了「匹配内容」,又在 SDR 频道和 4K HDR 频道之间换台,或者在帧率不同的频道之间换台时,电视要先切换显示模式。这一步要好几秒,时长取决于电视,FCC 缩短不了。显示模式相同的频道之间换台,才能明显感到 FCC 的效果。
  • FCC 服务器没有回应时,rtp2httpd 只等 80 毫秒,就改走普通组播。频道照常能看,只是没有加速。

代价:直播画面会晚 1–2 秒

打开 FCC 后,Revue 播放的画面比不开时晚 1–2 秒。原因是 FCC 发来的数据从一个稍早的关键帧开始,Revue 从这一帧起按正常速度播放,所以一直落后这么多。这段延迟会保持到下次换台。Revue 不会为了追上实时画面而加速播放。

如果你很在意实时性,比如一边看比赛一边看手机上的比分,可以只给常换的频道打开 FCC,或者不打开。

常见问题

现象 原因和处理
打开了 FCC,换台还是一样慢 先按第二步确认 FCC 已生效。已生效还觉得慢,看看是不是在 SDR 和 4K HDR 频道之间换台:这时等待时间主要花在电视切换显示模式上。
R2H-FCC-Status 是 fallback FCC 服务器没有回应。依次检查:FCC 地址和端口是否正确;转发设备是否在 IPTV 网络上拿到了地址,upstream-interface 是否指向 IPTV 网卡;rtp2httpd 在 NAT 后面时,是否做了端口转发。也可以试试加上 &fcc-type=huawei。rtp2httpd 日志里的 FCC: Server response timeout 说的是同一件事。
FCC 地址写错了,频道还能看吗 能。rtp2httpd 等不到回应就改走普通组播,只是没有加速。
udpxy 能用 FCC 吗 不能。FCC 是 rtp2httpd 的功能,udpxy 没有。
改了频道地址,收藏会丢吗 一般不会。地址变了,Revue 会按 tvg-id 或频道名把收藏对应到新地址。前提是 tvg-id 或频道名在这个播放列表里没有重复。

其他播放问题的排查方法,见频道黑屏、卡顿、没声音怎么办。