4. 发送多个媒体流的端点对 RTP 的使用
RTP 规范 [RFC3550] 已经明确指出, 一个端点可以在单个 RTP 会话中发送多个 RTP 流. 每个 RTP 流由唯一 SSRC 值标识. 主要要求是每个 SSRC 在该 RTP 会话内 MUST 唯一.
发送多个 RTP 流时:
- 每个流 MUST 具有唯一 SSRC 标识符
- 流可以表示不同媒体源、同一源的不同编码, 或冗余/修复流
- 每个 SSRC 的 RTP 时间戳和序列号空间相互独立
5. 发送多个媒体流的端点对 RTCP 的使用
本节澄清并更新发送多个 RTP 流的端点的 RTCP 行为.
5.1. RTCP 报告要求
端点 MUST 为其用于发送 RTP 分组的每个 SSRC 发送 RTCP 分组. 这意味着, 如果端点发送 N 个 RTP 流 (具有 N 个不同 SSRC), 它需要为全部 N 个 SSRC 发送 RTCP 分组.
不同 SSRC 的 RTCP 分组:
- 可以在独立的复合 RTCP 分组中发送
- 可以聚合到单个复合 RTCP 分组中 (在可能时推荐这样做)
- MUST 遵循 RFC 3550 中指定的定时规则
5.2. 初始报告间隔
当端点开始在新的 SSRC 上发送时, 它 SHOULD 按 RFC 3550 第 6.2 节中的规则尽快为该 SSRC 发送初始 RTCP 分组. 对于第一个 RTCP 分组:
- 延迟 MAY 降低到正常最小间隔的一半
- 对于单播会话, 延迟 MAY 为零
- 这允许其他参与者快速获知新的 SSRC
5.3. 将报告聚合到复合 RTCP 分组中
当端点具有多个 SSRC 时, RECOMMENDED 在可能时将多个 SSRC 的 RTCP 分组聚合到单个复合 RTCP 分组中. 这可以:
- 减少分组开销
- 简化 RTCP 调度
- 减少发送的分组数量
5.3.1. 维护 AVG_RTCP_SIZE
聚合来自多个 SSRC 的 RTCP 分组时, AVG_RTCP_SIZE 计算需要谨慎处理:
- 每个 SSRC 应维护自己的 AVG_RTCP_SIZE 估计
- 该估计应基于为该 SSRC 发送的复合分组大小
- 当分组被聚合时, 每个 SSRC 的估计根据其在复合分组中的部分更新
5.3.2. 聚合多个 SSRC 时调度 RTCP
聚合 RTCP 分组时:
- 独立计算每个 SSRC 的下一次传输时间
- 在最早的计划时间发送聚合分组
- 更新所有所含 SSRC 的下一次传输时间
5.4. RTP/AVPF 或 RTP/SAVPF 反馈的使用
当使用具有多个 SSRC 的 RTP/AVPF 或 RTP/SAVPF 配置文件时, 还适用额外考虑.
5.4.1. 反馈分组的 SSRC 选择
发送反馈 (例如 NACK 或 PLI) 时:
- 反馈分组 MUST 使用发送方拥有的 SSRC
- 选择使用哪个 SSRC 取决于实现
- RECOMMENDED 使用与该反馈最密切相关的媒体流的 SSRC
5.4.2. 调度 RTCP 反馈分组
AVPF 中的反馈分组可以在正常 RTCP 调度之外发送:
- 在配置文件约束内允许早期反馈
- T_rr_interval 参数限制反馈发送频率
- 不同 SSRC 的反馈可在适当时聚合