rtsp詳解二之wireshark抓包分析
一、概述
RTSP(Real-Time Stream Protocol )是一種基於文字的應用層協議,在語法及一些訊息引數等方面,RTSP協議與HTTP協議類似。
RTSP被用於建立的控制媒體流的傳輸,它為多媒體服務扮演“網路遠端控制”的角色。RTSP本身並不用於傳送媒體流資料。媒體資料的傳送可通過RTP/RTCP等協議來完成。
基本的RTSP操作過程
首先,客戶端連線到流伺服器併發送一個OPTIONS命令查詢伺服器提供的方法收到伺服器的迴應後,傳送DESCRIBE命令查詢某個媒體檔案的SDP資訊。流伺服器通過一個SDP描述來進行迴應,迴應資訊包括流數量、媒體型別等資訊。客戶端分析該SDP
是通過wireshark抓包獲得的完整客戶端與伺服器進行的RTSP互動。黑色字體表示客戶端請求,紅色字體表示伺服器迴應。
- OPTIONS rtsp://10.34.3.80/D:/a.264 RTSP/1.0
- CSeq: 2
-
User-Agent: LibVLC/2.0.7 (LIVE555 Streaming Media v2012.12.18)
- <span style="color:#ff0000;">RTSP/1.0 200 OK
- CSeq: 2
- Date: Tue, Jul 22 2014 02:41:21 GMT
- Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER
- </span>DESCRIBE rtsp://10.34.3.80/D:/a.264 RTSP/1.0
- CSeq: 3
-
User-Agent: LibVLC/2.0.7 (LIVE555 Streaming Media v2012.12.18)
- Accept: application/sdp
- <span style="color:#ff0000;">RTSP/1.0 200 OK
- CSeq: 3
- Date: Tue, Jul 22 2014 02:41:21 GMT
- Content-Base: rtsp://10.34.3.80/D:/a.264/
- Content-Type: application/sdp
- Content-Length: 494
- v=0
- o=- 1405995833260880 1 IN IP4 10.34.3.80
- s=H.264 Video, streamed by the LIVE555 Media Server
- i=D:/a.264
- t=0 0
- a=tool:LIVE555 Streaming Media v2014.07.04
- a=type:broadcast
- a=control:*
- a=range:npt=0-
- a=x-qt-text-nam:H.264 Video, streamed by the LIVE555 Media Server
- a=x-qt-text-inf:D:/a.264
- m=video 0 RTP/AVP 96
- c=IN IP4 0.0.0.0
- b=AS:500
- a=rtpmap:96 H264/90000
- a=fmtp:96 packetization-mode=1;profile-level-id=42001E;sprop-parameter-sets=Z0IAHpWoLQSZ,aM48gA==
- a=control:track1
- </span>SETUP rtsp://10.34.3.80/D:/a.264/track1 RTSP/1.0
- CSeq: 4
- User-Agent: LibVLC/2.0.7 (LIVE555 Streaming Media v2012.12.18)
- Transport: RTP/AVP;unicast;client_port=60094-60095
- <span style="color:#ff0000;">RTSP/1.0 200 OK
- CSeq: 4
- Date: Tue, Jul 22 2014 02:41:25 GMT
- Transport: RTP/AVP;unicast;destination=10.34.3.80;source=10.34.3.80;client_port=60094-60095;server_port=6970-6971
- Session: 54DAFD56;timeout=65
- </span>PLAY rtsp://10.34.3.80/D:/a.264/ RTSP/1.0
- CSeq: 5
- User-Agent: LibVLC/2.0.7 (LIVE555 Streaming Media v2012.12.18)
- Session: 54DAFD56
- Range: npt=0.000-
- <span style="color:#ff0000;">RTSP/1.0 200 OK
- CSeq: 5
- Date: Tue, Jul 22 2014 02:41:25 GMT
- Range: npt=0.000-
- Session: 54DAFD56
- RTP-Info: url=rtsp://10.34.3.80/D:/a.264/track1;seq=10244;rtptime=2423329550
- </span>GET_PARAMETER rtsp://10.34.3.80/D:/a.264/ RTSP/1.0
- CSeq: 6
- User-Agent: LibVLC/2.0.7 (LIVE555 Streaming Media v2012.12.18)
- Session: 54DAFD56
- <span style="color:#ff0000;">RTSP/1.0 200 OK
- CSeq: 6
- Date: Tue, Jul 22 2014 02:41:25 GMT
- Session: 54DAFD56
- Content-Length: 10
- </span>
- //終止
- TEARDOWN rtsp://10.34.3.80/D:/a.264/ RTSP/1.0
- CSeq: 7
- User-Agent: LibVLC/2.0.7 (LIVE555 Streaming Media v2012.12.18)
- Session: 54DAFD56
- <span style="color:#ff0000;">RTSP/1.0 200 OK
- CSeq: 7
- Date: Wed, Jul 30 2014 07:13:35 GMT
- </span>
可以發現RTSP協議的格式與http協議很類似,都是基於文字的協議,語法也基本相同。但是它們並不相同,有以下主要差別:
首先,方法名稱不同。RTSP新增了DESCRIBE、SETUP、PLAY等方法。
其次,HTTP協議是無狀態的協議,方法之間的傳送並無明顯的次序關係。而RTSP是有狀態的協議,各方法存在次序關係。
在者,HTTP協議可以以內帶載荷資料的方式傳送資料,如網頁資料。而RTSP僅僅提供流播放的控制,並不傳送流媒體資料。流媒體資料可以通過RTP/RTCP的方式傳送。
二、RTSP訊息
1. RTSP請求訊息格式
方法名稱 URL RTSP版本回車換行
訊息頭回車換行回車換行
訊息體回車換行
方法名稱包括OPTIONS、DESCRIBE、SETUP、PLAY、TEARDOWN等。
URL是接受方的地址,如:rtsp://192.168.0.1/video1.3gp。
RTSP版本一般是RTSP/1.0
訊息的每一行都會以回車換行結尾,為了便於定位識別,訊息頭的最後一行有兩個回車換行。
訊息體有時是可選的。
2. 迴應訊息格式
RTSP版本狀態碼對應文字解釋回車換行
訊息頭回車換行回車換行
訊息體回車換行
RTSP版本一般為RTSP/1.0。
狀態碼錶示對應訊息的執行結果。
部分狀態碼與文字解釋對應列表如下:
狀態碼文字解釋含義
“200” OK 執行成功
“400” Bad Request 錯誤請求
“404” Not Found 未找到
“500” Internal Server Error 伺服器內部錯誤
3. 各方法詳細介紹
(1)OPTIONS
客戶端使用OPTION來查詢伺服器提供的方法。伺服器會在public欄位給出自己提供方法集合。從上面的抓包中可以看到此伺服器提供了OPTIONS、DESCRIBE、 SETUP、TEARDOWN、 PLAY,、PAUSE,、GET_PARAMETER、SET_PARAMETER等方法。
OPTIONS方法並不是必須的。客戶端可以繞過OPTIONS,直接向伺服器傳送其他訊息。
CSeq欄位表示請求的序號。客戶端的每一個請求都會被賦值一個序號。每個請求訊息也會對應一個同樣序號的迴應訊息。
OPTIONS訊息可以在任何時間傳送。有的客戶端會定時向伺服器傳送OPTION訊息。而伺服器也可以通過是否定時收到OPTIONS訊息來判斷客戶端是否線上。但並不是所有客戶端和伺服器都這樣做。
User Agent
該域用於使用者標識.不同公司或是不同的客戶端。不同客戶端發出的訊息中的這個域的內容都不大相同。有時會指明客戶端的版本號、型號等等。
下面的對話中該欄位指明採用VLC作為客戶端,並給出版本號和使用LIVE555庫的版本。
- OPTIONS rtsp://10.34.3.80/D:/a.264 RTSP/1.0
- CSeq: 2 //請求序號
- User-Agent: LibVLC/2.0.7 (LIVE555 Streaming Media v2012.12.18)
- <span style="color:#ff0000;">RTSP/1.0 200 OK
- CSeq: 2 //回覆序號
- Date: Tue, Jul 22 2014 02:41:21 GMT
- Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER
- </span>
(2)DESCRIBE
DESCRIBE訊息是由客戶端傳送到伺服器端,用於客戶端得到請求連結中指定的媒體檔案的相關描述,一般是SDP資訊。SDP(Session Description Protocol)包含了會話的描述、媒體編碼型別、媒體的位元速率等資訊。對於流媒體服務而言,以下幾個域是在SDP中一定要包含的。
“a=control:”
“a=range:”
“a=rtpmap:”
“a=fmtp:”
當一個錄影中即包含音訊又包含視訊時,會有多個上述結構。每個媒體描述以m開始。下面綠色和黃色背景的字型分別表示對視訊和音訊媒體的描述。請求中的Accept欄位用於指定客戶端可以接受的媒體描述資訊型別,此處為SDP資訊。
- DESCRIBE rtsp://10.34.3.80/D:/a.264 RTSP/1.0
- CSeq: 3
- User-Agent: LibVLC/2.0.7 (LIVE555 Streaming Media v2012.12.18)
- Accept: application/sdp //請求獲得SDP資訊
- <span style="color:#ff0000;">RTSP/1.0 200 OK
- CSeq: 3
- Date: Tue, Jul 22 2014 02:41:21 GMT
- Content-Base: rtsp://10.34.3.80/D:/a.264/ //指明對某媒體的描述資訊
- Content-Type: application/sdp //請求型別
- Content-Length: 494 //SDP長度
- v=0 //Version SDP協議的版本
- o=- 1405995833260880 1 IN IP4 10.34.3.80 //Origion 會話的發起者資訊
- s=H.264 Video, streamed by the LIVE555 Media Server //會話名稱
- i=D:/a.264 //會話的描述資訊
- t=0 0 //會話的開始和結束時間
- a=tool:LIVE555 Streaming Media v2014.07.04 //Attribute
- a=type:broadcast
- a=control:* //控制資訊
- a=range:npt=0-
- a=x-qt-text-nam:H.264 Video, streamed by the LIVE555 Media Server
- a=x-qt-text-inf:D:/a.264
- m=video 0 RTP/AVP 96 //傳送方所支援的媒體型別(視訊)等資訊
- c=IN IP4 0.0.0.0 //會話連線資訊,支出真正的媒體流使用的IP地址。
- b=AS:500