前面我们花了较多的篇幅来介绍了RTSP协议的一些细节,但是rtsp传输,本质上涉及三种协议,RTSP、RTP以及RTCP。RTSP主要负责连接建立,销毁及一些其他的控制。而实际涉及媒体数据传输使用的是RTP协议,本节我们来介绍一下RTP协议。
RTP概览
RTP是一种应用层协议,传输层协议可以是TCP或者UDP(UDP多一些)!
RTP数据包由两部分组成,一部分是RTP Heaeder,一部分是RTP body,RTP Header占用最少12个字节,最多72个字节;另一部分是RTP Payload,用来封装实际的数据负载,如封装h264编码的视频数据!下面我们来仔细看下RTP Header和RTP Body的组织形式!
RTP包格式示意图
RTP Header格式
0 1 2 3 4
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| contributing source (CSRC) identifiers |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
说明:
GB28181中对PT的定义
负载类型 | 编码名称 | 时钟频率 | 通道数 | SDD描述中m字段的media项 |
---|---|---|---|---|
4 | G.723 | 8k HZ | 1 | audio |
8 | PCMA(G.711 A) | 8k HZ | 1 | audio |
9 | G722 | 8k HZ | 1 | audio |
18 | G.729 | 8k HZ | 1 | audio |
20 | SVACA(SVAC音频) | 8k HZ | 1 | audio |
96 | PS | 90k HZ | video | |
97 | MPEG-4 | video | ||
98 | H.264 | |||
99 | SAVC(SVAC视频) |
Rtp 数据包拆解
根据PT类型的不同,Payload有不同的组织方式。
让我们来看一个实际的RTP数据包的抓包
红色框中的部分为RTP Header;绿色框中的部分为RTP Payload! 我们来详细来看下:
该数据包中RtpHeader的16进制表示为:
将其用二进制表示如下:
Version
值为10,版本号为2,我们与wireshark的抓包解析对比一下:
Padding
值为0,表示不填充。wireshark的抓包如下:
X(扩展)
值为0。表示不支持扩展RTP头!wireshark的抓包如下
CC(CSRC计数)
CSRC计数器,值为09,表示没有RTP头信息中没有CSRC!wireshark的解析:
M(marker)
值为0,表示该数据包非一帧数据的最后一帧!wireshark的解析:
ps:当该值为1时,表示该数据包是一帧数据的最后一个数据包!
PT(payload type)
PT值为96,根据payload type,得知该rtp数据包的负载数据为自定义的数据类型!而抓包是一个从摄像头拉取视频数据,所以遵循GB28181标准,所以是一个ps类型的数据包。wireshark的解如下:
sequence number
值为0x 12 ed,十进制为4845,表示rtp包的序列号为4845。
wireshark的解析如下:
timestamp
值为0x4b cf fa 46, 表示时间戳,wireshark解析为:
SSRC
同步信源标识符,此数据包的值为0x6b 2f dd 87,wireshark的解析为:
CSRC
由于RTP Header中CC的值为0,所以表示CSRC在本数据包中的个数为0,在此处没有,RTP HEADER中允许有0-15个CSRC。
RTP Payload
蓝色阴影部分为Rtp Payload,我们可以看到第一个字节为0x67,比较容易想到该数据为视频帧的SPS,也说明了RTP Payload中的数据就是传输的媒体数据,至于SPS的细节,在这里就不详细展开了!
好了,RTP数据包的格式被我们经过肢解,图解后,我们对其也有了比较详尽的了解,本篇的介绍也就到这里了!我们下一讲再见吧!