一、rtsp分析
rtsp是通过tcp传输的,过滤数据包,分析如下:

追踪tcp流,可以得到如下:
//tcp.port == 1234过滤得到:

OPTIONS rtsp://127.0.0.1:1234/ RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2016.11.28)

RTSP/1.0 200 OK
Server: VLC/3.0.16
Content-Length: 0
Cseq: 2
Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER

DESCRIBE rtsp://127.0.0.1:1234/ RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp

RTSP/1.0 200 OK
Server: VLC/3.0.16
Date: Wed, 09 Mar 2022 02:51:18 GMT
Content-Type: application/sdp
Content-Base: rtsp://127.0.0.1:1234/
Content-Length: 547
Cache-Control: no-cache
Cseq: 3

v=0
o=- 16560462224506433247 16560462224506433247 IN IP4 LAPTOP-QF7IG4BT
s=Unnamed
i=N/A
c=IN IP4 0.0.0.0
t=0 0
a=tool:vlc 3.0.16
a=recvonly
a=type:broadcast
a=charset:UTF-8
a=control:rtsp://127.0.0.1:1234/
m=audio 0 RTP/AVP 14
b=AS:128
b=RR:0
a=rtpmap:14 MPA/90000/2
a=control:rtsp://127.0.0.1:1234/trackID=4
m=video 0 RTP/AVP 96
b=RR:0
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001f;sprop-parameter-sets=Z2QAH6zZQPARfvARAAADA+kAALuAjxgxlg==,aOvjyyLA;
a=control:rtsp://127.0.0.1:1234/trackID=5
SETUP rtsp://127.0.0.1:1234/trackID=4 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=57200-57201

RTSP/1.0 200 OK
Server: VLC/3.0.16
Date: Wed, 09 Mar 2022 02:51:18 GMT
Transport: RTP/AVP/UDP;unicast;client_port=57200-57201;server_port=57202-57203;ssrc=99917EDA;mode=play
Session: c81572e98faef68e;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 4

SETUP rtsp://127.0.0.1:1234/trackID=5 RTSP/1.0
CSeq: 5
User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=57204-57205
Session: c81572e98faef68e

RTSP/1.0 200 OK
Server: VLC/3.0.16
Date: Wed, 09 Mar 2022 02:51:18 GMT //单播客户端 偶数端口rtp 奇数端口rtcp
Transport: RTP/AVP/UDP;unicast;client_port=57204-57205;server_port=57206-57207;ssrc=33E4A5A5;mode=play
Session: c81572e98faef68e;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 5

PLAY rtsp://127.0.0.1:1234/ RTSP/1.0
CSeq: 6
User-Agent: LibVLC/3.0.16 (LIVE555 Streaming Media v2016.11.28)
Session: c81572e98faef68e
Range: npt=0.000-

RTSP/1.0 200 OK
Server: VLC/3.0.16
Date: Wed, 09 Mar 2022 02:51:19 GMT
RTP-Info: url=rtsp://127.0.0.1:1234/trackID=4;seq=33470;rtptime=673918348, url=rtsp://127.0.0.1:1234/trackID=5;seq=29052;rtptime=673918348
Range: npt=1636.471649-
Session: c81572e98faef68e;timeout=60
Content-Length: 0
Cache-Control: no-cache
Cseq: 6

===================================================

二、RTP报文分析
1.报文





三、rtcp包分析
RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中。RTCP有如下五种分组类型

下面只讲述SR类型
发送端报告分组SR(Sender Report)用来使发送端以多播方式向所有接收端报告发送情况。SR分组的主要内容有:相应的RTP流的SSRC,RTP流中最新产生的RTP分组的时间戳和NTP,RTP流包含的分组数,RTP流包含的字节数。SR包的封装如图所示



四、H264包分析
1.H264中NAL UNIT HEADER简介
原始码流都是由一个个的 NALU(Network Abstract Layer)网络抽象层 连续组成,其中NALU=[StartCode] + [NALU Header] + [NALU Payload]组成,其中
StartCode:表示一个NALU的开始,一般情况下是以4字节“00 00 00 01”或者3字节“00 00 01”,一般4字节居多。
NALU Header:表示一组视频编码的头部信息,具体下面分析。
Payload:表示原始字节序列的有效载荷。

NAL UNIT HEADER
下面对比一下原始码流的H264和H265的NAL unit header。其中H264的Nal Unit头是一个字节,具体每个位表示如下:

VCL: Video Coding Layer
解析原始码流的H264 TYPE方式:
//定义header[4]为去除掉“00 00 00 01”之后的那个字节
int type = header[4] & 0x1F
这里说明一下,有些编码是没有SEI帧的,SEI这个增强信息帧中一般填入一些,人脸识别的坐标等信息,也可以自定义一些信息。一般的流都是按照sps,pps,I ,p,I,P……的顺序发送的,其中流媒体发送的时候为了能够在任何点都能够解析编码,通常会在I帧前添加sps和pps两帧的单独包或者聚合包,之后再发送I帧。

RTP包发送的时候,就是将原始码流中的“00 00 00 01”去掉,按照封装格式封装,然后为每一个封装添加RTP header,再发送出去。
在RTP其中CC 很多情况下为0,即没有CSRC信息,所以通常情况下RTP header是由12个字节组成的。
如果使用UDP传输的话,直接使用这个RTP header;但是在tcp传输的时候会在header前在添加四个字节:
​ [magic number]+[channel number]+[data length]

H264数据包如下:

2.H.264 RTP 载荷封装格式
TYPE的类型说明
这里我们先说下Type的类型,RTP中增加了H264中23中以外的格式,先来看下这个header头部

这个Type类型用于区分封装的类型,H.264的帧类型1-23之间,之后RTP又有新增,如下:

这里有些类型分为A型和B型,区别在于是否含有(DON, DONB, DOND)信息,含有的为B型,不含有的为A型。我们一般情况下用到的都是A型,不含有(DON, DONB, DOND)信息的,是我们主要分析的对象。
所以从封装标准文档中看,分为三种格式分别为:Single NAL unit,aggregation packet,Fragmentation unit。

单个NAL包:SINGLE NAL UNIT PACKET

这种很简单,一个 RTP 包仅由一个完整的 NALU 组成. 这种情况下 RTP NAL 头类型字段和原始的 H.264的
NALU 头类型字段是一样的,即在范围1到23之间

聚合包:AGGREGATION PACKETS
单时间聚合包:SINGLE-TIME AGGREGATION PACKET

多时间聚合包:MULTI-TIME AGGREGATION PACKETS (MTAPS)
多时间聚合包分为两种:MTAP16和MTAP24,区别在于每个NALU TS offset的长度一个是16位,一个是24位。
MTAP16格式
MTAP24格式

分片单元:FRAGMENTATION UNITS (FUS)
FU-A 的格式如下

下面是FU indicator,FU Indicator其实和NAL头部几乎一样,就是nal类型变成了分片包的类型28,原先的nal类型保存到了FU Header中的Type。

FU header


这些内容填充好之后,就和payload数据合成一个RTP包,然后发送出去。
这里S=0,E=1,R=0

TYPE= 0X5C & 0X1F = 28
TYPE = 0X81&0X1F = 1 (P帧)
10000001—》S=1, E=0,R=0 P的起始包;

参考:https://www.freesion.com/article/2309579039/

抓包分析rtsp\rtp\h264相关推荐

  1. Wireshark 抓包分析 RTSP/RTP/RTCP 基本工作过程

    整体而言,RTSP 通常工作于可靠的传输协议 TCP 之上,就像 HTTP 那样,用于发起/结束流媒体传输,交换流媒体元信息.RTP 通常工作于 UDP 之上,用于传输实际的流媒体数据,其中的载荷格式 ...

  2. linux怎么抓sip包,Ubuntu下使用Wireshark进行抓包分析(含SIP和RTP包)

    遇到需要在Linux下抓包分析的问题,便用到了wireshark,非常强大的抓包分析软件,直接在系统里面安装,然后使用明亮抓包即可! 我这里用的是Ubuntuserver版,执行安装: 1.apt-g ...

  3. 用Wireshark抓包分析协议 计算机网络

    此篇博客记录使用Wireshark抓包分析协议. 目录 一.DNS 二.分析TCP握手过程 三.TLS报文 四.HTTP协议 五.SMTP 六.ARP 七.RTP 八.RTMP 一.DNS DNS是域 ...

  4. C++/Qt音视频通话开发MetaRTC源码解读,dtls交互流程,dtls抓包分析

    目录 dtls抓包分析 dtls流程,主叫发送Client Hello dtls流程,Application Data dtls流程,Encrypted Alert 本章内容解读MetaRTC开源代码 ...

  5. hls二次加密 m3u8_HLS实战之Wireshark抓包分析

    0.引言 Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直 ...

  6. Wireshark数据抓包分析(网络协议篇)1.2安装Wireshark

    Wireshark数据抓包分析(网络协议篇)1.2安装Wireshark Wireshark(前称Ethereal)是一个网络包分析工具.该工具主要是用来捕获网络包,并显示包的详细情况.本节将分别介绍 ...

  7. Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述

    Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述 网络协议是用于不同计算机之间进行网络通信的.网络协议是网络上所有设备(如网络服务器.计算机.交换机.路由器等)之间通信规则的集合,它 ...

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

    Wireshark数据抓包分析--网络协议篇 Wireshark是目前最受欢迎的抓包工具.它可以运行在Windows.Linux及MAC OS X操作系统中,并提供了友好的图形界面.同时,Wiresh ...

  9. 转 Wireshark和TcpDump抓包分析心得

    1. Wireshark与tcpdump介绍 Wireshark是一个网络协议检测工具,支持Windows平台和Unix平台,我一般只在Windows平台下使用Wireshark,如果是Linux的话 ...

最新文章

  1. protobuf和socket通信简单实例
  2. PHP版本VC6与VC9/VC11/VC14、Thread Safe与None-Thread Safe等的区别
  3. 我的Linux随笔目录
  4. java 64进制转10进制_java进制转换
  5. 第四周实践项目7 多项式求和
  6. 如何把很多照片拼成一张照片_一张25GB的照片,到底比普通照片强在哪儿?
  7. 6.微服务设计 --- 部署
  8. vlan理论03-vlan映射
  9. 【手把手教你如何从Tushare库下载股票数据,并保存在硬盘当中。第二篇下载存储数据】
  10. 破解Excel受保护文件
  11. CocosCreator矢量绘图组件(1)
  12. oracle匹配excel数据,ORACLE与excel的数据互传方法
  13. 磁盘列阵(RAID)
  14. 微信小程序拼团功能页面展示
  15. npm install 连接不上github解决办法
  16. Revert R12.1.3 Homepage Layout to Link Style as in R12.1.1 or 11i
  17. MPU6050加速度、角速度的解算以及互补滤波使用
  18. 等势线matlab仿真
  19. 诺基亚手机软件设计大赛
  20. es对几十亿数据能达到秒级响应吗_万亿数据下的多维实时分析系统,如何做到亚秒级响应...

热门文章

  1. 我来泼盆冷水:正面迎击AI的时代千万别被ChatGPT割了韭菜
  2. mysql tokudb innodb_TokuDB vs Innodb 基准测试对比
  3. win11点击任务栏快捷方式出现“该文件没有与之关联的应用来执行该操作”解决方法
  4. temporal shift module(TSM)
  5. BootstrapVue使用入门
  6. reason=Fielddata is disabled on text fields by default. Set fielddata=true on [brandName] in order t
  7. Windows Server2012多远程桌面配置
  8. ATTCK 红队实战 1
  9. Vue学习:事件修饰符
  10. INtouch与 ModbusTCP通讯