RTSP(Real Time Streaming Protocol)實時流協議,是TCP/IP協議體系中的一個應用層協議。RTSP在體系結構上位於RTP和RTCP之上,它使用TCP或RTP完成數據傳輸。
RTSP沒有“連接”這個概念,而由RTSP會話(session)代替(服務器端保持一個由識別符標記的會話)。RTSP會話沒有綁定傳輸層連接(如TCP連接)。在RTSP會話期間,RTSP客戶端可以打開或關閉多個到服務器端的可靠傳輸連接以發出RTSP請求。但也可以使用無連接傳輸協議,比如UDP,來發送RTSP請求。
rtsp前綴要求使用可靠協議(在Internet上指TCP協議)發出命令,而rtspu前綴則說明使用不可靠協議(在Internet指UDP協議)。
RTSP建立並控制一個或幾個時間同步的連續流媒體,比如音頻或視頻。儘管在連續媒體流中有可能插入控制流但RTSP本身通常並不發送連續媒體流。換言之,RTSP充當多媒體服務器的“網絡遙控器”。RTSP所控制的流可能用到RTP,但RTSP的操作並不依賴用來傳送連續媒體的傳輸機制。實時流協議在語法和操作上有意地類似於HTTP/1.1,但有重要的不同。
RTSP引入了很多新方法並且有不同的協議標識符。
-
RTSP服務器在絕大多數默認情況下需要維持狀態,而HTTP是無狀態協議。
-
RTSP客戶機和服務器都可以發出請求。
-
數據由信帶外的另一個協議傳送(但有一個特例)。
-
RTSP使用ISO 10646(UTF-8) 而不是ISO 8859-1,以配合當前HTML的國際化。
-
RTSP的URI請求時總是包含絕對URI。而由於歷史原因造成的後向兼容性問題,HTTP/1.1只在請求中包含絕對路徑,把主機名放入單獨的頭部域中。
-
當只有一個IP的主機要提供多個文檔樹時,可使“虛擬主機”的實現更簡單。
方法描述
OPTIONS:
OPTIONS請求在任何時候都可能產生,例如:當一個客戶端準備嘗試一個非標準的請求時。它不影響服務器的狀態。
DESCRIBE:
服務器取得請求URL所標識的表示或者媒體對象的描述。它可能使用同意頭部(Accept header)來指出客戶端能理解的描述格式。服務器以所請求的資源的描述作爲迴應。DESCRIBE 回覆-響應對繼續了RTSP的媒體初始化階段。DESCRIBE響應必須包含它所描述的資源的所有媒體初始化信息。
ANNOUNCE:
該方法方法有兩個目的:
當從客戶端發往服務器端,ANNOUNCE向服務器端上傳請求URL所標識的表示或媒體對象的描述。當從服務器端發往客戶端,ANNOUNCE實時更新會話描述。
當一個新的媒體流加入一個表示(例如:在一個現場表示活動期間)時,整個表示而不僅是所增加的部分,應該被重發,以便部分刪除。
SETUP:
讓服務器給流分配資源,啓動RTSP會話。
PLAY與RECORD:
啓動SETUP所分配的流的數據傳輸。
PAUSE:
臨時暫停流,而不釋放服務器資源。
GET_PARAMETER:
請求用於獲取URI所標識的一個表示或者流的參數的值。回覆和響應的內容被留給具體實現。沒有實體的GET_PARAMETER可能被用於測試客戶端或者服務器端是否現場直播("ping")。
TEARDOWN:
釋放流佔用的資源,RTSP會話停止,從服務器端退出。
在VLC播放器中的抓包(正常播放)-vlcServer
(粉紅色部分是客戶端發出的請求,黑色部分是服務器的響應,//後面是註釋)
OPTIONS rtsp://219.219.218.224:554/m RTSP/1.0
CSeq: 1
User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)
RTSP/1.0 200 OK
Server: vlc 1.0.1
Content-Length: 0
Cseq: 1
Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER
DESCRIBE rtsp://219.219.218.224:554/m RTSP/1.0
CSeq: 2
Accept: application/sdp
User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)
RTSP/1.0 200 OK
Content-type: application/sdp
Server: VLC Server
Content-Length: 544
CSeq: 2
Cache-Control: no-cache
v=0 //協議版本
o=- 78967746000 3 IN IP4 219.219.218.224 //擁有者,即會話的創建者
c=IN IP4 0.0.0.0 //連接信息,此處表示本機
t=0 0 //如果stop-time設置爲0,則會話沒有時間限制。如果start-time也設置爲0,則會話被認爲是永久的.
a=tool:vlc 1.0.1 //創建任務描述的工具的名稱及版本號
a=range:npt=0-7.741 //視頻的正常播放範圍
m=audio 0 RTP/AVP 96 //音頻流使用的協議 m=<media> <port>/<number of ports> <proto> <fmt> …
a=rtpmap:96 mpeg4-generic/32000 //a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encoding parameters>]
a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1290; SizeLength=13;IndexLength=3; IndexDeltaLength=3; Profile=1; //a=fmtp:<format> <format specific parameters>
a=control:rtsp://219.219.218.224:554/m/trackID=0
m=video 0 RTP/AVP 97 //視頻流使用的協議
a=rtpmap:97 MP4V-ES/90000
a=fmtp:97 profile-level-id=3; config=000001b022000001b50900000100000001200084456a285020f0a300;
a=control:rtsp://219.219.218.224:554/m/trackID=1
SETUP rtsp://219.219.218.224:554/m/trackID=0 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=3106-3107
User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)
RTSP/1.0 200 OK
Transport: RTP/AVP/UDP;client_port=3106-3107
Server: VLC Server
Content-Length: 0
Cseq: 3
Cache-Control: no-cache
Session: 11478
SETUP rtsp://219.219.218.224:554/m/trackID=1 RTSP/1.0
CSeq: 4
Transport: RTP/AVP;unicast;client_port=3108-3109
Session: 11478
User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)
RTSP/1.0 200 OK
Transport: RTP/AVP/UDP;client_port=3108-3109
Server: VLC Server
Content-Length: 0
Cseq: 4
Cache-Control: no-cache
Session: 11478
PLAY rtsp://219.219.218.224:554/m RTSP/1.0
CSeq: 5
Session: 11478
Range: npt=0.000-
User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)
RTSP/1.0 200 OK
Server: VLC Server
Content-Length: 0
CSeq: 5
Cache-Control: no-cache
Session: 11478;timeout=5
GET_PARAMETER rtsp://219.219.218.224:554/m RTSP/1.0
CSeq: 6
Session: 11478
User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)
RTSP/1.0 200 OK
Server: VLC Server
Content-Length: 0
CSeq: 6
Cache-Control: no-cache
TEARDOWN rtsp://219.219.218.224:554/m RTSP/1.0
CSeq: 7
Session: 11478
User-Agent: VLC media player (LIVE555 Streaming Media v2009.07.09)
RTSP/1.0 200 OK
Server: VLC Server
Content-Length: 0
CSeq: 7
Cache-Control: no-cache
Session: 11478;timeout=5
以上是利用RTSP協議進行流媒體播放的一個完整過程,其中setup,play是必須用到的方法,其它方法是可選。上述紅色的標註部分是對sdp協議的一些主要參數進行的解釋。
在RealPlayer中(無法播放)-VlcServer
OPTIONS rtsp://219.219.218.224:554 RTSP/1.0
CSeq: 1
User-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32)
Supported: ABD-1.0
ClientChallenge: ffa50e558e3986073c2da8888484e48c
ClientID: WinNT_5.1_12.0.0.301_RealPlayer_R51CND_zh-CN_686
CompanyID: 7S3jofzYT7kR2j8sdJG0vA==
GUID: 00000000-0000-0000-0000-000000000000
PlayerStarttime: [28/09/2009:19:04:13 08:00]
Pragma: initiate-session
RegionData: 0
RTSP/1.0 200 OK
Server: vlc 1.0.1
Content-Length: 0
Cseq: 1
Public: DESCRIBE,SETUP,TEARDOWN,PLAY,PAUSE,GET_PARAMETER
DESCRIBE rtsp://219.219.218.224:554/jiao RTSP/1.0
CSeq: 2
Accept: application/sdp
User-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32)
Bandwidth: 3531079
ClientID: WinNT_5.1_12.0.0.301_RealPlayer_R51CND_zh-CN_686
GUID: 00000000-0000-0000-0000-000000000000
Language: zh-CN, zh, *
RegionData: 0
Require: com.real.retain-entity-for-setup
SupportsMaximumASMBandwidth: 1
RTSP/1.0 200 OK
Content-type: application/sdp
Server: VLC Server
Content-Length: 381
CSeq: 2
Cache-Control: no-cache
v=0
o=- 435378000 3 IN IP4 219.219.218.224
c=IN IP4 0.0.0.0
t=0 0
a=tool:vlc 1.0.1
a=range:npt=0-203.000
m=audio 0 RTP/AVP 14
a=rtpmap:14 MPA/90000
a=control:rtsp://219.219.218.224:554/jiao/trackID=0
m=video 0 RTP/AVP 96
a=rtpmap:96 MP4V-ES/90000
a=fmtp:96 profile-level-id=3; config=0000012008868400670c4e10c0518f;
a=control:rtsp://219.219.218.224:554/jiao/trackID=1
SETUP rtsp://219.219.218.224:554/jiao/trackID=0 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=6970-6971;mode=play,RTP/AVP/TCP;unicast;mode=play
User-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32)
RTSP/1.0 200 OK
Transport: RTP/AVP/UDP;client_port=6970-6971 //此處沒有返回服務器端口
vlcClient——Helix Server
RTSP響應:Transport: RTP/AVP;unicast;client_port=3190-3191;server_port=18044-18045 返回了服務器端口
rtp協議實現傳輸,服務器向客戶端推送報文,客戶端利用rtcp協議通過提供的端口接收報文。
realPlayer——Helix Server
RTSP響應:Transport: x-real-rdt/udp;client_port=6970;server_port=15728 返回了服務器端口。
利用real專有的rdt協議實現傳輸,客戶端主動發起請求,服務器響應後通過返回的端口進行傳輸數據。
vlc——vlcServer
RTSP響應:Transport: RTP/AVP/UDP;client_port=2926-2927 vlcServer不返回服務器端口
rtp協議傳輸,服務器向客戶端推送報文,客戶端利用rtcp協議通過tcpmux端口(傳輸控制協議端口服務多路開關選擇器,不關心發送請求時提供的什麼樣的服務)接收報文。
由以上可知,當realPlayer—–vlcServer時,服務器向客戶端推送報文,但是realPlayer無法利用rtcp協議通過tcpmux端口來接收報文(需要一個確切的端口號),導致了無法播放。但是目前並沒有找到合適的解決方案。
Server: VLC Server
Content-Length: 0
Cseq: 3
Cache-Control: no-cache
Session: 19169
TEARDOWN rtsp://219.219.218.224:554 RTSP/1.0
CSeq: 4
User-Agent: RealMedia Player HelixDNAClient/10.0.1.754 (win32)
Session: 19169
RTSP/1.0 404 Not found
Content-Length: 311
Content-Type: text/html
經過抓包發現,在KMPlayer,暴風影音中的流媒體播放是借用了Real的庫函數,所以與RealPlayer效果是一樣的。