ONVIF專題--RTSP

1 RTSP簡介

RTSP(Real Time Streaming Protocol)是由Real Network和Netscape共同提出的如何有效地在IP網絡上傳輸流媒體數據的應用層協議。RTSP對流媒體提供了諸如暫停,快進等控制,而它本身並不傳輸數據,RTSP的作用相當於流媒體服務器的遠程控制。服務器端可以自行選擇使用TCP或UDP來傳送串流內容,它的語法和運作跟HTTP 1.1類似,但並不特別強調時間同步,所以比較能容忍網絡延遲。而且允許同時多個串流需求控制(Multicast),除了可以降低服務器端的網絡用量,還可以支持多方視頻會議(Video  onference)。 因爲與HTTP1.1的運作方式相似,所以代理服務器《Proxy》的快取功能《Cache》也同樣適用於RTSP,並因RTSP具有重新導向功能,可視實際負載情況來轉換提供服務的服務器,以避免過大的負載集中於同一服務器而造成延遲。

1.1 rtsp和http的區別和聯繫

    (1)聯繫:兩者都用純文本來發送消息,且rtsp協議的語法也和HTTP類似。Rtsp一開始這樣設計,也是爲了能夠兼容使用以前寫的HTTP協議分析代碼 。

    (2)區別:rtsp是有狀態的,不同的是RTSP的命令需要知道現在正處於一個什麼狀態,也就是說rtsp的命令總是按照順序來發送,某個命令總在另外一個命令之前要發送。Rtsp不管處於什麼狀態都不會去斷掉連接。,而http則不保存狀態,協議在發送一個命令以後,連接就會斷開,且命令之間是沒有依賴性的。rtsp協議使用554端口,http使用80端口。

1.2 rtsp和sip的區別和聯繫

SIP(Session Initiation Protocol),是基於IP的一個應用層控制協議。由於SIP是基於純文本的信令協議,可以管理不同接入網絡上的會話等。會話可以是終端設備之間任何類型的通信,如視頻會話、既時信息處理或協作會話。該協議不會定義或限制可使用的業務,傳輸、服務質量、計費、安全性等問題都由基本核心網絡和其它協議處理。

    (1)聯繫:sip和rtsp都是應用層的控制協議,負責一次通信過程的建立和控制和結束,不負責中間的傳輸部分。他們都是基於純文本的信令協議,穿牆性能良好。支持tcp、udp,支持多方通信。他們都需要服務器支持,都支持會話中重定向。sip和rtsp 都使用sdp協議來傳送媒體參數,使用rtp(rtcp)協議來傳輸媒體流。

    (2)區別:rtsp是專門爲流媒體制定的協議,在多個媒體流的時間同步方面比sip強大。rtsp還提供網絡負載均衡的功能,減輕服務器壓力和網絡帶寬要求。sip一般用來創建一次音頻、視頻通話(雙向),而rtsp一般用來做視頻點播、視頻監控等(單向)。當然,從原理上講,rtsp也可以做雙向的視頻通話。

1.3 RTSP和RTP(rtcp)的關係

rtsp負責建立和控制會話,rtp負責多媒體的傳輸,rtcp配合rtp做控制和流量統計,他們是合作的關係。

RTSP的消息

       RTSP的消息有兩大類,一是請求消息(request),一是迴應消息(response),兩種消息的格式不同。

請求消息格式

       方法 URI RTSP版本 CR LF

       消息頭 CR LF CR LF        

       消息體 CR LF

其中方法包括OPTIONS、SETUP、PLAY、TEARDOWN等,URI是接收方(服務端)的地址,例如:rtsp://192.168.22.136:5000/v0,每行後面的CR LF表示回車換行,需要接收端有相應的解析,最後一個消息頭需要有兩個CR LF。

迴應消息格式

       RTSP版本 狀態碼 解釋 CR LF

       消息頭 CR LF CR LF

       消息體 CR LF

其中RTSP版本一般都是RTSP/1.0,狀態碼是一個數值,200表示成功,解釋是與狀態碼對應的文本解釋。

狀態碼由三位數組成,表示方法執行的結果,定義如下:

1XX:保留,將來使用;

2XX:成功,操作被接收、理解、接受(received,understand,accepted);

3XX:重定向,要完成操作必須進行進一步操作;

4XX:客戶端出錯,請求有語法錯誤或無法實現;

5XX:服務器出錯,服務器無法實現合法的請求。

 

1.4 附:RTSP、RTP & RTCP、SRTP & SRTCP、PS、TS、H.264關係

RTP:實時傳輸協議(Real-time Transport Protocol) 總稱,整個RTP協議由兩個密切相關的部分組成:RTP數據協議和RTP控制協議(即RTCP)

RTP/RTCP是實際傳輸數據的協議,RTP傳輸音頻/視頻數據,如果是PLAY,Server發送到Client端,如果是RECORD,可以由Client發送到Server

RTSP:實時流協議(Real Time Streaming Protocol,RTSP)顧名思義可以知道起對話和控制作用、RTSP的對話過程中SETUP可以確定RTP/RTCP使用的端口,PLAY/PAUSE/TEARDOWN可以開始或者停止RTP的發送等。

SRTP & SRTCP: 安全實時傳輸協議(Secure Real-time Transport Protocol或SRTP)是在實時傳輸協議(Real-time Transport Protocol或RTP)基礎上所定義的一個協議,旨在爲單播和多播應用程序中的實時傳輸協議的數據提供加密、消息認證、完整性保證和重放保護。它是由David Oran(思科)和Rolf Blom(愛立信)開發的,並最早由IETF於2004年3月作爲RFC 3711發佈。

PS/TS是ES流(Elementary Stream 媒體碼流)數據的網絡封裝,(PS是變長、TS定長)是RTP包中的數據荷載,PS/TS數據中,帶有視音頻同步顯示、解碼器等參數,所以這一級的協議數據需要播放器解析。

H264: 視頻編碼格式,PS包中的實際封裝的數據。類似的還有音頻編碼格式,圖片編碼格式都可以作爲PS\TS封裝中的實際數據。

2 RTSP方法

rtsp中定義的方法有:OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, GET_PARAMETER, SET_PARAMETER

2.1 OPTION

目的是獲取服務器/客戶端支持的能力集:

OPTIONS rtsp://192.168.20.136:5000/xxx666 RTSP/1.0

CSeq: 1         //每個消息都有序號來標記,第一個包通常是option請求消息

User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

服務器的迴應信息包括提供的一些方法,例如:

RTSP/1.0 200 OK

Server: UServer 0.9.7_rc1

Cseq: 1         //每個迴應消息的cseq數值和請求消息的cseq相對應

Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, GET_PARAMETER //服務器提供的可用方法

2.2 DESCRIBE

C向S發起DESCRIBE請求,爲了得到會話描述信息(SDP):

DESCRIBE rtsp://192.168.20.136:5000/xxx666 RTSP/1.0

CSeq: 2

token:

Accept: application/sdp

User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

服務器迴應一些對此會話的描述信息(sdp):

關鍵字段:
Content-Type:一般是SDP
Content-length:一般是SDP的長度

RTSP/1.0 200 OK

Server: UServer 0.9.7_rc1

Cseq: 2

x-prev-url: rtsp://192.168.20.136:5000

x-next-url: rtsp://192.168.20.136:5000

x-Accept-Retransmit: our-retransmit

x-Accept-Dynamic-Rate: 1

Cache-Control: must-revalidate

Last-Modified: Fri, 10 Nov 2006 12:34:38 GMT

Date: Fri, 10 Nov 2006 12:34:38 GMT

Expires: Fri, 10 Nov 2006 12:34:38 GMT

Content-Base: rtsp://192.168.20.136:5000/xxx666/

Content-Length: 344

Content-Type: application/sdp

v=0        //以下都是sdp信息

o=OnewaveUServerNG 1451516402 1025358037 IN IP4 192.168.20.136

s=/xxx666

u=http:///

e=admin@

c=IN IP4 0.0.0.0

t=0 0

a=isma-compliance:1,1.0,1

a=range:npt=0-

m=video 0 RTP/AVP 96    //m表示媒體描述,下面是對會話中視頻通道的媒體描述

a=rtpmap:96 MP4V-ES/90000

a=fmtp:96 profile-level-id=245;config=000001B0F5000001B509000001000000012000C888B0E0E0FA62D089028307

a=control:trackID=0//trackID0表示視頻流用的是通道0

sdp的格式:

v=<version>

o=<username> <session id> <version> <network type> <address type> <address>

s=<session name>

i=<session description>

u=<URI>

e=<email address>

p=<phone number>

c=<network type> <address type> <connection address>

b=<modifier>:<bandwidth-value>

t=<start time> <stop time>

r=<repeat interval> <active duration> <list of offsets from start-time>

z=<adjustment time> <offset> <adjustment time> <offset> ....

k=<method>

k=<method>:<encryption key>

a=<attribute>

a=<attribute>:<value>

m=<media> <port> <transport> <fmt list>

v = (協議版本)

o = (所有者/創建者和會話標識符)

s = (會話名稱)

i = * (會話信息)

u = * (URI 描述)

e = * (Email 地址)

p = * (電話號碼)

c = * (連接信息)

b = * (帶寬信息)

z = * (時間區域調整)

k = * (加密密鑰)

a = * (0 個或多個會話屬性行)

時間描述:

t = (會話活動時間)

r = * (0或多次重複次數)

媒體描述:

m = (媒體名稱和傳輸地址)

i = * (媒體標題)

c = * (連接信息 — 如果包含在會話層則該字段可選)

b = * (帶寬信息)

k = * (加密密鑰)

a = * (0 個或多個媒體屬性行)

2.3 SETUP

關鍵字段:
Transport——傳輸方式
Transport: MP2T/RTP/UDP;unicast;destination=121.60.21.53;client_port=8342-8343,MP2T/RTP/TCP;unicast;destination=121.60.21.53;interleaved=0-1

客戶端提醒服務器建立會話,並確定傳輸模式:

SETUP rtsp://192.168.20.136:5000/xxx666/trackID=0 RTSP/1.0   

CSeq: 3

Transport: RTP/AVP/TCP;unicast;interleaved=0-1     

User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

uri中帶有trackID=0,表示對該通道進行設置。Transport參數設置了傳輸模式,包的結構。接下來的數據包頭部第二個字節位置就是interleaved,它的值是每個通道都不同的,trackID=0的interleaved值有兩個0或1,0表示rtp包,1表示rtcp包,接受端根據interleaved的值來區別是哪種數據包。

服務器迴應信息:

RTSP/1.0 200 OK

Server: UServer 0.9.7_rc1

Cseq: 3

Session: 6310936469860791894     //服務器迴應的會話標識符

Cache-Control: no-cache

Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=6B8B4567

 示例:

2.4 PLAY

關鍵字段:
Range——播放時間
Range: npt=0.0-end
Range:clock=20100318T021919.35Z-20100318T031919.80Z
Scale——播放速度
Scale: 1.0

相對時間描述——npt(normalplay time)
方法1 位置描述
beginning      節目起始點
now               當前播放點
end                節目結束點

方法2 時間描述
直接用數字形式表示與起始點的時間
絕對時間描述——clock
ISO 8601時間戳標準

客戶端發送播放請求:

PLAY rtsp://192.168.20.136:5000/xxx666 RTSP/1.0

CSeq: 4

Session: 6310936469860791894

Range: npt=0.000-end    //設置播放時間的範圍

User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

服務器迴應信息:

RTSP/1.0 200 OK

Server: UServer 0.9.7_rc1

Cseq: 4

Session: 6310936469860791894

Range: npt=0.000000-

RTP-Info: url=trackID=0;seq=17040;rtptime=1467265309    

seq和rtptime都是rtp包中的信息

 示例:

2.5 TEARDOWN

客戶端發起關閉請求:

TEARDOWN rtsp://192.168.20.136:5000/xxx666 RTSP/1.0

CSeq: 5

Session: 6310936469860791894

User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)

服務器迴應:

RTSP/1.0 200 OK

Server: UServer 0.9.7_rc1

Cseq: 5

Session: 6310936469860791894

Connection: Close

示例:

2.6 PAUSE

暫停流媒體播放

關鍵字段:無從服務器獲取參數,目前主要獲取時間範圍
保持RTSP連接(發送空的GET_PARAMETER)

關鍵字段(電信擴展):
x-Timeshift_Range: clock=20100318T021915.84Z-20100318T031915.84Z
x-Timeshift_Current: clock=20100318T031915.84Z

可能存在的問題:
長時間Pause後,RTSP的TCP連接超時中斷。解決辦法——定期發送心跳包維持連接(參見GET_PARAMETER)

2.7 GET_PARAMETER

從服務器獲取參數,目前主要獲取時間範圍,維持RTSP連接(心跳,發送空的GET_PARAMETER)

關鍵字段(電信擴展):
x-Timeshift_Range: clock=20100318T021915.84Z-20100318T031915.84Z
x-Timeshift_Current: clock=20100318T031915.84Z

示例:

3 rtsp消息交互流程

1)  第一步:查詢服務器端可用方法

  C->S:OPTION request       //詢問S有哪些方法可用

  S->C:OPTION response    //S迴應信息的public頭字段中包括提供的所有可用方法過程。

2) 第二步:得到媒體描述信息

  C->S:DESCRIBE request      //要求得到S提供的媒體描述信息

  S->C:DESCRIBE response    //S迴應媒體描述信息,一般是sdp信息

3) 第三步:建立RTSP會話

  C->S:SETUP request             //通過Transport頭字段列出可接受的傳輸選項,請求S建立會話

  S->C:SETUP response          //S建立會話,通過Transport頭字段返回選擇的具體轉輸選項,

  並返回建立的Session ID

4) 第四步:請求開始傳送數據

  C->S:PLAY request        //C請求S開始發送數據

  S->C:PLAY response            //S迴應該請求的信息

5) 第五步: 數據傳送播放中

  S->C:發送流媒體數據    // 通過RTP協議傳送數據

6) 第六步:關閉會話,退出

  C->S:TEARDOWN request      //C請求關閉會話

  S->C:TEARDOWN response //S迴應該請求

注:上述的過程只是標準的、友好的rtsp流程,但實際的需求中並不一定按此過程。其中第三和第四步是必需的!第一步,只要服務器客戶端約定好,有哪些方法可用,則option請求可以不要。第二步,如果有其他途徑得到媒體初始化描述信息(比如http請求等等),則不需要通過rtsp中的describe請求來完成。

 

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