協定支持
該協定用於C/S模型,是一個基於文本的協定,用於在客戶端和伺服器端建立和協商實時流會話。
實時流協定(RTSP)是套用級協定,控制實時數據的傳送。RTSP提供了一個可擴展框架,使實時數據,如音頻與視頻的受控點播成為可能。數據源包括現場數據與存儲在剪輯中數據。該協定目的在於控制多個數據傳送連線,為選擇傳送通道,如UDP、組播UDP與TCP,提供途徑,並為選擇基於RTP上傳送機制提供方法。
實時流協定(RTSP)建立並控制一個或幾個時間同步的連續流媒體。儘管連續媒體流與控制流交換是可能的,通常它本身並不傳送連續流。換言之,RTSP充當多媒體伺服器的網路遠程控制。RTSP連線沒有綁定到傳輸層連線,如TCP。在RTSP連線期間,RTSP用戶可打開或關閉多個對伺服器的可傳輸連線以發出RTSP請求。此外,可使用無連線傳輸協定,如UDP。RTSP流控制的流可能用到RTP,但RTSP操作並不依賴用於攜帶連續媒體的傳輸機制。
協定支持的操作如下:
(1)從媒體伺服器上檢索媒體:用戶可通過HTTP或其它方法提交一個演示描述。如演示是組播,演示式就包含用於連續媒體的組播地址和連線埠。如演示僅通過單播傳送給用戶,用戶為了安全應提供目的地址。
(2)媒體伺服器邀請進入會議:媒體伺服器可被邀請參加正進行的會議,或回放媒體,或記錄其中一部分,或全部。這種模式在分散式教育套用上很有用,會議中幾方可輪流按遠程控制按鈕。
(3)將媒體加到現成講座中:如伺服器告訴用戶可獲得附加媒體內容,對現場講座顯得尤其有用。如HTTP/1.1中類似,RTSP請求可由代理、通道與快取處理。
協定特點
(1) 可擴展性:新方法和參數很容易加入RTSP。
(2) 易解析:RTSP可由標準HTTP或MIME解析器解析。
(3) 安全:RTSP 使用網頁安全機制。
(4) 獨立於傳輸:RTSP可使用不可靠數據報協定(EDP)、可靠數據報協定(RDP);如要實現套用級可靠,可使用可靠流協定。
(5) 多伺服器支持:每個流可放在不同伺服器上,用戶端自動與不同伺服器建立幾個並發控制連線,媒體同步在傳輸層執行。
(6) 記錄設備控制:協定可控制記錄和回放設備。
(7) 流控與會議開始分離:僅要求會議初始化協定提供,或可用來創建惟一會議標識號。特殊情況下,可用SIP或H.323來邀請伺服器入會。
(8) 適合專業套用:通過SMPTE時標,RTSP支持幀級精度,允許遠程數字編輯。
(9) 演示描述中立:協定沒強加特殊演示或元檔案,可傳送所用格式類型;然而,演示描述至少必須包括一個RTSP URL。
(10) 代理與防火牆友好:協定可由套用和傳輸層防火牆處理。防火牆需要理解SETUP方法,為UDP媒體流打開一個“缺口”。
(11) HTTP友好:此處,RTSP明智地採用HTTP觀念,使現在結構都可重用。結構包括Internet內容選擇平台(PICS)。由於在大多數情況下控制連續媒體需要伺服器狀態,RTSP不僅僅向HTFP添加方法。
(12) 適當的伺服器控制:如用戶啟動一個流,必須也可以停止一個流。
(13) 傳輸協調:實際處理連續媒體流前,用戶可協調傳輸方法。
(14) 性能協調:如基本特徵無效,必須有一些清理機制讓用戶決定哪種方法沒生效。這允許用戶提出適合的用戶界面。
協定結構
RTSP是一種文本協定,採用UTF-8編碼中的ISO 10646字元集。一行可通過CRLF終止,但接收端需要做好解釋CR和LF作為一行終止符的準備。關於頭欄位概述如下:
Header Type Support Methods
Accept R opt. entity
Accept-Encoding R opt. entity
Accept-Language R opt. all
Allow R opt. all
Authorization R opt. all
Bandwidth R opt. all
Blocksize R opt. All but OPTIONS,TEARDOWN
Cache-Control G opt. SETUP
Conference R opt. SETUP
Connection G req. all
Content-Base E opt. entity
Content-Encoding E req. SET_PARAMETER
Content-Encoding E req. DESCRIBE,ANNOUNCE
Content-Language E req. DESCRIBE,ANNOUNCE
Content-Length E req. SET_PARAMETER,ANNOUNCE
Content-Length E req. entity
Content-Location E opt. entity
Content-Type E req. SET_PARAMETER,ANNOUNCE
Content-Type R req. entity
CSeq G req. all
Date G opt. all
Expires E opt. DESCRIBE,ANNOUNCE
From R opt. all
If-Modified-Since R opt. DESCRIBE,SETUP
Last-Modified E opt. entity
Proxy-Authenticate
Proxy-Require R req. all
Public R opt. all
Range R opt. PLAY,PAUSE,RECORD
Range R opt. PLAY,PAUSE,RECORD
Referer R opt. all
Require R req. all
Retry-After R opt. all
RTP-Info R req. PLAY
Scale Rr opt. PLAY,RECORD
Session Rr req. All but SETUP,OPTIONS
Server R opt. all
Speed Rr opt. PLAY
Transport Rr req. SETUP
Unsupported R req. all
User-Agent R opt. all
Via G opt. all
WWW-Authenticate R opt. all
類型"g"表示請求和回響中的通用請求頭;類型“R”表示請求頭;類型“r”表示回響頭;類型"e"表示實體頭欄位。在“support”一欄中標有“req.”的欄位必須由接收者以特殊的方法實現;而“opt.”的欄位是可選的。注意,不是所有“req.”欄位在該類型的每個請求中都會被傳送。“req.”只表示客戶機(支持回響頭)和伺服器(支持請求頭)必須執行該欄位。最後一欄列出了關於頭欄位產生作用的方法;其中“entity”針對於返回一個信息主體的所有方法。
協定參數
1.RTSP版本
H.321採用,用RTSP代替HTTP。
2.RTSPURL
“rksp"和“rtspu"方案用於指RTSP協定使用的網路資源,為RTSP URL定義方案特定的語法和語義。
3.會議標識
會議標識對RTSP來說是模糊的,採用標準URI編碼方法編碼,可包含任何八位組數值。會議標識必須全局惟一。
4.連線標識
連線標識是長度不確定的字元串,必須隨機選擇,至少要8個八位組長,使其很難被猜出。
5.SMPTE相關時標
SMPTE相關時標表示相對剪輯開始的時間,相關時標表示成SMPTE時間代碼,精確到幀級。時間代碼格式為小時:分鐘:秒:幀。預設smpte格式是"SMPTE 30",幀速率為每秒29.97幀。其他SMPTE代碼可選擇使用smpte時間獲得支持(如"SMPIE 25")。時間數值中幀段值可從0到29。每秒30與29.97幀的差別可將每分鐘的頭兩幀丟掉來實現。如幀值為零,就可刪除。
6.正常播放時間
正常播放時間(NPT)表示相對演示開始的流絕對位置。時標由十進制分數組成。左邊部分用秒或小時、分鐘、秒表示;小數點右邊部分表示秒的部分。演示的開始對應0.0秒,負數沒有定義。特殊常數定義成現場事件的當前時刻,這也許只用於現場事件。直觀上,NPT是聯繫觀看者與程式的時鐘,通常以數字式顯示在VCR上。
7.絕對時間
絕對時間表示成ISO 8601時標,採用UTC(GMT)。
8.可選標籤
可選標籤是用於指定RTSP新可選項的惟一標記。這些標記用在請求和代理-請求頭段。當登記新RTSP選項時,需提供下列信息:
(1)名稱和描述選項。名稱長度不限,但不應該多於20個字元。名稱不能包括空格、控制字元。
(2)表明誰改變選項的控制。如IETF,ISO,ITU-T,或其他國際標準團體、聯盟或公司。
(3)深入描述的參考,如RFC、論文、專利、技術報告、文檔源碼和計算機手冊。
(4)對專用選項,附上聯繫方式。
信息
RTSP是基於文本的協定,採用ISO 10646字元集,使用UTF-8編碼方案。行以CRLF中斷,但接收者本身可將CR和LF解釋成行終止符。基於文本的協定使以自描述方式增加可選參數更容易。由於參數的數量和命令的頻率出現較低,處理效率沒引起注意。文本協定很容易以腳本語言(如:Tcl,Visual Basic與Perl)實現研究原型。
ISO 10646字元集避免敏感字元集切換,但對套用來說不可見。RTCP也採用這種編碼方案。帶有重要意義位的ISO 8859-1字元表示如100001x 10x x x x x x。RTSP信息可通過任何低層傳輸協定攜帶。
請求包括方法、方法作用於其上的對象以及進一步描述方法的參數。方法也可設計為在伺服器端只需要少量或不需要狀態維護。當信息體包含在信息中,信息體長度由如下因素決定:
(1)不管實體頭段是否出現在信息中,不包括信息體的回響,信息總以頭段後第一個空行結束。
(2)如出現內容長度頭段,其值以位元組計,表示信息體長度。如未出現頭段,其值為零。
(3)伺服器關閉連線。
注意,RTSP目前並不支持HTTP 1.1“塊”傳輸編碼,需要有內容長度頭。假如返回適度演示描述長度,即使動態產生,使塊傳輸編碼沒有必要,伺服器也應該能決定其長度。如有實體,即使必須有內容長度,且長度沒顯式給出,規則可確保行為合理。
從用戶到伺服器端的請求信息在第一行內包括源採用的方法、源標識和所用協定版本。RTSP定義了附加狀態代碼,但沒有定義任何HTTP代碼。
實體
如不受請求方法或回響狀態編碼限制,請求和回響信息可傳輸實體,實體則由實體頭檔案和實體體組成,有些回響僅包括實體頭。在此,根據誰傳送實體、誰接收實體,傳送者和接收者可分別指用戶和伺服器。
實體頭定義實體體可選元信息,如沒有實體體,指請求標識的資源。擴展頭機制允許定義附加實體頭段,而不用改變協定,但這些段不能假定接收者能識別。不可識別頭段應被接收者忽略,而讓代理轉發。
連線
RTSP請求可以幾種不同方式傳送:
· 持久傳輸連線,用於多個請求/回響傳輸。
· 每個請求/回響傳輸一個連線。
· 無連線模式。
傳輸連線類型由RTSP URL來定義。對“rtsp'’方案,需要持續連線;而"rtspu"方案,調用RTSP請求傳送,而不用建立連線。
不像HTTP,RTSP允許媒體伺服器給媒體用戶傳送請求。然而,這僅在持久連線時才支持,否則媒體伺服器沒有可靠途逕到達用戶,這也是請求通過防火牆從媒體伺服器傳到用戶的惟一途徑。
方法定義
方法記號表示資源上執行的方法,它區分大小寫。新方法可在將來定義,但不能以$開頭。已定義方法如下表所示。
RTSP方法
方法 | 方向 | 對象 | 要求 | 含義 |
DESCRIBE | C->S | P,S | 推薦 | 檢查演示或媒體對象的描述,也允許使用接收頭指定用戶理解的描述格式。DESCRIBE的答覆-回響組成媒體RTSP初始階段 |
ANNOUNCE | C->S S->C | P,S | 可選 | 當從用戶發往伺服器時,ANNOUNCE將請求URL識別的演示或媒體對象描述傳送給伺服器;反之,ANNOUNCE實時更新連線描述。如新媒體流加入演示,整個演示描述再次傳送,而不僅僅是附加組件,使組件能被刪除 |
GET_PARAMETER | C->S S->C | P,S | 可選 | GET_PARAMETER請求檢查URL指定的演示與媒體的參數值。沒有實體體時,GET_PARAMETER也許能用來測試用戶與伺服器的連通情況 |
OPTIONS | C->S S->C | P,S | 要求 | 可在任意時刻發出OPTIONS請求,如用戶打算嘗試非標準請求,並不影響伺服器狀態 |
PAUSE | C->S | P,S | 推薦 | PAUSE請求引起流傳送臨時中斷。如請求URL命名一個流,僅回放和記錄被停止;如請求URL命名一個演示或流組,演示或組中所有當前活動的流傳送都停止。恢復回放或記錄後,必須維持同步。在SETUP訊息中連線頭逾時參數所指定時段期間被暫停後,儘管伺服器可能關閉連線並釋放資源,但伺服器資源會被預訂 |
PLAY | C->S | P,S | 要求 | PLAY告訴伺服器以SETUP指定的機制開始傳送數據;直到一些SETUP請求被成功回響,客戶端才可發布PLAY請求。PLAY請求將正常播放時間設定在所指定範圍的起始處,傳送流數據直到範圍的結束處。PLAY請求可排成佇列,伺服器將PLAY請求排成佇列,順序執行 |
RECORD | C->S | P,S | 可選 | 該方法根據演示描述初始化媒體數據記錄範圍,時標反映開始和結束時間;如沒有給出時間範圍,使用演示描述提供的開始和結束時間。如連線已經啟動,立即開始記錄,伺服器數據請求URL或其他URL決定是否存儲記錄的數據;如伺服器沒有使用URL請求,回響應為201(創建),並包含描述請求狀態和參考新資源的實體與位置頭。支持現場演示記錄的媒體伺服器必須支持時鐘範圍格式,smpte格式沒有意義 |
REDIRECT | S->C | P,S | 可選 | 重定向請求通知客戶端連線到另一伺服器地址。它包含強制頭地址,指示客戶端發布URL請求;也可能包括參數範圍,以指明重定向何時生效。若客戶端要繼續傳送或接收URL媒體,客戶端必須對當前連線傳送TEARDOWN請求,而對指定主執新連線傳送SETUP請求 |
SETUP | C->S | S | 要求 | 對URL的SETUP請求指定用於流媒體的傳輸機制。客戶端對正播放的流發布一個SETUP請求,以改變伺服器允許的傳輸參數。如不允許這樣做,回響錯誤為"455 Method Not Valid In This State”。為了透過防火牆,客戶端必須指明傳輸參數,即使對這些參數沒有影響 |
SET_PARAMETER | C->S S->C | P,S | 可選 | 這個方法請求設定演示或URL指定流的參數值。請求僅應包含單個參數,允許客戶端決定某個特殊請求為何失敗。如請求包含多個參數,所有參數可成功設定,伺服器必須只對該請求起作用。伺服器必須允許參數可重複設定成同一值,但不讓改變參數值。注意:媒體流傳輸參數必須用SETUP命令設定。將設定傳輸參數限制為SETUP有利於防火牆。將參數劃分成規則排列形式,結果有更多有意義的錯誤指示 |
TEARDOWN | C->S | P,S | 要求 | TEARDOWN請求停止給定URL流傳送,釋放相關資源。如URL是此演示URL,任何RTSP連線標識不再有效。除非全部傳輸參數是連線描述定義的,SETUP請求必須在連線可再次播放前發布 |
註:P----演示,S----流,C----用戶端,S----伺服器端
某些防火牆設計與其他環境可能要求伺服器插入RTSP方法和流數據。由於插入將使客戶端和伺服器操作複雜,並增加附加開銷,除非有必要,應避免這樣做。插入二進制數據僅在RTSP通過TCP傳輸時才可使用。流數據(如RTP包)用一個ASCII字元$封裝,後跟一個一位元組通道標識,其後是封裝二進制數據的長度,兩位元組整數。流數據緊跟其後,沒有CRLF,但包括高層協定頭。每個$塊包含一個高層協定數據單元。
當傳輸選擇為RTP,RTCP信息也被伺服器通過TCP連線插入。預設情況下,RTCP包在比RTP通道高的第一個可用通道上傳送。客戶端可能在另一通道顯式請求RTCP包,這可通過指定傳輸頭插入參數中的兩個通道來做到。當兩個或更多流交叉時,為取得同步,需要RTCP。而且,這為當網路設定需要通過TCP控制連線透過RTP/RTCP提供了一條方便的途徑,可能時,在UDP上進行傳輸。
操作
支持持久連線或無連線的客戶端可能給其請求排隊。伺服器必須以收到請求的同樣順序發出回響。如果請求不是傳送給多播組,接收者就確認請求,如沒有確認信息,傳送者可在超過一個來回時間(RTT)後重發同一信息。
在TCP中RTT估計的初始值為500ms。套用快取最後所測量的RTT,作為將來連線的初始值。如使用一個可靠傳輸協定傳輸RTSP,請求不允許重發,RTSP套用反過來依賴低層傳輸提供可靠性。如兩個低層可靠傳輸(如TCP和RTSP)套用重發請求,有可能每個包損失導致兩次重傳。由於傳輸棧在第一次嘗試到達接收者前不會傳送套用層重傳,接收者也不能充分利用套用層重傳。如包損失由阻塞引起,不同層的重發將使阻塞進一步惡化。時標頭用來避免重發模糊性問題,避免對圓錐算法的依賴。每個請求在CSeq頭中攜帶一個系列號,每傳送一個不同請求,它就加一。如由於沒有確認而重發請求,請求必須攜帶初始系列號。
實現RTSP的系統必須支持通過TCP傳輸RTSP,並支持UDP。對UDP和TCP,RTSP伺服器的預設連線埠都是554。許多目的一致的RTSP包被打包成單個低層PDU或TCP流。RTSP數據可與RTP和RTCP包交叉。不像HTTP,RTSP信息必須包含一個內容長度頭,無論信息何時包含負載。否則,RTSP包以空行結束,後跟最後一個信息頭。
擴展
由於不是所有媒體伺服器有著相同的功能,媒體伺服器有必要支持不同請求集。RTSP可以如下三種方式擴展:
(1) 以新參數擴展。如用戶需要拒絕通知,而方法擴展不支持,相應標記就加入要求的段中。
(2) 加入新方法。如信息接收者不理解請求,返回501錯誤代碼,傳送者不應再次嘗試這種方法。用戶可使用OPTIONS方法查詢伺服器支持的方法。伺服器使用公共回響頭列出支持的方法。
(3) 定義新版本協定,允許改變所有部分(協定版本號位置除外)。
操作模式
每個演示和媒體流可用RTSP URL識別。演示組成的整個演示與媒體屬性由演示描述檔案定義。使用HTTP或其他途徑用戶可獲得這個檔案,它沒有必要保存在媒體伺服器上。為了說明這個問題,假設演示描述了多個演示,其中每個演示維持了一個公共時間軸。為簡化說明,且不失一般性,假定演示描述的確包含這樣一個演示。演示可包含多個媒體流。除媒體參數外,網路目標地址和連線埠也需要決定。
下面區分幾種操作模式。
(1)單播:用戶選擇的連線埠號將媒體傳送到RTSP請求源。
(2)伺服器選擇地址多播:媒體伺服器選擇多播地址和連線埠,這是現場直播或準點播常用的方式。
(3)用戶選擇地址多播:如伺服器加入正在進行的多播會議,多播地址、連線埠和密鑰由會議描述給出。
狀態
RTSP控制通過單獨協定傳送的數據流,與控制通道無關。例如,RTSP控制可通過TCP連線,而數據流通過UDP。因此,即使媒體伺服器沒有收到請求,數據也會繼續傳送。在連線生命期,單個媒體流可通過不同TCP連線順序發出請求來控制。所以,伺服器需要維持能聯繫流與RTSP請求的連線狀態。RTSP中很多方法與狀態無關,但下列方法在定義伺服器流資源的分配與套用上起著重要的作用:
(1) SETUP:讓伺服器給流分配資源,啟動RTSP連線。
(2) PLAY與RECORD:啟動SETUP分配流的數據傳輸。
(3) PAUSE:臨時停止流,而不釋放伺服器資源。
(4) TEARDOWN:釋放流的資源,RTSP連線停止。
標識狀態的RTSP方法使用連線頭段識別RTSP連線,為回響SETUP請求,伺服器連線產生連線標識。
其他協定
實時流協定在語法和操作上與HTTP/1.1類似,因此HTTP的擴展機制大都可加入RTSP。然而,在很多重要方面RTSP仍不同於HTTP:
RTSP引入了大量新方法並具有一個不同的協定標識符;
在大多數情況下,RTSP伺服器需要保持預設狀態,與HTTP的無狀態相對;
RTSP中客戶端和伺服器都可以發出請求;
在多數情況下,數據由不同的協定傳輸;
RTSP使用ISO 10646(UTF-8)而並非ISO 8859-1,與當前的國際標準HTML相一致;
URI請求總是包含絕對URI。為了與過去的錯誤相互兼容,HTTP/1.1隻在請求過程中傳送絕對路徑並將主機名置於另外的頭欄位。
RTSP在功能上與HTTP有重疊,與HTTP相互作用體現在與流內容的初始接觸是通過網頁的。目前的協定規範目的在於允許在網頁伺服器與實現RTSP媒體伺服器之間存在不同傳遞點。例如,演示描述可通過HTTP和RTSP檢索,這降低了瀏覽器的往返傳遞,也允許獨立RTSP伺服器與用戶不全依靠HTTP。
但是,RTSP與HTTP的本質差別在於數據傳送以不同協定進行。HTTP是不對稱協定,用戶發出請求,伺服器作出回響。RTSP中,媒體用戶和伺服器都可發出請求,且其請求都是無狀態的;在請求確認後很長時間內,仍可設定參數,控制媒體流。重用HTTP功能至少在兩個方面有好處,即安全和代理。要求非常接近時,在快取、代理和授權上採用HTTP功能是有價值的。
當大多數實時媒體使用RTP作為傳輸協定時,RTSP沒有綁定到RTP。RTSP假設存在演示描述格式可表示包含幾個媒體流的演示的靜態與臨時屬性。
微軟與RTSP
簡述
RTSP並非只是微軟在用! 這是一個公開的規範,在這個規範上開發了很多的流伺服器。甚至Linux服務提供者和蘋果的程式設計師也使用rtsp協定以及Real Networks流媒體。似乎整個世界的網路流傳輸都用這個協定。然而,微軟並不只在rtsp上有所作為。
微軟和RTSP
在寫這個文檔的時候,微軟正處於從首選MMS協定轉換到首選採用RTSP協定的過程中。這個說明在Media Player 9.0版本和流媒體伺服器2003版本之後,我們會看到微軟將rtsp協定作為流媒體傳輸的主要協定。
隨著時間慢慢的流逝,我們會發現mms協定正逐步走出人們的視野。It is only assumed that this is so MS can say they are being open with their protocols (rtsp is an open standard) while at the same time disregarding the need to publicise their own MMS protocol once its gone from media player. 然而,mms還沒有真的死亡,至少在接下來的幾年中我們依然可以看到它在流媒體傳輸中的身影。
是否微軟的RTSP協定和標準的開放式RTSP不同?
是的。跟在RFC2326(1998年四月)中定義的原始RTSP協定相比,微軟的rtsp協定有一些輕微的改動。我們網站上有本文檔(還有後續版本)和一個簡單的研究,它們可以幫助你了解這些信息。
區別
微軟的rtsp規範與標準rtsp協定相比最主要的改動是傳送包payloads到客戶端的方式,另外還有一些請求命令有一些改動。傳輸單個媒體包的機制並沒有文檔(就我目前所知),這可能是微軟要保留的信息。 就像MMS和HTTP 1.0流協定使用一個媒體數據包頭一樣,RTSP也有。但是微軟的數據包頭格式沒有在任何的rtsp文檔中註明。在企圖連線微軟的rtsp伺服器時,這是主要的問題。
微軟RTSP協定的命令採用的語法和標準rtsp協定的命令語法一樣,只有一些小的修改和添加,可以通過閱讀網上的一些文檔,就可以知道怎么去組成這些命令。微軟rtsp命令部分已經有文檔了。