抓包分析rtsp tph264
Posted 屁小猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抓包分析rtsp tph264相关的知识,希望对你有一定的参考价值。
一、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/
VLC 播放RTSP 抓包分析
VLC 播放RTSP视频抓包记录:
vlc -vvv rtsp://172.16.66.22/nuc.sdp
OPTIONS: OPTIONS rtsp://172.16.66.22/nuc.sdp RTSP/1.0 CSeq: 2 User-Agent: LibVLC/2.2.6 (LIVE555 Streaming Media v2016.02.22) -------------------------------------------------------------------------- RTSP/1.0 200 OK Server: DSS/6.0.3 (Build/526.3; Platform/Linux; Release/Darwin Streaming Server; State/Development; ) Cseq: 2 Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD DESCRIBE: DESCRIBE rtsp://172.16.66.22/nuc.sdp RTSP/1.0 CSeq: 3 User-Agent: LibVLC/2.2.6 (LIVE555 Streaming Media v2016.02.22) Accept: application/sdp -------------------------------------------------------------------------- RTSP/1.0 200 OK Server: DSS/6.0.3 (Build/526.3; Platform/Linux; Release/Darwin Streaming Server; State/Development; ) Cseq: 3 Cache-Control: no-cache Content-length: 568 Date: Wed, 18 Oct 2017 02:13:28 GMT Expires: Wed, 18 Oct 2017 02:13:28 GMT Content-Type: application/sdp x-Accept-Retransmit: our-retransmit x-Accept-Dynamic-Rate: 1 Content-Base: rtsp://172.16.66.22/nuc.sdp/ v=0 o=- 0 0 IN IP4 127.0.0.1 s=No Name c=IN IP4 0.0.0.0 t=0 0 a=tool:libavformat 57.71.100 a=control:* m=video 0 RTP/AVP 96 b=AS:3011 a=3GPP-Adaptation-Support:1 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAH6zZgFAFuhAAAAMAEAAAAwOo8YMZoA==,aOl7PI8=; profile-level-id=64001F a=control:trackID=0 m=audio 0 RTP/AVP 97 b=AS:127 a=3GPP-Adaptation-Support:1 a=rtpmap:97 MPEG4-GENERIC/48000/2 a=fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=119056E500 a=control:trackID=1 SETUP: SETUP rtsp://172.16.66.22/nuc.sdp/trackID=0 RTSP/1.0 CSeq: 4 User-Agent: LibVLC/2.2.6 (LIVE555 Streaming Media v2016.02.22) Transport: RTP/AVP;unicast;client_port=61296-61297 -------------------------------------------------------------------------- RTSP/1.0 200 OK Server: DSS/6.0.3 (Build/526.3; Platform/Linux; Release/Darwin Streaming Server; State/Development; ) Cseq: 4 Cache-Control: no-cache Session: 6250823492717837688 Date: Wed, 18 Oct 2017 02:13:28 GMT Expires: Wed, 18 Oct 2017 02:13:28 GMT Transport: RTP/AVP;unicast;source=172.16.66.22;client_port=61296-61297;server_port=6970-6971 SETUP: SETUP rtsp://172.16.66.22/nuc.sdp/trackID=1 RTSP/1.0 CSeq: 5 User-Agent: LibVLC/2.2.6 (LIVE555 Streaming Media v2016.02.22) Transport: RTP/AVP;unicast;client_port=61298-61299 Session: 6250823492717837688 -------------------------------------------------------------------------- RTSP/1.0 200 OK Server: DSS/6.0.3 (Build/526.3; Platform/Linux; Release/Darwin Streaming Server; State/Development; ) Cseq: 5 Session: 6250823492717837688 Cache-Control: no-cache Date: Wed, 18 Oct 2017 02:13:28 GMT Expires: Wed, 18 Oct 2017 02:13:28 GMT Transport: RTP/AVP;unicast;source=172.16.66.22;client_port=61298-61299;server_port=6970-6971 PLAY: PLAY rtsp://172.16.66.22/nuc.sdp/ RTSP/1.0 CSeq: 6 User-Agent: LibVLC/2.2.6 (LIVE555 Streaming Media v2016.02.22) Session: 6250823492717837688 Range: npt=0.000- -------------------------------------------------------------------------- RTSP/1.0 200 OK Server: DSS/6.0.3 (Build/526.3; Platform/Linux; Release/Darwin Streaming Server; State/Development; ) Cseq: 6 Session: 6250823492717837688 Range: npt=now- RTP-Info: url=rtsp://172.16.66.22/nuc.sdp/trackID=0,url=rtsp://172.16.66.22/nuc.sdp/trackID=1 . . . . . . TEARDOWN: TEARDOWN rtsp://172.16.66.22/nuc.sdp/ RTSP/1.0 CSeq: 7 User-Agent: LibVLC/2.2.6 (LIVE555 Streaming Media v2016.02.22) Session: 6250823492717837688 -------------------------------------------------------------------------- RTSP/1.0 200 OK Server: DSS/6.0.3 (Build/526.3; Platform/Linux; Release/Darwin Streaming Server; State/Development; ) Cseq: 7 Session: 6250823492717837688 Connection: Close
本文出自 “李春利” 博客,请务必保留此出处http://990487026.blog.51cto.com/10133282/1973660
以上是关于抓包分析rtsp tph264的主要内容,如果未能解决你的问题,请参考以下文章