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

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的定义

负载类型 编码名称 时钟频率 通道数 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! 我们来详细来看下:

该数据包中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

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

Padding

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

X(扩展)

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

CC(CSRC计数)

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

M(marker)

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

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

PT(payload type)

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

sequence number

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

wireshark的解析如下:

timestamp

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

SSRC

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

CSRC

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

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

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

通过抓包分析RTP包头格式信息的更多相关文章

  1. python编写网络抓包分析脚本

    python编写网络抓包分析脚本 写网络抓包分析脚本,一个称手的sniffer工具是必不可少的,我习惯用Ethereal,简单,易用,基于winpcap的一个开源的软件 Ethereal自带许多协议的 ...

  2. 聊聊tcpdump与Wireshark抓包分析

    1 起因# 前段时间,一直在调线上的一个问题:线上应用接受POST请求,请求body中的参数获取不全,存在丢失的状况.这个问题是偶发性的,大概发生的几率为5%-10%左右,这个概率已经相当高了.在排查 ...

  3. HTTP2特性预览和抓包分析

    背景 近年来,http网络请求量日益添加,以下是httparchive统计,从2012-11-01到2016-09-01的请求数量和传输大小的趋势图: 当前大部份客户端&服务端架构的应用程序, ...

  4. Wireshark和TcpDump抓包分析心得

    Wireshark和 TcpDump抓包分析心得  1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Window ...

  5. wireshark 抓包分析 TCPIP协议的握手

    wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...

  6. Wireshark抓包分析TCP 3次握手、4次挥手过程

    Wireshark简介 更多有关Wireshark的教程.软件下载等,请见:http://www.52im.net/thread-259-1-1.html,本文只作简要介绍. 1Wireshark 是 ...

  7. Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析

    Wireshark抓包分析TCP建立/释放链接的过程以及状态变迁分析 一.介绍计算机网络体系结构 1.计算机的网络体系结构 在抓包分析TCP建立链接之前首先了解下计算机的网络通信的模型,我相信学习过计 ...

  8. 转:tcpdump抓包分析(强烈推荐)

    转自:https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac71 ...

  9. Wireshark数据抓包分析——网络协议篇

                   Wireshark数据抓包分析--网络协议篇     watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...

  10. WebSocket抓包分析

    转载自:https://www.cnblogs.com/songwenjie/p/8575579.html Chrome控制台 (1)F12进入控制台,点击Network,选中ws栏,注意选中Filt ...

随机推荐

  1. Redis有哪些潜在的慢操作?

    Redis作为内存数据库,访问速度快是最大的特点,那么,什么情况下,Redis也会变慢呢? Redis底层数据结构 Redis有5种基本数据类型:String,List,Hash,Set,ZSet 有 ...

  2. Exadata健康检查工具EXAchk

    本文根据MOS文章:Oracle Exadata Database Machine EXAchk (Doc ID 1070954.1)整理关键步骤. 注:通常都会要求使用当前最新可用的EXAchk版本 ...

  3. Java商城单体和微服务架构有什么区别

    微服务架构 概述 BizSpring移动全端国际化电商平台,是建立在Spring Cloud 基础上的微服务应用,服务化是系统达到一定规模以后的必然选择,主流的互联网公司基本都在迁移到服务化架构. 我 ...

  4. 【译】宣布推出适用于 .NET 的 Azure Migrate 应用程序和代码评估工具

    原文 | Olia Gavrysh 翻译 | 郑子铭 我们很高兴地宣布发布一款新工具,可以帮助您将本地 .NET 应用程序迁移到 Azure. 适用于 .NET 的 Azure Migrate 应用程 ...

  5. 剑指Offer07 重建二叉树

    剑指 Offer 07. 重建二叉树 前置概念: 前序:访问根节点,先序遍历左子树,先序遍历右子树: 中序:中序遍历左子树,访问根节点,中序遍历右子树: 后序:后序遍历左子树,后序遍历右子树,访问根节 ...

  6. 函数防抖与节流 - js

    防抖(debounce)和节流(throttle)是在 高频次调用函数 的场景下,常用的解决方案了.故名思意,可以节省开销,优化体验. 二者的区别: 防抖: 我们让想要执行的函数只在最后一次调用完一小 ...

  7. RDM6300 125KHz ID卡读卡器

    RDM6300 RDM6300是一个针对125KHz ID卡的读卡模块, 用于读取EM4100兼容ID卡信息, 由一片C8051F330和一片LM358D双运放组成 注: EM4100, 4200卡是 ...

  8. B - Bracket Sequence题解

    B - Bracket Sequence 思路: 用一个flag来标记括号的数目,如果括号数目是个偶数的话,就代表当前要执行'+'操作,反之就是'*'操作.对于最外层的数,是没有计算的. 所以最后要单 ...

  9. win32 - 在cmd中禁用进程权限

    C:\Users\path>whoami /priv 在cmd中输入whoami /priv后将获得当前令牌(标准用户)的权限. C:\Users\path>tasklist /v /fo ...

  10. 深入理解Go语言(04):scheduler调度器-GMP里结构体源码分析

    在前面一节中简单介绍了golang的调度模型-GPM模型,介绍了他们各自的作用.这篇文章就来看看他们的源码结构. Go版本:go1.13.9 M结构体 M结构体是OS线程的一个抽象,主要负责结合P运行 ...