本来是想一篇文章介绍完的,写着写着发现太多了,所以就分割成两篇文章,请各位鉴赏,有问题留言,谢谢。
RTP Header解析
字段
|
位宽
|
含义
|
V
|
2
|
RTP 协议的版本号,当前协议版本号为 2。
|
P
|
1
|
填充标志,如果 P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。
|
X
|
1
|
扩展标志,如果 X=1,则在 RTP 报头后跟有一个扩展报头。
|
CC
|
4
|
CSRC 计数器, 指示 CSRC 标识符的个数。
|
M
|
1
|
标记,不同的有效载荷有不同的含义,对于
视频,标记一帧的结束;对于
音频,标记会话的开始。
|
PT
|
7
|
有效载荷类型,用于说明 RTP 报文中有效载荷的类型,如 GSM 音频、JPEM 图像等。
|
sequence number
|
16
|
用于标识发送者所发送的 RTP 报文的序列号,每发送一个报文,序列号增 1。接收者通过序列号来检测报文丢失情况,重新排序报文,恢复数据。
|
timestamp
|
32
|
时戳反映了该 RTP 报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。
|
SSRC
|
32
|
用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的 SSRC。
|
CSRC
|
32
|
每个 CSRC 标识符占 32 位,可以有 0~15 个。每个 CSRC 标识了包含在该 RTP 报文有效载荷中的所有特约信源。
|
RTP Header头结构定义
/*
* RTP data header
*/
typedef struct {
unsigned int version:2; /* protocol version */
unsigned int p:1; /* padding flag */
unsigned int x:1; /* header extension flag */
unsigned int cc:4; /* CSRC count */
unsigned int m:1; /* marker bit */
unsigned int pt:7; /* payload type */
unsigned int seq:16; /* sequence number */
u_int32 ts; /* timestamp */
u_int32 ssrc; /* synchronization source */
u_int32 csrc[1]; /* optional CSRC list */
} rtp_hdr_t;
80 e0 00 1e 00 00 d2 f0 00 00 00 00 41 9b 6b 49 €?....??....A?kIe1 0f 26 53 02 1a ff06 59 97 1d d2 2e 8c 50 01 ?.&S....Y?.?.?P.cc 13 ec 52 77 4e e50e 7b fd 16 11 66 27 7c b4 ?.?RwN?.{?..f'|?f6 e1 29 d5 d6 a4 ef3e 12 d8 fd 6c 97 51 e7 e9 ??)????>.??l?Q??cfc7 5e c8 a9 51 f6 82 65 d6 48 5a 86 b0 e0 8c ??^??Q??e?HZ????头解析如下:80 ===> 10_0_0_0000 ====> V_P_X_CCe0 ===> 1_1110000 ====> M_PT00 1e ===> SequenceNum00 00 d2 f0 ===> Timestamp00 00 00 00 ===> SSRC
字段
|
位宽
|
含义
|
F
|
1
|
0代表NAL单元类型字段和其内容可能存在bit级别的错误或其他语义错误部分。1代表包含bit不存在bit级别的错误或其他语义错误部分
|
NRI
|
2
|
此帧数据是否影响参考帧完整性,取值从00 ~ 11重要性依次递增,00:
不用来为I帧来重构参考帧 11:表示
I帧,见图五
|
Type
|
5
|
打包类型,见图六
|
单NAL单元报文定义: 只包含一个NAL单元。也就是说聚合报文和分片报文都不能放在单NAL单元报文中。单NAL单元报文构造的时候,必须和RTP sequence的顺序是一致的
字段
|
位宽
|
含义
|
S
|
1
|
0:起始包 1:分包
|
E
|
1
|
0:分包 1:终止包
|
R
|
1
|
缺省预留
|
Type
|
5
|
打包类型,见图六
|
[1] RFC文档:RFC3550对应RTP/RTCP,RTC6184对应Playload format for h264
[2] http://www.faqs.org/rfcs/,上面有全面的英文RFC文档
[3] http://www.cnpaf.net/,有不少协议分析文档,也有中文RFC文档,但质量不是特别高。