ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

通过抓包分析RTP包头格式信息

2022-08-03 17:33:21  阅读:216  来源: 互联网

标签:PT 值为 CSRC RTP 包头 数据包 抓包 wireshark


目录

RTP概览

RTP是一种应用层协议,传输层协议可以是TCP或者UDP(UDP多一些)!

RTP数据包由两部分组成,一部分是RTP Heaeder,一部分是RTP body,RTP Header占用最少12个字节,最多72个字节;另一部分是RTP Payload,用来封装实际的数据负载,如封装h264编码的视频数据!下面我们来仔细看下RTP Header和RTP Body的组织形式!

RTP包格式示意图
image

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(多媒体类型)
image

视频多媒体类型
image

说明:

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数据包的抓包
image

红色框中的部分为RTP Header;绿色框中的部分为RTP Payload! 我们来详细来看下:

该数据包中Rtp Header的16进制表示为:

80 21 01 02 3f 4d 22 9b de ad be ef

将其用二进制表示如下:

0               1               2               3             4
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1 0|0|0|0 0 0 0|0|0 1 0 0 0 0 1|0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|0 0 1 1 1 1 1 1 0 1 0 0 1 1 0 1 0 0 1 0 0 0 1 0 1 0 0 1 1 0 1 1|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1 1 0 1 1 1 1 0 1 0 1 0 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 1 1|
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

Version

image

值为10,版本号为2,我们与wireshark的抓包解析对比一下:
image

Padding

image

值为0,表示不填充。wireshark的抓包如下:

image

X(扩展)

image

值为0。表示不支持扩展RTP头!wireshark的抓包如下
image

CC(CSRC计数)

image

CSRC计数器,值为0,表示没有RTP头信息中没有CSRC!wireshark的解析:
image

M(marker)

image

值为0,表示该数据包非一帧数据的最后一帧!wireshark的解析:
image

ps:当该值为1时,表示该数据包是一帧数据的最后一个数据包!

PT(payload type)

image

PT值为33,根据payload type,得知该rtp数据包的负载数据为自定义的数据类型!而抓包是一个从摄像头拉取视频数据,所以遵循GB28181标准,所以是一个ps类型的数据包。wireshark的解如下:
image

sequence number

image

值为0x 01 02,十进制为258,表示rtp包的序列号为258。
image

wireshark的解析如下:
image

timestamp

image

值为0x3f 4d 22 9b, 表示时间戳,wireshark解析为:
image

SSRC

image

同步信源标识符,此数据包的值为0xde ad be ef,wireshark的解析为:
image

CSRC

由于RTP Header中CC的值为0,所以表示CSRC在本数据包中的个数为0,在此处没有,RTP HEADER中允许有0-15个CSRC。

好了,RTP数据包的格式被我们经过肢解,图解后,我们对其也有了比较详尽的了解,本篇的介绍也就到这里了!我们下一讲再见吧!

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

标签:PT,值为,CSRC,RTP,包头,数据包,抓包,wireshark
来源: https://www.cnblogs.com/zuojie/p/16545310.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有