抓包分析rtsp\rtp\h264

网友投稿 323 2022-09-22

抓包分析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://freesion.com/article/2309579039/

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:茶颜悦色爆红背面:有员工累到哭 背不下企业文化被罚抄几百遍!
下一篇:十五、【Spring Boot】异步、邮件、定时任务
相关文章

 发表评论

暂时没有评论,来抢沙发吧~