3.4. 定义与算法概述 (Definitions and Algorithm Overview)
每个接收端需维护以下状态信息 (大体取自 [1]). 注意, 除 h) 项外, 下文所有变量均在各接收端独立计算, 因此在任意时刻其本地取值可能不同.
a) 令 senders 为 RTP 会话中活跃发送端数量.
b) 令 members 为对 RTP 会话中接收端数量的当前估计.
c) 令 tn 与 tp 分别为在定时器重考虑 (timer reconsideration) 之前算得的下一次 (上一次) 计划 RTCP RR 传输时刻.
d) 令 Tmin 为 [1] 规定的 RTCP 分组最小间隔. 与 [1] 不同, 初始 Tmin 设为 1 秒, 以便在发送首个 RTCP 分组前对组规模做一定采样. 首个 RTCP 分组发出后, Tmin 设为 0.
e) 令 T_rr 为: 在刚发送一个按常规调度的 RTCP 分组后, 接收端将为其下一次 Regular RTCP 传输所调度的时间间隔. 该值按 [1] 的规则求得, 但使用本文档定义的 Tmin: T_rr = T ([1] 中的 "计算得到的间隔"), 且 tn = tp + T. T_rr 始终指最近一次因重考虑或为确定 tn 而计算得到的 T. 本文档中亦称 T_rr 为 Regular RTCP 间隔 (Regular RTCP interval).
f) 令 t0 为接收端检测到待报告事件的时刻.
g) 令 T_dither_max 为: 为防止多方会话中的反馈内爆 (implosion), RTCP 反馈分组可额外延迟的最大时间; 其值基于 T_rr 动态计算 (或可由将来规定的、所有 RTP 接收端共用的其他机制导出). 对于点对点会话 (即成员恰为两个且预期组规模不变, 例如单播流式会话), T_dither_max 设为 0.
h) 令 T_max_fb_delay 为: 为使反馈对发送端仍有意义, 针对某事件必须把反馈送回发送端的上界时间. 该值与具体应用相关, 本文档不定义具体数值.
i) 令 te 为计划发送反馈分组的时刻.
j) 令 T_fd 为: 响应 t0 时刻事件而发送 FB 消息时的实际 (随机化) 延迟.
k) 令 allow_early 为布尔变量, 表示接收端当前是否可在下一次按常规调度的 RTCP 间隔 tn 之前传输 FB 消息. 该变量用于限制单个接收端发出的反馈量. 在发送 Early 反馈后 allow_early 设为 FALSE, 一旦下一次 Regular RTCP 传输发生即设为 TRUE.
l) 令 avg_rtcp_size 为 [1] 定义的 RTCP 分组大小的滑动平均.
m) 令 T_rr_interval 为可选的 Regular RTCP 分组之间的最小间隔. 若 T_rr_interval == 0, 则该变量对 RTCP 反馈算法的整体运行无影响. 若 T_rr_interval != 0, 则下一次 Regular RTCP 分组不会在上次 Regular RTCP 传输后隔 T_rr (即在 tp+T_rr) 调度; 而会至少推迟到上次 Regular RTCP 传输后 T_rr_interval, 即在 tp+T_rr_interval 或更晚才调度. 注意 T_rr_interval 不影响 T_rr 与 tp 的计算; 相反, 计划在 tp+T_rr_interval 之前发送且不包含任何 FB 消息的 Regular RTCP 分组可能被抑制. T_rr_interval 不影响 Early RTCP 分组的传输调度.
注: 将 T_rr_interval 作为独立变量, 旨在按应用需要减少 Regular RTCP 反馈 (从而节省带宽), 同时仍允许更频繁地使用 Early RTCP 分组以提供及时反馈. 若仅降低总体 RTCP 带宽, 也会连带降低 Early 反馈频率, 故无法单靠此举达到上述目标.
n) 令 t_rr_last 为最近一次 Regular RTCP 分组已调度并发送 (即未因 T_rr_interval 被抑制) 的时刻.
o) 令 T_retention 为 AVPF 实体保存历史 FB 消息的时间窗. 用于保证: 某实体在自身注意到反馈事件之前已从其他实体收到 FB 消息时, 反馈抑制仍能生效. T_retention MUST 至少设为 2 秒.
p) 令 M*Td 为将接收端视为不活跃的超时值 (定义见 [1]).
某接收端上待报告事件的反馈情形见图 2. 在时刻 t0, 检测到此类事件 (例如丢包). 接收端根据当前带宽, 组规模及其他应用相关参数判定需要向发送端发回 FB 消息.
为避免多方会话中反馈分组内爆, 接收端 MUST 将 RTCP 反馈分组的传输随机延迟 T_fd (随机数在 [0, T_dither_max] 上均匀分布). 复合 RTCP 分组的传输 MUST 计划在 te = t0 + T_fd.
参数 T_dither_max 由 Regular RTCP 间隔 T_rr 导出, 而 T_rr 又基于组规模. 若可保证所有 RTP 接收端采用同一机制计算 T_dither_max, 将来文档也可规定基于 RTT 等其他 T_dither_max 计算方式.
对特定应用场景, 接收端可确定 FB 消息可接受的本地延迟上界: T_max_fb_delay. 若先验估计或实际计算表明可能违反该上界 (例如 T_dither_max > T_max_fb_delay), 接收端 MAY 决定完全不发送反馈, 因为认为可获收益不足.
若调度了 Early RTCP 分组, MUST 相应更新下一次 Regular RTCP 分组的时隙, 得到新的 tn (tn=tp+2*T_rr) 与新的 tp (随后 tp=tp+T_rr). 从而保证使用 Early 反馈时短期平均 RTCP 带宽不超过不使用 Early 反馈时的带宽.
event to
report
detected
|
| RTCP feedback range
| (T_max_fb_delay)
vXXXXXXXXXXXXXXXXXXXXXXXXXXX ) )
|---+--------+-------------+-----+------------| |--------+--->
| | | | ( ( |
| t0 te |
tp tn
\_______ ________/
\/
T_dither_max
Figure 2: Event report and parameters for Early RTCP scheduling