3.2 RTCP
RTCP(RTP Control Protocol)是实时传输协议(RTP)的姊妹协议,其基本功能和数据包结构在RFC 3550中定义。RTCP为RTP会话提供带外统计信息和控制信息,与RTP协作提供多媒体数据的传输和打包功能,其本身不传输任何媒体数据。
RTCP的主要功能是定期发送数据包计数、数据包丢失、数据包延迟变化以及往返延迟时间等统计信息,向媒体参与者提供媒体分发中的服务质量保障。应用程序在接收到这些信息后,可以通过限制流量或更换编解码格式的方式提升服务质量。RTCP流量的带宽很小,通常约为总占用带宽的5%。
RTP通常在偶数UDP端口上发送,而RTCP消息将在下一个更高的奇数端口发送。
RTCP本身不提供任何流加密或身份验证方法。如果对安全性有更高的要求,可以使用RFC 3711中定义的SRTP实现此类机制,WebRTC便采用了SRTP。
RTCP提供以下功能。
- 在会话期间收集媒体分发质量方面的统计信息,并将这些数据传输给会话媒体源和其他会话参与方。源可以将此类信息用于自适应媒体编码(编解码器)和传输故障检测。如果会话是多播网络承载的,则允许进行非侵入式会话质量监视。
- RTCP为所有会话参与者提供规范的端点标识符(CNAME)。CNAME是跨应用程序示例端点的唯一标识。尽管RTP流的SSRC也是唯一的,但在会话期间,SSRC与端点的绑定关系仍可能改变。
- 提供会话控制功能。RTCP是联系所有会话参与者的便捷方式。
在数以万计的接收者参与的直播会话中,所有参与者都发送RTCP报告,网络流量与参与者的数量成正比。为了避免网络拥塞,RTCP必须支持会话带宽管理功能。RTCP通过动态报告传输的频率来实现这一功能;RTCP带宽使用率通常不应超过会话总带宽的5%,应始终将RTCP带宽的25%预留给媒体源,以便在大型会议中,新的参与者可以接收发送者的CNAME标识符而不会产生过多延迟。
RTCP报告间隔是随机的,最小报告间隔为5秒,通常发送RTCP报告的频率不应低于5秒一次。
RTCP数据包标头结构如表3-3所示。
表3-3 RTCP数据包标头
RTCP标头长度为4个字节,标头中各字段解释如下。
- 版本号(2位):表示RTCP的版本号。
- P(1位):表示RTP数据包末尾是否有额外的Padding字节。Padding字节用于填充一定大小的块,最后一个字节表示Padding的字节数(包括自身)。
- RC(5位):表示此数据包中接收报告块的数量,可以为0。
- PT(8位):包含一个常数,用于表示RTCP数据包类型。
- 长度(16位):表示此RTCP数据包的长度。
- SSRC(32位):同步源标识符,用于唯一标识媒体源。
RTCP支持以下几种类型的数据包。
1. 发送者报告(SR)
活跃发送者在会议中定期发送报告,报告该时间间隔内发送的所有RTP数据包的发送和接收统计信息。发送者报告包含绝对时间戳,表示自1900年1月1日零点以来经过的秒数。绝对时间戳帮助接收方同步RTP消息,对于同时传输音频和视频的场景尤为重要,因为音频和视频的RTP流独立使用相对时间戳,必须使用RTCP绝对时间戳进行同步。
2. 接收者报告(RR)
接收者报告适用于不发送RTP数据包的被动参与者,用于通知发送者和其他接收者服务质量。
3. 源描述(SDES)
源描述可以用于将CNAME项发送给会话参与者,也可以用于提供其他信息,例如名称、电子邮件地址、电话号码以及源所有者或控制者的地址。
4. 关闭流(BYE)
源发送BYE消息以关闭流,允许端点(endpoint)宣布即将离开会议。
5. 特定于应用程序的消息(APP)
APP提供了一种机制,用于扩展RTCP。