RTSP協(xié)議 RTSP(Real Time StreamProtocol,實時流協(xié)議)是應用級協(xié)議,控制實時數(shù)據(jù)的發(fā)送。RTSP提供了一個可擴展框架,使實時數(shù)據(jù),如音頻與視頻的受控、點播成為可能。數(shù)據(jù)源包括現(xiàn)插數(shù)據(jù)與存儲在剪輯中的數(shù)據(jù)。該協(xié)議目的在于控制多個數(shù)據(jù)發(fā)送連接,為選擇發(fā)送通道如UDP、多播UDP與TCP等提供途徑,并為選擇基于RTP上發(fā)送機制提供方法。
一.簡介
1.目的
實時流協(xié)議建立并控制一個或幾個時間同步的連續(xù)流媒體。盡管連續(xù)媒體流與控制流交叉是可能的,通常它本身并不發(fā)送連續(xù)流。換言之,RTSP充當多媒體服務器的網(wǎng)絡遠程控制。RTSP連接沒有綁定到傳輸層連接,如TCP。在RTSP連接期間,RTSP用戶可打開或關(guān)閉多個對服務器的可靠傳輸連接以發(fā)出RTSP請求。此外,可使用無連接傳輸協(xié)議,如UDP。RTSP流控制的流可能用到RTP,但RTSP操作并不依賴用于攜帶連續(xù)媒體的傳輸機制。實時流協(xié)議在語法和操作上與HTTP 1.1類似,因此HTTP的擴展機制大都可加入RTSP。協(xié)議支持的操作如下:
(1)從媒體服務器上檢索媒體
用戶可通過HTTP或其他方法提交一個演示描述。如演示是多播,演示時就包含用于連續(xù)媒體的多播地址和端口。如演示僅通過單播發(fā)送給用戶,用戶為了安全應提供目的地址。
(2)媒體服務器邀請進入會議
媒體服務器可被邀請參加正進行的會議,或回放媒體,或記錄其中一部分或全部。這種模式在分布式教育應用上很有用,會議中幾方可輪流按遠程控制按鈕。
(3)將媒體加到現(xiàn)成講座中
例如,服務器告訴用戶可獲得附加媒體內(nèi)容。這對現(xiàn)場講座顯得尤其有用。如HTTP 1.1中類似,RTSP請求可由代理、通道與緩存處理。
2.協(xié)議特點
RTSP有如下特性。
(1) 可擴展性:新方法和參數(shù)很容易加入RTSP。
(2) 易解析:RTSP可由標準HTTP或MIME解析器解析。
(3) 安全:RTSP使用網(wǎng)頁安全機制。
(4) 獨立于傳輸:RTSP可使用不可靠數(shù)據(jù)報協(xié)議(EDP)、可靠數(shù)據(jù)報協(xié)議(RDP);如要實現(xiàn)應用級可靠,可使用可靠流協(xié)議。
(5) 多服務器支持:每個流可放在不同服務器上,用戶端自動與不同服務器建立幾個并發(fā)控制連接,媒體同步在傳輸層執(zhí)行。
(6) 記錄設備控制:協(xié)議可控制記錄和回放設備。
(7) 流控與會議開始分離:僅要求會議初始化協(xié)議提供,或可用來創(chuàng)建惟一會議標識號。特殊情況下,可用SIP或H.323來邀請服務器入會。
(8) 適合專業(yè)應用:通過SMPTE時標,RTSP支持幀級精度,允許遠程數(shù)字編輯。
(9) 演示描述中立:協(xié)議沒強加特殊演示或元文件,可傳送所用格式類型;然而,演示描述至少必須包括一個RTSP URL。
(10) 代理與防火墻友好:協(xié)議可由應用和傳輸層防火墻處理。防火墻需要理解SETUP方法,為UDP媒體流打開一個“缺口”。
(11) HTTP友好:此處,RTSP明智地采用HTTP觀念,使現(xiàn)在結(jié)構(gòu)都可重用。結(jié)構(gòu)包括Internet內(nèi)容選擇平臺(PICS)。由于在大多數(shù)情況下控制連續(xù)媒體需要服務器狀態(tài),RTSP不僅僅向HTFP添加方法。
(12) 適當?shù)姆掌骺刂疲喝缬脩魡右粋€流,必須也可以停止一個流。
(13) 傳輸協(xié)調(diào):實際處理連續(xù)媒體流前,用戶可協(xié)調(diào)傳輸方法。
(14) 性能協(xié)調(diào):如基本特征無效,必須有一些清理機制讓用戶決定哪種方法沒生效。這允許用戶提出適合的用戶界面。
3.擴展RTSP
由于不是所有媒體服務器有著相同的功能,媒體服務器有必要支持不同請求集。RTSP可以如下三種方式擴展:
(1) 以新參數(shù)擴展。如用戶需要拒絕通知,而方法擴展不支持,相應標記就加人要求的段中。
(2) 加入新方法。如信息接收者不理解請求,返回501錯誤代碼,發(fā)送者不應再次嘗試這種方法。用戶可使用OPTIONS方法查詢服務器支持的方法。服務器使用公共響應頭列出支持的方法。
(3) 定義新版本協(xié)議,允許改變所有部分(協(xié)議版本號位置除外)。
4.操作模式
每個演示和媒體流可用RTSPURL識別。演示組成的整個演示與媒體屬性由演示描述文件定義。使用HTTP或其他途徑用戶可獲得這個文件,它沒有必要保存在媒體服務器上。為了說明這個問題,假設演示描述了多個演示,其中每個演示維持了一個公共時間軸。為簡化說明,且不失一般性,假定演示描述的確包含這樣一個演示。演示可包含多個媒體流。除媒體參數(shù)外,網(wǎng)絡目標地址和端口也需要決定。
下面區(qū)分幾種操作模式。
(1)單播:用戶選擇的端口號將媒體發(fā)送到RTSP請求源。
(2)服務器選擇地址多播:媒體服務器選擇多播地址和端口,這是現(xiàn)場直播或準點播常用的方式。
(3)用戶選擇地址多播:如服務器加入正在進行的多播會議,多播地址、端口和密鑰由會議描述給出。
5.RTSP狀態(tài)
RTSP控制通過單獨協(xié)議發(fā)送的流,與控制通道無關(guān)。例如,RTSP控制可通過TCP連接,而數(shù)據(jù)流通過UDP。因此,即使媒體服務器沒有收到請求,數(shù)據(jù)也會繼續(xù)發(fā)送。在連接生命期,單個媒體流可通過不同TCP連接順序發(fā)出請求來控制。所以,服務器需要維持能聯(lián)系流與RTSP請求的連接狀態(tài)。RTSP中很多方法與狀態(tài)無關(guān),但下列方法在定義服務器流資源的分配與應用上起著重要的作用:
(1) SETUP:讓服務器給流分配資源,啟動RTSP連接。
(2) PLAY與RECORD:啟動SETUP分配流的數(shù)據(jù)傳輸。
(3) PAUSE:臨時停止流,而不釋放服務器資源。
(4) TEARDOWN:釋放流的資源,RTSP連接停止。
標識狀態(tài)的RTSP方法使用連接頭段識別RTSP連接,為響應SETUP請求,服務器連接產(chǎn)生連接標識。
6.與其他協(xié)議的關(guān)系
RTSP在功能上與HTTP有重疊,與HTTP相互作用體現(xiàn)在與流內(nèi)容的初始接觸是通過網(wǎng)頁的。目前的協(xié)議規(guī)范目的在于允許在網(wǎng)頁服務器與實現(xiàn)RTSP媒體服務器之間存在不同傳遞點。例如,演示描述可通過HTTP和RTSP檢索,這降低了瀏覽器的往返傳遞,也允許獨立RTSP服務器與用戶不全依靠HTTP。
但是,RTSP與HTTP的本質(zhì)差別在于數(shù)據(jù)發(fā)送以不同協(xié)議進行。HTTP是不對稱協(xié)議,用戶發(fā)出請求,服務器作出響應。RTSP中,媒體用戶和服務器都可發(fā)出請求,且其請求都是無狀態(tài)的;在請求確認后很長時間內(nèi),仍可設置參數(shù),控制媒體流。重用HTTP功能至少在兩個方面有好處,即安全和代理。要求非常接近時,在緩存、代理和授權(quán)上采用HTTP功能是有價值的。
當大多數(shù)實時媒體使用RTP作為傳輸協(xié)議時,RTSP沒有綁定到RTP。RTSP假設存在演示描述格式可表示包含幾個媒體流的演示的靜態(tài)與臨時屬性。
二. 協(xié)議參數(shù)
1.RTSP版本
H.321采用,用RTSP代替HTTP。
2.RTSPURL
“rksp"和“rtspu"方案用于指RTSP協(xié)議使用的網(wǎng)絡資源,為RTSP URL定義方案特定的語法和語義。
3.會議標識
會議標識對RTSP來說是模糊的,采用標準URI編碼方法編碼,可包含任何八位組數(shù)值。會議標識必須全局惟一。
4.連接標識
連接標識是長度不確定的字符串,必須隨機選擇,至少要8個八位組長,使其很難被猜出。
5.SMPTE相關(guān)時標
SMPTE相關(guān)時標表示相對剪輯開始的時間,相關(guān)時標表示成SMPTE時間代碼,精確到幀級。時間代碼格式為小時:分鐘:秒:幀。缺省smpte格式是"SMPTE 30",幀速率為每秒29.97幀。其他SMPTE代碼可選擇使用smpte時間獲得支持(如"SMPIE25")。時間數(shù)值中幀段值可從0到29。每秒30與29.97幀的差別可將每分鐘的頭兩幀丟掉來實現(xiàn)。如幀值為零,就可刪除。
6.正常播放時間
正常播放時間(NPT)表示相對演示開始的流絕對位置。時標由十進制分數(shù)組成。左邊部分用秒或小時、分鐘、秒表示;小數(shù)點右邊部分表示秒的部分。演示的開始對應0.0秒,負數(shù)沒有定義。特殊常數(shù)定義成現(xiàn)場事件的當前時刻,這也許只用于現(xiàn)場事件。直觀上,NPT是聯(lián)系觀看者與程序的時鐘,通常以數(shù)字式顯示在VCR上。
7.絕對時間
絕對時間表示成ISO 8601時標,采用UTC(GMT)。
8.可選標簽
可選標簽是用于指定RTSP新可選項的惟一標記。這些標記用在請求和代理-請求頭段。當?shù)怯浶翿TSP選項時,需提供下列信息:
(1)名稱和描述選項。名稱長度不限,但不應該多于20個字符。名稱不能包括空格、控制字符。
(2)表明誰改變選項的控制。如IETF,ISO,ITU-T,或其他國際標準團體、聯(lián)盟或公司。
(3)深入描述的參考,如RFC、論文、專利、技術(shù)報告、文檔源碼和計算機手冊。
(4)對專用選項,附上聯(lián)系方式。
三. RTSP信息
RTSP是基于文本的協(xié)議,采用ISO10646字符集,使用UTF-8編碼方案。行以CRLF中斷,但接收者本身可將CR和LF解釋成行終止符。基于文本的協(xié)議使以自描述方式增加可選參數(shù)更容易。由于參數(shù)的數(shù)量和命令的頻率出現(xiàn)較低,處理效率沒引起注意。文本協(xié)議很容易以腳本語言(如:Tcl,VisualBasic與Perl)實現(xiàn)研究原型。
ISO 10646字符集避免敏感字符集切換,但對應用來說不可見。RTCP也采用這種編碼方案。帶有重要意義位的ISO 8859-1字符表示如100001x 10x x x x x x。RTSP信息可通過任何低層傳輸協(xié)議攜帶。
請求包括方法、方法作用于其上的對象以及進一步描述方法的參數(shù)。方法也可設計為在服務器端只需要少量或不需要狀態(tài)維護。當信息體包含在信息中,信息體長度由如下因素決定:
(1)不管實體頭段是否出現(xiàn)在信息中,不包括信息體的響應,信息總以頭段后第一個空行結(jié)束。
(2)如出現(xiàn)內(nèi)容長度頭段,其值以字節(jié)計,表示信息體長度。如未出現(xiàn)頭段,其值為零。
(3)服務器關(guān)閉連接。
注意,RTSP目前并不支持HTTP 1.1“塊”傳輸編碼,需要有內(nèi)容長度頭。假如返回適度演示描述長度,即使動態(tài)產(chǎn)生,使塊傳輸編碼沒有必要,服務器也應該能決定其長度。如有實體,即使必須有內(nèi)容長度,且長度沒顯式給出,規(guī)則可確保行為合理。
從用戶到服務器端的請求信息在第一行內(nèi)包括源采用的方法、源標識和所用協(xié)議版本。RTSP定義了附加狀態(tài)代碼,但沒有定義任何HTTP代碼。
四. 實體
如不受請求方法或響應狀態(tài)編碼限制,請求和響應信息可傳輸實體,實體則由實體頭文件和實體體組成,有些響應僅包括實體頭。在此,根據(jù)誰發(fā)送實體、誰接收實體,發(fā)送者和接收者可分別指用戶和服務器。
實體頭定義實體體可選元信息,如沒有實體體,指請求標識的資源。擴展頭機制允許定義附加實體頭段,而不用改變協(xié)議,但這些段不能假定接收者能識別。不可識別頭段應被接收者忽略,而讓代理轉(zhuǎn)發(fā)。
五. 連接
RTSP請求可以幾種不同方式傳送:
· 持久傳輸連接,用于多個請求/響應傳輸。
· 每個請求/響應傳輸一個連接。
· 無連接模式。
傳輸連接類型由RTSP URL來定義。對“rtsp'’方案,需要持續(xù)連接;而"rtspu"方案,調(diào)用RTSP請求發(fā)送,而不用建立連接。
不像HTTP,RTSP允許媒體服務器給媒體用戶發(fā)送請求。然而,這僅在持久連接時才支持,否則媒體服務器沒有可靠途徑到達用戶,這也是請求通過防火墻從媒體服務器傳到用戶的惟一途徑。
六. 方法定義
方法記號表示資源上執(zhí)行的方法,它區(qū)分大小寫。新方法可在將來定義,但不能以$開頭。已定義方法如表14-03-1所示。
表14-03-1 RTSP方法
方法
方向
對象
要求
含義
DESCRIBE
C->S
P, S
推薦
檢查演示或媒體對象的描述,也允許使用接收頭指定用戶理解的描述格式。DESCRIBE的答復-響應組成媒體RTSP初始階段
ANNOUNCE
C->S
S->C
P, S
可選
當從用戶發(fā)往服務器時,ANNOUNCE將請求URL識別的演示或媒體對象描述發(fā)送給服務器;反之,ANNOUNCE實時更新連接描述。如新媒體流加入演示,整個演示描述再次發(fā)送,而不僅僅是附加組件,使組件能被刪除
GET_PARAMETER
C->S
S->C
P, S
可選
GET_PARAMETER請求檢查RUL指定的演示與媒體的參數(shù)值。沒有實體體時,GET_PARAMETER也許能用來測試用戶與服務器的連通情況
OPTIONS
C->S
S->C
P, S
要求
可在任意時刻發(fā)出OPTIONS請求,如用戶打算嘗試非標準請求,并不影響服務器狀態(tài)
PAUSE
C->S
P, S
推薦
PAUSE請求引起流發(fā)送臨時中斷。如請求URL命名一個流,僅回放和記錄被停止;如請求URL命名一個演示或流組,演示 或組中所有當前活動的流發(fā)送都停止?;謴突胤呕蛴涗浐螅仨毦S持同步。在SETUP消息中連接頭超時參數(shù)所指定時段期間被暫停后,盡管服務器可能關(guān)閉連接 并釋放資源,但服務器資源會被預訂
PLAY
C->S
P, S
要求
PLAY告訴服務器以SEFUP指定的機制開始發(fā)送數(shù)據(jù);直到一些SETUP請求被成功響應,客戶端才可發(fā)布PLAY請 求。PLAY請求將正常播放時間設置在所指定范圍的起始處,發(fā)送流數(shù)據(jù)直到范圍的結(jié)束處。PLAY請求可排成隊列,服務器將PLAY請求排成隊列,順序執(zhí) 行
RECORD
C->S
P, S
可選
該方法根據(jù)演示描述初始化媒體數(shù)據(jù)記錄范圍,時標反映開始和結(jié)束時間;如沒有給出時間范圍,使用演示描述提供的開始和結(jié)束 時間。如連接已經(jīng)啟動,立即開始記錄,服務器數(shù)據(jù)請求URL或其他URL決定是否存儲記錄的數(shù)據(jù);如服務器沒有使用URL請求,響應應為201(創(chuàng)建), 并包含描述請求狀態(tài)和參考新資源的實體與位置頭。支持現(xiàn)場演示記錄的媒體服務器必須支持時鐘范圍格式,smpte格式?jīng)]有意義
REDIRECT
S->C
P, S
可選
重定向請求通知客戶端連接到另一服務器地址。它包含強制頭地址,指示客戶端發(fā)布URL請求;也可能包括參數(shù)范圍,以指明重定向何時生效。若客戶端要繼續(xù)發(fā)送或接收URL媒體,客戶端必須對當前連接發(fā)送TEARDOWN請求,而對指定主執(zhí)新連接發(fā)送SETUP請求
SETUP
C->S
S
要求
對URL的SETUP請求指定用于流媒體的傳輸機制??蛻舳藢φシ诺牧靼l(fā)布一個SETUP請求,以改變服務器允許的傳輸 參數(shù)。如不允許這樣做,響應錯誤為"455 Method Not Valid In This State”。為了透過防火墻,客戶端必須指明傳輸參數(shù),即使對這些參數(shù)沒有影響
SET_PARAMETER
C->S
S->C
P, S
可選
這個方法請求設置演示或URL指定流的參數(shù)值。請求僅應包含單個參數(shù),允許客戶端決定某個特殊請求為何失敗。如請求包含多 個參數(shù),所有參數(shù)可成功設置,服務器必須只對該請求起作用。服務器必須允許參數(shù)可重復設置成同一值,但不讓改變參數(shù)值。注意:媒體流傳輸參數(shù)必須用 SETUP命令設置。將設置傳輸參數(shù)限制為SETUP有利于防火墻。將參數(shù)劃分成規(guī)則排列形式,結(jié)果有更多有意義的錯誤指示
TEARDOWN
C->S
P, S
要求
TEARDOWN請求停止給定URL流發(fā)送,釋放相關(guān)資源。如URL是此演示URL,任何RTSP連接標識不再有效。除非全部傳輸參數(shù)是連接描述定義的,SETUP請求必須在連接可再次播放前發(fā)布
注:P----演示,S----流,C----用戶端,S----服務器端
某些防火墻設計與其他環(huán)境可能要求服務器插入RTSP方法和流數(shù)據(jù)。由于插入將使客戶端和服務器操作復雜,并增加附加開銷,除非有必要,應避免這樣做。插入二進制數(shù)據(jù)僅在RTSP通過TCP傳輸時才可使用。流數(shù)據(jù)(如RTP包)用一個ASCII字符$封裝,后跟一個一字節(jié)通道標識,其后是封裝二進制數(shù)據(jù)的長度,兩字節(jié)整數(shù)。流數(shù)據(jù)緊跟其后,沒有CRLF,但包括高層協(xié)議頭。每個$塊包含一個高層協(xié)議數(shù)據(jù)單元。
當傳輸選擇為RTP,RTCP信息也被服務器通過TCP連接插入。缺省情況下,RTCP包在比RTP通道高的第一個可用通道上發(fā)送??蛻舳丝赡茉诹硪煌ǖ里@式請求RTCP包,這可通過指定傳輸頭插入?yún)?shù)中的兩個通道來做到。當兩個或更多流交叉時,為取得同步,需要RTCP。而且,這為當網(wǎng)絡設置需要通過TCP控制連接透過RTP/RTCP提供了一條方便的途徑,可能時,在UDP上進行傳輸。
七. 流水線操作
支持持久連接或無連接的客戶端可能給其請求排隊。服務器必須以收到請求的同樣順序發(fā)出響應。如果請求不是發(fā)送給多播組,接收者就確認請求,如沒有確認信息,發(fā)送者可在超過一個來回時間(RTT)后重發(fā)同一信息。
在TCP中RTT估計的初始值為500ms。應用緩存最后所測量的RTT,作為將來連接的初始值。如使用一個可靠傳輸協(xié)議傳輸RTSP,請求不允許重發(fā),RTSP應用反過來依賴低層傳輸提供可靠性。如兩個低層可靠傳輸(如TCP和RTSP)應用重發(fā)請求,有可能每個包損失導致兩次重傳。由于傳輸棧在第一次嘗試到達接收者前不會發(fā)送應用層重傳,接收者也不能充分利用應用層重傳。如包損失由阻塞引起,不同層的重發(fā)將使阻塞進一步惡化。時標頭用來避免重發(fā)模糊性問題,避免對圓錐算法的依賴。每個請求在CSeq頭中攜帶一個系列號,每發(fā)送一個不同請求,它就加一。如由于沒有確認而重發(fā)請求,請求必須攜帶初始系列號。
實現(xiàn)RTSP的系統(tǒng)必須支持通過TCP傳輸RTSP,并支持UDP。對UDP和TCP,RTSP服務器的缺省端口都是554。許多目的一致的RTSP包被打包成單個低層PDU或TCP流。RTSP數(shù)據(jù)可與RTP和RTCP包交叉。不像HTTP,RTSP信息必須包含一個內(nèi)容長度頭,無論信息何時包含負載。否則,RTSP包以空行結(jié)束,后跟最后一個信息頭。