手撕RTSP协议系列(12)——RTP包格式


点击上方「蓝字」关注咱们html


前面咱们花了较多的篇幅来介绍了RTSP协议的一些细节,可是rtsp传输,本质上涉及三种协议,RTSP、RTP以及RTCP。RTSP主要负责链接创建,销毁及一些其余的控制。而实际涉及媒体数据传输使用的是RTP协议,本节咱们来介绍一下RTP协议。




RTP概览 web




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                        |
   | ....                                                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      V : 2bits,表示版本号,
      P : 1bit,表示是否支持填充,置为1的时候,表示在packet的末尾进行填充,方便一些针对固定长度算法的封装
      X : 1bit, 表示是否支持Rtp头扩展,置为1的时候,RtpHeader以后会跟1个header extension
      CC (CSRC count): 4bits,表示头部以后contributing sources identifiers的个数
      M : 1bit;对于视频,标记一帧的结束;对于音频,标记会话的开始
      PT : 7bits,表示传输的多媒体类型,https://tools.ietf.org/html/rfc3551
      sequence number :16bits(2字节),表示RTP包序号 
      timestamp :32bits(4字节),表示时间戳, 必须使用90 kHz 时钟频率
      SSRC :32bits(4字节),用于标识同步信源,参加同一视频会议的两个同步信源不能有相同的SSRC
      CSRC :特约信源标识符,每一个CSRC占用4个字节,能够有0~15个。每一个CSRC标识了包含在该RTP报文有效载荷中的全部特约信源
      PT (多媒体类型)
        音频多媒体类型
        视频多媒体类型
说明:
GB28181中对PT的定义


负载类型ide

编码名称flex

时钟频率ui

通道数编码

SDD描述中m字段的media项

4url

G.723spa

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数据包的格式被咱们通过肢解,图解后,咱们对其也有了比较详尽的了解,本篇的介绍也就到这里了!咱们下一讲再见吧!

往期推荐

手撕RTSP协议系列(1)——Rtsp基本流程

手撕RTSP协议系列(2)——Rtsp消息格式

手撕RTSP协议系列(3)——sdp格式详解

手撕RTSP协议系列(4)——OPTION

手撕RTSP协议系列(5)——DESCRIBE

手撕RTSP协议系列(6)——SETUP

手撕RTSP协议系列(7)——PLAY

手撕RTSP协议系列(8)——PAUSE

手撕RTSP协议系列(9)——TEARDOWN

手撕RTSP协议系列(10)——GET_PARAMETER

手撕RTSP协议系列(11)——RTSP_SET_PARAMETER






 

扫码关注了解更多



交流群已开启,有须要的朋友,公众号后台回复“交流群”,获取入群方式!


 




点点 在看 行不行




本文分享自微信公众号 - 视界音你而不一样(WorldOfVideoAndAudio)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索