IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 抓包分析rtsp |rtp |h264 -> 正文阅读

[网络协议]抓包分析rtsp |rtp |h264

一、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/

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:34:38  更:2022-03-11 22:35:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:18:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码