RTSP重要方法

轉自http://blog.csdn.net/caoshangpa/article/details/53191630

.RTSP重要方法


#####################################
################################################

RTSP URL的語法結構

一個終端用戶是通過在播放器中輸入URL地址開始進行觀看流媒體業務的第一步,而對於使用RTSP協議的移動流媒體點播而言,URL的一般寫法如下

一個以“rtsp”或是“rtspu”開始的URL鏈接用於指定當前使用的是RTSP 協議。RTSP URL的語法結構如下:

rtsp_url = (“rtsp:”| “rtspu:”) “//” host [“:”port”] /[abs_path]/content_name

host:可以是一個有效的域名或是IP地址。

port:端口號,對於RTSP協議來說,缺省的端口號爲554。當我們在確認流媒體服務器提供的端口號爲554時,此項可以省略 說明:當HMS服務器使用的端口號爲554時,我們在寫點播鏈接時,可以不用寫明端口號,但當使用非554端口時,在RTSP URL中一定要指定相應的端口。

abs_path: 爲RTSPServer中的媒體流資源標識,見下章節的錄像資源命名。 

RTSPURL用來標識RTSPServer的媒體流資源,可以標識單一的媒體流資源,也可以標 識多個媒體流資源的集合。 

請求消息的第一行的語法結構如下:

Request-Line    =   Method 空格 Request-URI 空格 RTSP-Version CRLF

響應消息的第一行是狀態行(status-line),每個元素之間用空格分開。除了最後的CRLF之外,在此行的中間不得有CR或是LF的出現。它的語法格式如下,

Status-Line = RTSP-Version 空格Status-Code 空格Reason-Phrase CRLF

狀態碼(Status-Code) 是一個三位數的整數,用於描述接收方對所收到請求消息的執行結果

#####################################
################################################

1.OPTIONS:
用於得到服務器提供的可用方法。
如:

C->S:OPTIONS rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
          CSeq: 1        
服務器的迴應信息會在Public字段列出提供的方法。

如:
S->C:RTSP/1.0 200 OK
         CSeq: 1        //每個迴應消息的cseq數值和請求消息的cseq相對應
         Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE


2.DESCRIBE:
客戶端向服務器端發送DESCRIBE,用於得到URL所指定的媒體描述信息一般是SDP信息。客戶端通過Accept頭指定客戶端可以接受的媒體述信息類型
如:
C->S:DESCRIBE rtsp://server.example.com/fizzle/foo RTSP/1.0
          CSeq: 312
          Accept: application/sdp, application/rtsl,application/mheg
服務器迴應URL指定媒體的描述信息:
如:
S->C:RTSP/1.0 200 OK
          CSeq: 312
           Date: 23 Jan 1997 15:35:06 GMT
           Content-Type: application/sdp  //表示迴應爲SDP信息
           Content-Length: 376
           //這裏爲一個空行,以下爲具體的SDP信息
            v=0 
            o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4
            s=SDP Seminar
            i=A Seminar on the session description protocol
            u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
            [email protected] (Mark Handley)
            c=IN IP4 224.2.17.12/127
            t=2873397496 2873404696
            a=recvonly
            m=audio 3456 RTP/AVP 0
            m=video 2232 RTP/AVP 31
            m=whiteboard 32416 UDP WB
            a=orient:portrait
 
媒體初始化是任何基於RTSP系統的必要條件,但RTSP規範並沒有規定它必須通過DESCRIBE方法完成。RTSP客戶端可以通過以下方法來接收初始化信息:
a)  通過DESCRIBE方法;
b)  其它一些協議(HTTP,Email附件等);
c)  通過命令行或標準輸入設備。


3.SETUP:
用於確定轉輸機制,建立RTSP會話。客戶端能夠發出一個SETUP請求爲正在播放的媒體流改變傳輸參數,服務器可能同意這些參數的改變。若是不同意,它必須響應錯誤"455 Method Not Valid In This State"。
請求中的Transport頭字段指定了客戶端可接受的數據傳輸參數響應中的Transport頭字段包含了由服務器選出的傳輸參數。
如:
C->S:SETUP rtsp://example.com/foo/bar/baz.rm RTSP/1.0
          CSeq: 302
          Transport: RTP/AVP;unicast;client_port=4588-4589
服務器端對SETUP請求產生一個Session ID。
如:
S->C:RTSP/1.0 200 OK
          CSeq: 302
          Date: 23 Jan 1997 15:35:06 GMT
          Session: 47112344 //產生一個Session ID
          Transport: RTP/AVP;unicast;   //unicast表示單播
          client_port=4588-4589;server_port=6256-6257
 
4.PLAY:
PLAY方法告知服務器通過SETUP中指定的機制開始發送數據 。在尚未收到SETUP請求的成功應答之前,客戶端不可以發出PLAY請求。
PLAY請求將正常播放時間(normal play time)定位到指定範圍的起始處,並且傳輸數據流直到播放範圍結束。PLAY請求可能被管道化(pipelined),即放入隊列中(queued);服務器必須將PLAY請求放到隊列中有序執行。也就是說,後一個PLAY請求需要等待前一個PLAY請求完成才能得到執行。
比如,在下例中,不管到達的兩個PLAY請求之間有多緊湊,服務器首先play第10到15秒,然後立即第20到25秒,最後是第30秒直到結束。
C->S:PLAY rtsp://audio.example.com/audio RTSP/1.0
          CSeq: 835
          Session: 12345678
          Range: npt=10-15
 
C->S:PLAY rtsp://audio.example.com/audio RTSP/1.0
         CSeq: 836
         Session: 12345678
          Range: npt=20-25
 
C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0
          CSeq: 837
          Session: 12345678
          Range: npt=30-
 
Range頭可能包含一個時間參數。該參數以UTC格式指定了播放開始的時間。如果在這個指定時間後收到消息,那麼播放立即開始。時間參數可能用來幫助同步從不同數據源獲取的數據流。
不含Range頭的PLAY請求也是合法的。它從媒體流開頭開始播放,直到媒體流被暫停。如果媒體流通過PAUSE暫停,媒體流傳輸將在暫停點(the pause point)重新開始。
如果媒體流正在播放,那麼這樣一個PLAY請求將不起更多的作用,只是客戶端可以用此來測試服務器是否存活。


5.PAUSE:
PAUSE請求引起媒體流傳輸的暫時中斷。如果請求URL中指定了具體的媒體流,那麼只有該媒體流的播放和記錄被暫停(halt)。比如,指定暫停音頻,播放將會無聲。如果請求URL指定了一組流,那麼在該組中的所有流的傳輸將被暫停。

如:
C->S:PAUSE rtsp://example.com/fizzle/foo RTSP/1.0
          CSeq: 834
          Session: 12345678
 
S->C:RTSP/1.0 200 OK
         CSeq: 834
          Date: 23 Jan 1997 15:35:06 GMT
 
PAUSE請求中可能包含一個Range頭用來指定何時媒體流暫停,我們稱這個時刻爲暫停點(pause point)。該頭必須包含一個精確的值,而不是一個時間範圍。媒體流的正常播放時間設置成暫停點。當服務器遇到在任何當前掛起(pending)的PLAY請求中指定的時間點後,暫停請求生效。如果Range頭指定了一個時間超出了任何一個當前掛起的PLAY請求,將返回錯誤"457 Invalid Range" 。如果一個媒體單元(比如一個音頻或視頻禎)正好在一個暫停點開始,那麼表示將不會被播放或記錄。如果Range頭缺失,那麼在收到暫停消息後媒體流傳輸立即中斷,並且暫停點設置成當前正常播放時間。


6.TEARDOWN:
TEARDOWN請求終止了給定URL的媒體流傳輸,並釋放了與該媒體流相關的資源。

如:
C->S:TEARDOWN rtsp://example.com/fizzle/foo RTSP/1.0
          CSeq: 892
          Session: 12345678
 
S->C: RTSP/1.0 200 OK
           CSeq: 892


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