介绍
RTP,real-time transport protocol,实时传输协议,用于传输具有实时属性的数据。RTP提供端到端的网络传输功能,适用于通过组播或单播网络服务传输实时数据(如音频、视频或仿真数据)的应用。
RTP协议层有两个子协议:RTP和RTCP。RTP负责传输音视频数据流,RTCP是RTP的控制协议,用于监控服务质量并传递正在进行的会话中参与者的信息。
RTP依赖于底层协议来提供RTP数据和RTCP控制流的传输。由于传输的数据具有实时性,通常使用UDP协议传输。RTP使用偶数作为端口号,对应的RTCP流使用下一个更高的(奇数)作为端口号。
RTP会话
一组会议的参与者之间如果要实现视频通话,需要在RTP协议层建立RTP会话。参与者通过使用不同的目标传输地址对,接收不同的会话来区分多个RTP会话,传输地址对包括一个目标IP地址加上RTP和RTCP的一对端口。
一个RTP会话中,不只有单独的RTP报文,还有RTP配合使用的单独的RTCP报文。RTP会话的显著特征是每个会话都维护一个完整的、独立的SSRC标识符,它是RTP报头里的字段:同步源标识符,它是RTP数据包的来源。
每个参与者在会议中都有一个唯一的区别与他人的SSRC。
对于多方会议而言,有两种方式实现多个参与者的会话。
一种是和网络的组播类似,所有的参与者加入同一个会话中,它们有共同的目标传输地址对:目标IP地址是组播地址,各自的RTP端口和RTCP端口相同。本质上它们加入了同一个组播,RTP使用同一个组播地址作为目的IP地址,各自的RTP端口号和RTCP端口号相同。
另一种是和网络的单播类似,所有的参与者点对点通信,创建独立的RTP会话,使用的目的IP地址是目的主机的IP,在单播情况下,一个参与者可以使用同一对端口接收会话中所有其他参与者的消息,也可以为每个参与者使用不同的一对端口。
RTP报文格式
RTP报头的格式如下:
前12个字节出现在每个RTP数据包中,而CSRC标识符列表只有在混合器插入时才出现。
- version (V): 2 bits
该字段表示RTP的版本,rfc 3550规范定义RTP的版本号为2。
- padding §: 1 bit
填充位。如果该位设置,表示RTP报文需要填充一个或多个字节,这些填充字节不属于负载的一部分。某些具有固定块大小的加密算法或在较低层协议数据单元中携带多个RTP数据包可能需要填充。
- extension (X): 1 bit
扩展位。如果设置了扩展位,固定报头必须紧跟着一个报头扩展位。
- CSRC count (CC): 4 bits
CSRC数量表示固定报头后面的CSRC标识符数量。
- marker (M): 1 bit
标记位。它的目的是允许在数据包流中标记诸如帧边界之类的重要事件。它的解释由profile文件定义。
- payload type (PT): 7 bits
该字段表示RTP payload的格式。
- sequence number: 16 bits
每发送一个RTP数据包,序列号加1,接收方可以用它来检测数据包丢失和恢复数据包序列。序列号的初始值应该是随机的(不可预测的)。
- timestamp: 32 bits
时间戳反映了RTP数据包中第一个字节的采样时间。采样瞬间必须来源于一个时钟,该时钟随时间单调线性递增,以允许同步和抖动计算。
- SSRC: 32 bits
SSRC字段表示同步源。这个标识符应该随机选择,目的是在同一个RTP会话中避免两个同步源具有相同的SSRC标识符。
- CSRC list: 0到15条,每条32 bits
CSRC列表列举出此RTP包中包含的有效负载的贡献源。CSRC列表的数量由CC字段给出。如果有超过15个贡献来源,只有15个可以被识别。CSRC标识符由混合器插入,使用贡献源的SSRC标识符。
- RTP payload:
通过RTP传输的数据包中的数据,如音频样本或压缩视频数据。
音视频以哪种格式编码成数据流,不是由RTP协议层实现的。应用层把音视频编码成数据流后,交给RTP传输。
RTP控制协议:RTCP
RTCP (control protocol)是基于周期性地向会话的所有参与者发送控制报文的协议,采用与数据包相同的分发机制。
-
RTCP的主要功能是接收方向发送方提供音视频质量的报告。它是RTP协议的子协议。
-
如果RTP源发现同步源冲突或程序发生重启,SSRC可能会更改。接收方需要持续跟踪每个参与者,RTCP为RTP源携带一个持久的传输级标识符,称为规范名称或CNAME,接收方就根据CNAME跟踪每个参与者。