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 |
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 v=0 |
Content-Type:application/sdp | 表示内容为sdp信息 |
m=video 0 RTP/AVP 97 | 97 代表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 |
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帧是参考前后图像帧编码生成的