初學(xué)RTSP協(xié)議
對(duì)于RTSP協(xié)議不知道大家是否了解。這個(gè)協(xié)議的使用還是非常重要的。所以今天我們就對(duì)這個(gè)協(xié)議來進(jìn)行一下細(xì)致的介紹。首先讓我們看一下這個(gè)協(xié)議的規(guī)范概念。實(shí)時(shí)流協(xié)議(RTSP)建立并控制一個(gè)或幾個(gè)時(shí)間同步的連續(xù)流媒體,如音頻和視頻。盡管連續(xù)媒體流與控制流交叉是可能的,RTSP本身并不發(fā)送連續(xù)流。換言之,RTSP充當(dāng)多媒體服務(wù)器的網(wǎng)絡(luò)遠(yuǎn)程控制。RTSP協(xié)議提供了一個(gè)可擴(kuò)展框架,實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)(如音頻與視頻)的受控、按需傳送。數(shù)據(jù)源包括實(shí)況數(shù)據(jù)與存儲(chǔ)的剪輯。RTSP用于控制多個(gè)數(shù)據(jù)發(fā)送會(huì)話,提供了選擇發(fā)送通道(如 UDP、組播 UDP 與 TCP 等)的方式,并提供了選擇基于RTP的發(fā)送機(jī)制的方法。
目前還沒有 RTSP連接的概念;服務(wù)器維護(hù)由識(shí)別符標(biāo)識(shí)的會(huì)話。RTSP會(huì)話不會(huì)綁定到傳輸層連接,如 TCP。在 RTSP會(huì)話期間,RTSP客戶端可打開或關(guān)閉多個(gè)對(duì)服務(wù)器的可靠傳輸連接以發(fā)出 RTSP請求。它也可選擇使用無連接傳輸協(xié)議,如 UDP。
RTSP控制的流可能用到 RTP,但 RTSP操作并不依賴用于傳輸連續(xù)媒體的傳輸機(jī)制。RTSP在語法和操作上與 HTTP/1.1 類似,因此 HTTP 的擴(kuò)展機(jī)制在多數(shù)情況下可加入 RTSP。然而,在很多重要方面 RTSP仍不同于 HTTP :
RTSP引入了大量新方法并具有一個(gè)不同的協(xié)議標(biāo)識(shí)符:
在大多數(shù)情況下,RTSP服務(wù)器需要保持缺省狀態(tài),與 HTTP 的無狀態(tài)相對(duì);
RTSP中客戶端和服務(wù)器都可以發(fā)出請求;
在多數(shù)情況下,數(shù)據(jù)由不同的協(xié)議傳輸;
RTSP協(xié)議使用 ISO 10646 (UTF-8)而并非 ISO 8859-1,與當(dāng)前的國際標(biāo)準(zhǔn) HTML 相一致;
URI 請求總是包含絕對(duì) URI。為了與過去的錯(cuò)誤相互兼容,HTTP/1.1 只在請求過程中傳送絕對(duì)路徑并將主機(jī)名置于另外的頭字段。
該協(xié)議支持如下操作:
從媒體服務(wù)器上檢索媒體:用戶可通過 HTTP 或其它方法提交一個(gè)演示描述請求;
媒體服務(wù)器邀請進(jìn)入會(huì)議: 媒體服務(wù)器可被邀請參加正進(jìn)行的會(huì)議,或回放媒體,或記錄部分或全部演示;
將新媒體加到現(xiàn)有演示中:如服務(wù)器能告訴客戶端接下來可用的媒體內(nèi)容,對(duì)現(xiàn)場直播顯得尤其有用。
協(xié)議結(jié)構(gòu)
RTSP協(xié)議是一種文本協(xié)議,采用 UTF-8 編 碼中的 ISO 10646 字符集。一行可通過 CRLF 終止,但接收端需要做好解釋 CR 和 LF 作為一行終止符 的準(zhǔn)備。關(guān)于頭字段概述如下:
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 |