跳到主要内容

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 的反馈可在适当时聚合