RTP 控制协议(RTCP)采用与数据包相同的分发机制,将控制包周期性传输到所有会话参与者中。底层协议必须提供数据和控制包的多路发送,例如使用不同的 UDP 端口号。RTCP 主要完成四个功能服务:
- RTCP 提供数据分发质量反馈信息。这是 RTP 作为传输协议的部分功能并且它涉及到了其它传输协议的流控制和拥塞控制。
- RTCP 为 RTP 源携带一个持久性传输层标识符,称为规范名或 CNAME。由于一旦发现冲突或程序重启时,SSRC 标识符会随之改变,所以接收方需要 CNAME 来跟踪每一个参与者。同时接收方还要求 CNAME 能够与一组相关 RTP 会话中来自于给定参与者的多重数据流相关联,例如同步视频和音频。
- 上述前两个功能要求所有的参与者都要发送 RTCP 包,因此必须控制速率以便 RTP 按比例增加大量的参与者。通过每一个参与者发送各自的控制包给其它所有参与者,每一个参与者能够独立观察到参与者数量,该数量可用来计算控制包的发送速率。
- OPTIONAL 功能用于传送最少会话控制信息,例如在用户界面显示参与者标识。这对于“松散受控”会话(在没有成员控制或阐述协商的情况下,参与者可以加入或退出该会话)是非常有用的。
上述功能1-3适用于所有环境,尤其是 IP 组播环境。RTP 应用程序设计者应该避免设计只能工作于单播模式并且不能增加到大量数量的机制。在某些情况下如单向链接中,不可能有来自接收方的反馈,所以 RTCP 的传输就可能由发送方和接收方分别独立控制。
协议结构
2 | 3 | 8 | 16 bit |
Version | P | RC | Packet type |
Length |
- Version ― 识别 RTP 版本。RTP 数据包中的该值与 RTCP 数据包中的一样。 当前规范定义的版本值为2。
- P ― 间隙(Padding)。设置时,RTCP 数据包包含一些其它 padding 八位位组,它们不属于控制信息。Padding 的最后八位是用于计算应该忽略多少间隙八位位组。一些加密算法中需要计算固定块大小时也可能需要使用 Padding 字段。在一个复合 RTCP 数据包中,只有最后的个别数据包中才需要使用 padding,这是因为复合数据包是作为一个整体来加密的。
- RC ― 接收方报告计数。包含在该数据包中的接收方报告块的数量,有效值为0。
- Packet type ― 包括常量200,识别这是一个 RTCP SR 数据包。
- Length ― RTCP 数据包的大小(32位字减去1),包含头和任意间隙(偏移量的引入使得0成为有效值,并避免了扫描复合 RTCP 数据包过程中的无限循环现象,而采用32位字计数方法则避免了对4的倍数的有效性校验)。
组织来源:RTCP 由 IETF(www.ietf.org)定义在 RFC 3550中。
相关链接:http://www.javvin.com/protocol/rfc3550.pdf: RTP: A Transport Protocol for Real-Time Applications