上面是因特网多媒体体系结构,大家先有一个整体印象。

RTP(Real-time Transport Protocol):

RTP为实时应用提供端到端的运输,但不提供任何服务质量的保证。多媒体数据块经过压缩编码处理后,先送给RTP封装成为RTP分组,RTP分组再装入UDP用户数据报,然后再向下地交给IP层。RTP是一个协议框架,因为它只包含了实时应用的一些共同的功能。

RTP分组只包含RTP数据,而控制是由另一个配套协议RTCP提供。

RTP在端口号1025到65535之间选择一个未使用的偶数UDP端口号,而在同一次会话中的RTCP则使用下一个奇数UDP端口号。但端口号5004和5005则分别用作RTP和RTCP的默认端口号。

RTP通常和RTCP一起工作,在RTP会话期间,各参与者周期的发送RTCP消息。RTCP消息含有已发送数据的丢包统计和网络拥塞等信息,服务器可以利用这些信息动态的改变传输速率,甚至改变净荷的类型。RTCP消息也被封装为UDP数据报进行传输。

version (V): 2 bits

标明RTP版本号。当前版本是V2。

padding (P): 1 bit

如果该位被设置,则在该packet末尾包含了额外的附加信息,附加信息的最后一个字节表示额外附加信息的长度(包含该字节本身)。该字段之所以存在是因为一些加密机制需要固定长度的数据块,或者为了在一个底层协议数据单元中传输多个RTP packets。
 

extension (X): 1 bit

如果该位被设置,则在固定的头部后存在一个扩展头部,格式定义在RFC3550 5.3.1节。

CSRC count (CC): 4 bits

在固定头部后存在多少个CSRC标记。

marker (M): 1 bit

该位的功能依赖于profile的定义。profile可以改变该位的长度,但是要保持marker和payload type总长度不变(一共是8 bit)。

payload type (PT): 7 bits

标记着RTP packet所携带信息的类型,标准类型列出在RFC3551中。如果接收方不能识别该类型,必须忽略该packet。

 

sequence number: 16 bits

序列号,每个RTP packet发送后该序列号加1,接收方可以根据该序列号重新排列数据包顺序。

timestamp: 32 bits

时间戳。反映RTP packet所携带信息包中第一个字节的采样时间。

×××C: 32 bits

同步源标识符,用于标识同步源。同步源指的是,例如,一段影片的音频和视频通过不同的RTP流传输,它们是同步的。每个同步源是负责发送RTP分组并在RTP中设置序列号和时间戳的实体。

CSRC list:

0到15, 每个源标识32 bits,CSRC列表表示包内的对载荷起作用的源。标识数量由CC段给出。如超出15个作用源,也仅标识15个。CSRC标识由混合器插入,采用作用源的×××C标识。