跳到主要内容

6. RTP 控制协议 -- RTCP

RTP 控制协议 (RTP Control Protocol, RTCP) 基于向会话中所有参与者周期性传输控制数据包, 并使用与数据包相同的分发机制. 底层协议必须 (MUST) 提供数据包和控制包的复用能力, 例如在 UDP 中使用不同端口号.

RTCP 执行四项功能:

  1. 主要功能是提供有关数据分发质量的反馈. 这是 RTP 作为传输协议所承担角色的组成部分, 并与其他传输协议的流量控制和拥塞控制功能相关.

  2. RTCP 为 RTP 源携带一个持久的传输层标识符, 称为规范名称 (canonical name) 或 CNAME. 由于发现冲突或程序重启时 SSRC 标识符可能改变, 接收方需要 CNAME 来跟踪每个参与者.

  3. 前两项功能要求所有参与者发送 RTCP 数据包, 因此必须控制发送速率, 以便 RTP 能扩展到大量参与者. 通过让每个参与者向所有其他参与者发送其控制包, 每个参与者都可以独立观察参与者数量. 该数量用于计算数据包发送速率.

  4. 第四项可选 (OPTIONAL) 功能是传递最少量的会话控制信息, 例如要显示在用户界面中的参与者标识. 这最可能在 "松散控制" 的会话中有用, 在这类会话中, 参与者进入和离开时没有成员资格控制或参数协商.

功能 1-3 应 (SHOULD) 在所有环境中使用, 尤其是在 IP 组播环境中. RTP 应用设计者应 (SHOULD) 避免使用只能在单播模式下工作、无法扩展到更大规模的机制.

6.1 RTCP 数据包格式

本规范定义了若干 RTCP 数据包类型, 用于携带各种控制信息:

  • SR (Sender Report): 来自活动发送方参与者的发送和接收统计信息
  • RR (Receiver Report): 来自非活动发送方参与者的接收统计信息
  • SDES (Source Description): 包括 CNAME 在内的项
  • BYE: 表示参与结束
  • APP: 应用特定功能

每个 RTCP 数据包都以类似 RTP 数据包的固定部分开始, 后跟结构化元素; 这些元素可根据数据包类型具有可变长度, 但总是在 32 位边界处结束.

6.2 RTCP 传输间隔

RTP 的设计允许应用在从少数参与者到数千参与者的会话规模范围内自动扩展. RTP 会话带宽在数据部分和控制部分之间划分, RTCP 通常分配会话带宽的 5%.

6.3 RTCP 数据包发送和接收规则

RTCP 数据包发送和接收规则经过精心设计, 以确保各种规模的会话都能正确运行.

6.4 发送方和接收方报告

RTP 接收方使用 RTCP 报告包提供接收质量反馈; 该报告包可根据接收方是否同时也是发送方而采用两种形式之一.

6.5 SDES: 源描述 RTCP 数据包

SDES 数据包是一个三级结构, 由一个头部和零个或多个块组成, 每个块由描述该块中所标识源的项组成.

6.6 BYE: 告别 RTCP 数据包

BYE 数据包表示一个或多个源不再活动.

6.7 APP: 应用定义的 RTCP 数据包

APP 数据包旨在供新应用和新功能开发时进行实验性使用.