RTP协议与RTCP协议
参考资料:
- RFC 3551 - RTP Profile for Audio and Video Conferences with Minimal Control (ietf.org)
- RFC 5506 - Support for Reduced-Size Real-Time Transport Control Protocol (RTCP): Opportunities and Consequences (ietf.org)
- RFC 5761 - Multiplexing RTP Data and Control Packets on a Single Port (ietf.org)
- RFC 6051 - Rapid Synchronisation of RTP Flows (ietf.org)
- RFC 7022 - Guidelines for Choosing RTP Control Protocol (RTCP) Canonical Names (CNAMEs) (ietf.org)
**RTP(实时传输协议,Real-time Transport Protocol)是由IETF的多媒体传输工作小组于1996年在RFC 1889中公布的。RTP为IP网络上的语音、视频等需要实时传输的多媒体数据提供端到端的传输服务。然而,RTP本身无法保证服务质量(QoS),因此通常需要与实时传输控制协议(RTCP)**配合使用,传输层协议主要建立在UDP协议上,以监控和优化传输质量。
1.RTP协议
1.1 RTP协议简介
RTP协议在传输层之上运行,通常使用UDP(用户数据报协议)作为其传输协议。RTP数据包通过网络传输到接收端,接收端根据报头中的时间戳和序列号来重组数据包,确保数据的顺序和同步。RTP(实时传输协议,Real-time Transport Protocol)具有多种功能,主要用于在IP网络上传输实时音频、视频和其他多媒体数据。以下是RTP协议的主要功能:
- 实时数据传输:RTP提供端到端的实时传输服务,适用于视频会议、IP电话和流媒体等应用。它能够在网络中传输低延迟、高带宽的多媒体数据。
- 时间戳和序列号:RTP数据包包含时间戳和序列号,用于确保数据的同步和顺序传输。时间戳记录数据包中第一个字节的采样时刻,序列号用于检测数据包的丢失和恢复顺序。
- 支持多种媒体类型:RTP支持多种媒体类型,包括音频、视频和文本等。它能够处理不同的编码格式,如H.264视频编码和AAC音频编码。
- 与RTCP结合使用:RTP通常与实时传输控制协议(RTCP)一起使用。RTCP用于监测数据传输的质量并提供反馈,帮助调整传输参数以提高传输质量。
- 灵活的网络适应性:RTP能够适应不同的网络条件,通过调整传输速率和编码方式来应对网络带宽的变化。
- 支持多播和单播:RTP支持多播和单播传输模式,能够在多个接收端之间高效地分发数据。
- 数据包重组和同步:接收端根据RTP报头中的时间戳和序列号来重组数据包,确保数据的顺序和同步,提供平滑的播放体验。
1.2 报文解析
- Ver.(2 bits):目前协议的版本号码,目前版号是2。
- P(1 bit):用于RTP报文(packet)结束点的预留空间,视报文是否需要多余的填塞空间,设置为1时指示报文末端附加填充字节
- X(1 bit):否在使用延伸空间于报文之中,设置为1时表示固定包头后有延申
- CC(4 bits):包含了CSRC数目用于修正标头(fixed header),最大值为15
- M(1 bit):是用于应用等级以及其原型(profile)的定义。可根据具体用途解释意义。
- PT(7 bits):是指payload的格式并决定将如何去由应用程序加以解译,包括编码算法、媒体类型、时钟频率、承载通道等。
- Sequence Number: 标识数据包序列号,用于接收方重构数据包序列并记录丢包量,序列号初始值是随机产生的,每发送一个RTP数据包,序列号加1。
- TimeStamp (32bit):标识RTP数据包中第一个字节的采样时间,时间戳初始值也是随机数,每个采样周期时间戳加1,接收端利用时间戳来去除由网络引起的数据包抖动,并且在接收端提供同步功能
- SSRC (32bit):同步源标识符用于标识RTP数据流的起源,在一个RTP会话中,每个数据流的SSRC都不同,同步源标识符的值是随机数
- CSRC (n*32 bit) :贡献源列表用于标识此RTP数据包中数据来源,由混频器将所有贡献源的SSRC标识符放入此表中,数量N由CC决定,最大数量为15,因此,当数量N超过15时,仅识别15个
2.RTCP协议
2.1 RTCP协议简介
RTCP(Real-time Transport Control Protocol 或 RTP Control Protocol,实时传输控制协议)可以提供会话质量反馈,帮助发送端和接收端了解网络状况,从而优化数据传输。它通过周期性发送控制报文来实现反馈功能。
RTCP的主要功能是通过周期性发送统计信息(如传输的字节数和数据包数、丢包率、数据包延迟变化和往返延迟时间)来提供媒体分发中的服务质量(QoS)反馈。这些信息会发送给流媒体会话中的参与者。应用程序可以利用这些信息来控制服务质量参数,例如限制流量或使用不同的编解码器。
RTCP在所有RTP会话中提供了基本功能:
- 主要功能:RTCP的主要功能是在会话期间收集媒体分发的质量统计数据,并将这些数据传输给会话媒体源和其他参与者。这些信息可以用于源端的自适应媒体编码(编解码器)和传输故障检测。如果会话在多播网络上进行,这允许非侵入式的会话质量监控。
- 端点标识:RTCP为所有会话参与者提供规范的端点标识符(CNAME)。尽管RTP流的源标识符(SSRC)应是唯一的,但在会话期间源标识符与端点的绑定可能会发生变化。CNAME确保在一个应用实例(多次使用媒体工具)中以及第三方监控中唯一标识端点。
- 会话控制功能:RTCP是联系所有会话参与者的便捷手段,而RTP本身则不是。RTP仅由媒体源传输。
- 报告发送:RTCP报告预计由所有参与者发送,即使在可能涉及数千接收者的多播会话中也是如此。随着参与者数量的增加,这种流量会成比例增加。因此,为避免网络拥塞,协议必须包括会话带宽管理。这是通过动态控制报告传输频率来实现的。RTCP带宽使用通常不应超过会话总带宽的5%。此外,25%的RTCP带宽应始终保留给媒体源,以便在大型会议中,新参与者可以及时接收到发送者的CNAME标识符。
- 报告间隔:RTCP报告间隔是随机化的,以防止报告的非预期同步。每个站点的RTCP报告最小间隔建议为5秒。站点不应频繁发送RTCP报告,间隔应不少于5秒。
2.2 报文解析
2.2.1 数据包标头
- 版本(Version):2位,用于标识RTP的版本,RTCP包中的版本与RTP数据包中的版本相同。本规范定义的版本为2。
- 填充(P,Padding):1位,指示RTP包末尾是否有额外的填充字节。填充可能用于填充特定大小的块,例如加密算法所需的块。填充的最后一个字节包含添加的填充字节数(包括它自己)。
- 接收报告计数(RC,Reception report count):5位,表示此包中包含的接收报告块的数量。值为零也是有效的。
- 包类型(PT,Packet type):8位,包含一个常量,用于标识RTCP包类型。
- 长度(Length):16位,表示此RTCP包的长度(包括头部本身),以32位单位减去一。
- 同步源标识符(SSRC,Synchronization source identifier):32位,唯一标识流的源。
2.2.2 数据消息类型
RTCP 区分了 Sender Report、Receiver Report、Source Description 和 Goodbye 三种类型的数据包。此外,该协议是可扩展的,并允许特定于应用程序的 RTCP 数据包。RTCP 的基于标准的扩展是 RFC 3611 引入的扩展报告数据包类型。
1.发送端报告(SR)
发送端报告由会议中的服务器定期发送,用于报告在此期间发送的所有RTP数据包的传输和接收统计信息。发送端报告包含两个不同的时间戳:一个是绝对时间戳,使用网络时间协议(NTP)的时间戳格式表示(以1900年1月1日UTC午夜为基准的秒数);另一个是RTP时间戳,与NTP时间戳对应,但使用相同的单位和随机偏移量。这些绝对时间戳允许接收端同步RTP消息,特别是在同时传输音频和视频时非常重要,因为音频和视频流使用独立的相对时间戳。
2.接收端报告(RR)
接收端报告适用于被动参与者,即那些不发送RTP数据包的参与者。该报告向发送者和其他接收者提供服务质量的信息。
3.源描述(SDES)
源描述消息用于向会话参与者发送CNAME项。它还可以用于提供其他信息,如源的所有者或控制者的姓名、电子邮件地址、电话号码和地址。
4.再见(BYE)
源发送BYE消息以关闭流。它允许端点宣布其将离开会议。尽管其他源可以检测到源的缺失,但此消息是直接的公告,对媒体混合器也很有用。
5.应用特定消息(APP)
应用特定消息提供了一种机制,用于设计RTCP协议的应用特定扩展。