RTCP&RTP协议格式分析2:RTP
RTCP&RTP协议格式分析2:RTP
RTP头有以下格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| contributing source (CSRC) identifiers |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
前12个字节出现在每个RTP包中,仅仅在被混合器插入后,才出现CSRC列表。
~~~~~~~~~下面开始分析各个字段的意义:
版本号:2位,值为2.
填充P:1位:
若填料比特被设置,则此包包含一到多个附加在末端的填充比特,填充比特不算作
负载的一部分。填充的最后一个字节指明可以忽略多少个填充比特(包括它自己)。填充可能用于某些具有固定长度的加密算法,或者用于在底层数据单元中传输多个RTP包。
~~~~~~~
X:扩展位,如果设置了,表示固定头后面跟着一个头扩展。
CC:4比特CSRC计数包含了跟在固定头后面CSRC识别符的数目。
标志(M):1比特标志的解释由具体协议规定。它用来允许在比特流中标记重要的事件,如帧边界。
~~~~~~~~
负载类型(7位): 定义了负载的格式,
序列号: sequence number,16位,每发送一个RTP报文,序列号加1。
时间戳:标志了数据的第一个字节的采样时间,初始值是随机的,
即RTP时间戳记录当前是第几个采样数据,NTP时间戳记录当前数据包相对于参考时钟(1900年1月1日0点算起,当前时间相对于该时刻所经过的秒数)的绝对时间
~~~~~~~~~~~~
SSRC:32位,随机生成。
CSRC列表:0到15项,每项32位,个数由CC域决定。