当前位置: 首页 > 工具软件 > RTP > 使用案例 >

rtsp/rtp协议

苏涛
2023-12-01

wireshark 分析 rtsp, 地址为rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov

TCP连接到RTSP服务器,发送的第一个
OPTIONS rtsp://184.72.239.149:554/vod/mp4://BigBuckBunny_175k.mov RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.5 (LIVE555 Streaming Media v2016.10.21)
接收到

RTSP/1.0 200 OK
CSeq: 2
Server: Wowza Streaming Engine 4.7.5.01 build21752
Cache-Control: no-cache
Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, OPTIONS, ANNOUNCE, RECORD, GET_PARAMETER
Supported: play.basic, con.persistent

OPTIONS : 目的是得到服务器提供的可用方法

发送    C向S发起DESCRIBE请求,为了得到会话描述信息(SDP):
DESCRIBE rtsp://184.72.239.149:554/vod/mp4://BigBuckBunny_175k.mov RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.5 (LIVE555 Streaming Media v2016.10.21)
Accept: application/sdp
收到   服务器回应一些对此会话的描述信息(sdp)

RTSP/1.0 200 OK
CSeq: 3
Server: Wowza Streaming Engine 4.7.5.01 build21752
Cache-Control: no-cache
Expires: Wed, 6 Mar 2019 14:18:58 UTC
Content-Length: 588
Content-Base: rtsp://184.72.239.149:554/vod/mp4://BigBuckBunny_175k.mov/
Date: Wed, 6 Mar 2019 14:18:58 UTC
Content-Type: application/sdp
Session: 303660287;timeout=60

v=0
o=- 303660287 303660287 IN IP4 184.72.239.149
s=BigBuckBunny_175k.mov
c=IN IP4 184.72.239.149
t=0 0
a=sdplang:en
a=range:npt=0- 596.458
a=control:*
m=audio 0 RTP/AVP 96      
a=rtpmap:96 mpeg4-generic/48000/2
a=fmtp:96 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1190
a=control:trackID=1
m=video 0 RTP/AVP 97
a=rtpmap:97 H264/90000
a=fmtp:97 packetization-mode=1;profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtkDxWhAAAADAEAAAAwDxYuS,aMuMsg==
a=cliprect:0,0,160,240
a=framesize:97 240-160
a=framerate:24.0
a=control:trackID=2

Content-Type:application/sdp表示内容为sdp信息
m=video 0 RTP/AVP 9797 代表H264视频数据
  

接下来就是设定RTP/AVP数据了 

SETUP 中 Transport: 有TCP和UDP      RTP/AVP/TCP   RTP/AVP/UDP

这里在live555中有体现

RTSPServer::RTSPClientSession::handleCmd_SETUP()

{ case RTP_TCP:  case RAW_UDP:...}

这里为视频

-> 客户端提醒服务器建立会话,并确定传输模式: uri中带有trackID=0,表示对该通道进行设置

SETUP rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov/trackID=1 RTSP/1.0

CSeq: 4

User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)

Transport: RTP/AVP;unicast;client_port=54930-54931

<-   Transport参数设置了传输模式,包的结构, Session:服务器回应的会话标识符

RTSP/1.0 200 OK

CSeq: 4

Server: Wowza Streaming Engine 4.7.5.01 build21752

Cache-Control: no-cache

Expires: Sun, 24 Mar 2019 13:51:56 UTC

Transport: RTP/AVP;unicast;client_port=54930-54931;source=184.72.239.149;server_port=16504-16505;ssrc=03C26361

Date: Sun, 24 Mar 2019 13:51:56 UTC

Session: 324476471;timeout=60

这里为音频数据:

-> 61407->554

SETUP rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov/trackID=2 RTSP/1.0

CSeq: 5

User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)

Transport: RTP/AVP;unicast;client_port=62132-62133

Session: 324476471

<-   PORT(rtsp server port:554,  LVC port:61407)

RTSP/1.0 200 OK

CSeq: 5

Server: Wowza Streaming Engine 4.7.5.01 build21752

Cache-Control: no-cache

Expires: Sun, 24 Mar 2019 13:51:57 UTC

Transport: RTP/AVP;unicast;client_port=62132-62133;source=184.72.239.149;server_port=8314-8315;ssrc=5DCD1379

Date: Sun, 24 Mar 2019 13:51:57 UTC

Session: 324476471;timeout=60

n次  RTP协议

UDP Port: LVC : 54930 -> Server:16504      4Byte (连续发送多次)

54931->16505    62132->8314  62133->8315   62133->8315

CE FA ED FE

->开始播放 Port(61407->554)

PLAY rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov/ RTSP/1.0

CSeq: 6

User-Agent: LibVLC/2.2.4 (LIVE555 Streaming Media v2016.02.22)

Session: 324476471

Range: npt=0.000-

<- Port:(554->61407)

RTSP/1.0 200 OK

RTP-Info: url=rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov/trackID=1;seq=1;rtptime=0,url=rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov/trackID=2;seq=1;rtptime=0

CSeq: 6

Server: Wowza Streaming Engine 4.7.5.01 build21752

Cache-Control: no-cache

Range: npt=0.0-596.458

Session: 324476471;timeout=60

然后就是RTP数据了

<-收到 UDP (RTCP Sender Report) Port: 8315->62133  

 80 c8 00 06 5d cd 13 79 e0 42 09 fc 40 c4 9b a5 00 00 00 00 00 00 00 00 00 00 00 00

版本 ,类型长度, SSRC,  Timestamp MSW, Timestamp LSW ,

<- RTP数据

翻译结果:

Version:RFC 1889 V2, Payload type: DynamicRTP-Type-97, Sequence number:1, Timestamp:0,Sync Id:0x5dcd1379,

Payload: ...............

这个时候就可以播放图像了

RTP数据

https://blog.csdn.net/chen495810242/article/details/39207305  RTP负载H264

 

参考: https://blog.csdn.net/qq_25005909/article/details/78622326

每一个RTP数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前12个字节的含义是固定的,而负载则可以是音频或者视频数据。

V:RTP协议的版本号,占2位,当前协议版本号为2
P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。
X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头
CC:CSRC计数器,占4位,指示CSRC 标识符的个数
M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。
PT: 有效荷载类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析
序列号:占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。这个字段当下层的承载协议用UDP的时候,网络状况不好的时候可以用来检查丢包。同时出现网络抖动的情况可以用来对数据进行重新排序,序列号的初始值是随机的,同时音频包和视频包的sequence是分别记数的。
时戳(Timestamp):占32位,必须使用90 kHz 时钟频率。时戳反映了该RTP报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。
同步信源(SSRC)标识符:占32位,用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC。
特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源。

H264 NAL单元

每帧的界定符为00 00 00 01 或者00 00 01 ,  pps和sps

H264在网络传输的是NALU,NALU的结构是:NAL头+RBSP

NALU头用来标识后面的RBSP是什么类型的数据

参考:https://blog.csdn.net/go_str/article/details/80340564

H264结构中,一个视频图像编码后的数据叫做一帧,一帧由一个片(slice)或多个片组成,一个片由一个或多个宏块(MB)组成,一个宏块由16x16的yuv数据组成。宏块作为H264编码的基本单位。
        在H264协议内定义了三种帧,分别是I帧、B帧与P帧。I帧就是之前所说的一个完整的图像帧,而B、帧与P帧所对应的就是之前说的不编码全部图像的帧。P帧与B帧的差别就是P帧是参考之前的I帧而生成的,而B帧是参考前后图像帧编码生成的
 

 类似资料: