RTSP(Real Time Streaming Protocol)實時流協議

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引入了很多新方法並且有不同的協議標識符。

  1. RTSP服務器在絕大多數默認情況下需要維持狀態,而HTTP是無狀態協議。

  2. RTSP客戶機和服務器都可以發出請求。

  3. 數據由信帶外的另一個協議傳送(但有一個特例)。

  4. RTSP使用ISO 10646(UTF-8) 而不是ISO 8859-1,以配合當前HTML的國際化。

  5. RTSP的URI請求時總是包含絕對URI。而由於歷史原因造成的後向兼容性問題,HTTP/1.1只在請求中包含絕對路徑,把主機名放入單獨的頭部域中。

  6. 當只有一個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效果是一樣的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章