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. 深入剖析Java中的反射,由浅入深,层层剥离!

    写在开头 之前更新了不少Java的基础知识,比如Java的类.对象.基础类型.关键字.序列化.泛型.值传递等等,今天要上点深度了,来聊一聊Java中的 反射 ! 所谓反射,就是在运行时分析.检查和操作 ...

  2. Delphi 异常处理 详解

    [1] Exception类的定义在SysUtils单元中. [2] Delphi也支持不从Exception继承的异常类,但是我觉得这么做并不十分的明智. 一.异常的源 在Delphi的应用程序中, ...

  3. 【译】使用.NET将WebAssembly扩展到云(一)

    原文 | Richard Lander 翻译 | 郑子铭 WebAssembly(Wasm)是一种令人兴奋的新虚拟机和(汇编)指令格式. Wasm 诞生于浏览器,是 Blazor 项目的重要组成部分. ...

  4. UVA12390 Distributing Ballot Boxes 题解

    题目传送门 题意 有 \(n\) 个城市,\(b\) 个投票箱,第 \(i\) 个城市有 \(a_i\) 人,每个人均有一张票,将 \(b\) 个投票箱分给 \(n\) 个城市,每个城市的票分摊在投票 ...

  5. NC15291 幸运数字Ⅱ

    题目链接 题目 题目描述 定义一个数字为幸运数字当且仅当它的所有数位都是4或者7. 比如说,47.744.4都是幸运数字而5.17.467都不是. 定义next(x)为大于等于x的第一个幸运数字.给定 ...

  6. java 注解结合 spring aop 自动输出日志新增拦截器与过滤器

    auto-log auto-log 是一款为 java 设计的自动日志监控框架. 前面已经写过了两篇: java 注解结合 spring aop 实现自动输出日志 java 注解结合 spring a ...

  7. let与const

    let与const ES2015(ES6)新增加了两个重要的JavaScript关键字: let和const. 块级作用域 代码块内如果存在let或者const,代码块会对这些命令声明的变量从块的开始 ...

  8. C++ 快速加载 Dll 里的 API

    最近项目里要重新编写程序加载器,也就是编译出一个可执行文件,在 Windows 上是 .exe 为什么要程序加载器? 个人理解是,可执行文件大小最好是越小越好,功能都可以由 dll 文件执行 而程序加 ...

  9. 【Android逆向】破解看雪9月算法破解第三题

    这题的目标是算法还原,并写出注册机 1. 9月份算法第一题.apk 安装到手机 2. 随意输入账号密码,提示错误 3. apk拖入到jadx中 public native boolean regist ...

  10. 泛型类Generic注解

    在 Python 的 typing 模块中,Generic 是一个泛型类,用于创建参数化的类和函数,以便支持不同类型的参数.它允许你定义具有类型参数的类,这些类型参数在实例化时才确定.这样,你可以在不 ...