根据 RFC4585:
如果 R 的 FB 消息没有按照 5 被其他接收方 FB 消息抑制,则当达到 te 时,R 必须发送包含其 FB 消息的(最小)复合 RTCP 数据包。然后 R 必须设置 allow_early = FALSE,必须重新计算 tn = tp + 2*T_rr,并且必须将 tp 设置为前一个 tn。一旦达到新计算的 tn,无论 R 是发送其下一个常规 RTCP 数据包还是因为 T_rr_interval 抑制它,它必须再次设置 allow_early = TRUE。
假设在时间 t1'
t1---t1'------t2------------t3传输了一个早期的 RTCP 数据包
,并且 t1, t2, t3 是常规时间将发送 RTCP 数据包。RFC 建议如果在时间 t1' 发送数据包,则在时间 t2 的 RTCP 数据包将被丢弃,并且在 t3 之前不允许反馈消息。
然而,后来在同一个 RFC 中,据说
必须定期发送完整的复合 RTCP 数据包。这些
数据包也可以包含一个或多个 FB 消息。常规 RTCP 数据包的传输
安排如下:如果 T_rr_interval == 0,则传输必须遵循本文档第 3.2 节和第 3.4 节中指定的规则,并且必须遵守第 3.5.2 节中指定的 tn 调整(即,如果早期 RTCP 数据包传输,则跳过一次常规传输已经发生了)。当按照 [1] 达到 tn 时,将重新考虑计时器。Regular RTCP 数据包在定时器重新考虑后传输。每当发送或
抑制常规 RTCP 数据包时,allow_early 必须设置为 TRUE,并且 tp, tn 必须
按照 [1] 进行更新。在第一次传输常规 RTCP
数据包后,Tmin 必须设置为 0。
这似乎是矛盾的,因为该段是说当一个RTCP数据包被抑制时,allow_early必须设置为TRUE,所以似乎allow_early应该在时间t2设置为TRUE。