NuPlayer:RTP/RTSP

RTSP SDP RTP/RTCP

介紹應(yīng)用層 RTSP、SDP;

傳輸層 RTP、TCP、UDP;

網(wǎng)絡(luò)層 IPSDP:

(1)SDP(Session Description Protocol)是服務(wù)器端生成的描述媒體文件的編碼信息以及所在服務(wù)器的鏈接等信息的文件,客戶端通過它來設(shè)置播放軟件的參數(shù)。SDP只是一種用于會(huì)話描述的協(xié)議,它并不是一種傳輸協(xié)議,只是用于在不同傳輸協(xié)議之間傳遞消息的通知協(xié)議,其主要目的是解決多媒體會(huì)話通知、邀請(qǐng)和另外一些媒體會(huì)話的初始化工作。

(2) SDP內(nèi)容包括:會(huì)話名稱和目的、會(huì)話持續(xù)時(shí)間、媒體類(音頻、視頻等)、傳輸協(xié)議(RTP/UDP/IP,H.320等)、媒體編碼格式(MPEG4、H.263、H.264等)、接收媒體的相關(guān)信息端口和格式等。

RTSP:

(1)RTSP是應(yīng)用級(jí)協(xié)議,用于流媒體服務(wù)器和終端播放器之間的媒體流會(huì)話的建立和控制。RTSP本身不被用于傳輸媒體數(shù)據(jù),而是用于控制媒體流播放的過程,如會(huì)話建立、暫停、停止、快進(jìn)、快退、錄制等。媒體傳輸協(xié)議和相應(yīng)的參數(shù)在會(huì)話建立過程中雙方協(xié)商確定,一般采用RTP協(xié)議。RTSP是文本協(xié)議,其功能和HTTP及SIP類似,不同之處是RTSP及SIP本身不傳輸媒體流數(shù)據(jù),而HTTP可以。

(2) RTSP可以承載在TCP或UDP之上(一般為TCP),端口號(hào)為554。RTSP通過定義一些“Method”來實(shí)現(xiàn)會(huì)話的控制,其主要的Mothod有:DESCRIBE、SETUP、PLAY、PAUSE、RECORD、REDIRECT、TEARDOWN等。同時(shí),RTSP通過會(huì)話描述協(xié)議(SDP)來協(xié)商雙方的媒體格式、傳輸協(xié)議等。

RTP/RTCP:

(1)整個(gè)RTP 協(xié)議由兩個(gè)密切相關(guān)的部分組成:RTP 數(shù)據(jù)協(xié)議和RTP控制協(xié)議,當(dāng)應(yīng)用程序開始一個(gè)RTP會(huì)話時(shí)將使用兩對(duì)端口:一對(duì)用于RTP,另外一對(duì)用于RTCP。RTP是針對(duì)多媒體數(shù)據(jù)流的傳輸協(xié)議,能夠提供時(shí)間信息并提供流同步,但本身并不能提供可靠的傳送機(jī)制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務(wù)。RTP通常采用UDP來傳送數(shù)據(jù)。

(2) RTCP和RTP一起提供流量控制和擁塞控制服務(wù),RTCP的主要功能是為數(shù)據(jù)的傳送情況提供反饋。在RTP會(huì)話期間,各參與者周期性..傳送RTCP包,RTCP包中含有已發(fā)送的數(shù)據(jù)包數(shù)量、丟失的數(shù)據(jù)包數(shù)量等統(tǒng)計(jì)信息,服務(wù)器可以據(jù)這些信息動(dòng)態(tài)收變傳輸速率,甚至收變有效負(fù)荷的類。RTP和RTCP配合使用,能夠以有效的反饋和最小的開銷使傳輸效率最佳化。

RTP/RTSP/RTCP的區(qū)別用一句簡(jiǎn)單的話總結(jié):RTSP發(fā)起/終結(jié)流媒體、RTP傳輸流媒體數(shù)據(jù)、RTCP對(duì)RTP進(jìn)行控制,同步。

?RTP:實(shí)時(shí)傳輸協(xié)議(Real-time Transport Protocol)

RTP/RTCP是實(shí)際傳輸數(shù)據(jù)的協(xié)議oRTP傳輸音頻/視頻數(shù)據(jù),如果是PLAY,Server發(fā)送到Client端,如果是RECORD,可以由Client發(fā)送到Server

整個(gè)RTP協(xié)議由兩個(gè)密切相關(guān)的部分組成:RTP數(shù)據(jù)協(xié)議和RTP控制協(xié)議(即RTCP)

?RTSP:實(shí)時(shí)流協(xié)議(Real Time Streaming Protocol,RTSP)

RTSP的請(qǐng)求主要有DESCRIBE,SETUP,PLAY,PAUSE,TEARDOWN,OPTIONS等,顧名思義可以知道起對(duì)話和控制作用

RTSP的對(duì)話過程中SETUP可以確定RTP/RTCP使用的端口,PLAY/PAUSE/TEARDOWN可以開始或者停止RTP的發(fā)送,等等

?RTCP:

RTP/RTCP是實(shí)際傳輸數(shù)據(jù)的協(xié)議

RTCP包括Sender Report和Receiver Report,用來進(jìn)行音頻/視頻的同步以及其他用途,是一種控制協(xié)議

以下是每個(gè)協(xié)議的概要介紹:

一、RTP數(shù)據(jù)協(xié)議

RTP數(shù)據(jù)協(xié)議負(fù)責(zé)對(duì)流媒體數(shù)據(jù)進(jìn)行封包并實(shí)現(xiàn)媒體流的實(shí)時(shí)傳輸,每一個(gè)RTP數(shù)據(jù)報(bào)都由頭部(Header)和負(fù)載(Payload)兩個(gè)部分組成,其中頭部前12個(gè)字節(jié)的含義是固定的,而負(fù)載則可以是音頻或者視頻數(shù)據(jù)。其中比較重要的幾個(gè)域及其意義如下:

?CSRC記數(shù)(CC):表示CSRC標(biāo)識(shí)的數(shù)目。CSRC標(biāo)識(shí)緊跟在RTP固定頭部之后,用來表示RTP數(shù)據(jù)報(bào)的來源,RTP協(xié)議允許在同一個(gè)會(huì)話中存在多個(gè)數(shù)據(jù)源,它們可以通過RTP混合器合并為一個(gè)數(shù)據(jù)源。例如,可以產(chǎn)生一個(gè) CSRC列表來表示一個(gè)電話會(huì)議,該會(huì)議通過一個(gè)RTP混合器將所有講話者的語音數(shù)據(jù)組合為一個(gè)RTP數(shù)據(jù)源。

?負(fù)載類型(PT):標(biāo)明RTP負(fù)載的格式,包括所采用的編碼算法、采樣頻率、承載通道等。例如,類型2表明該RTP數(shù)據(jù)包中承載的是用ITU G.721算法編碼的語音數(shù)據(jù),采樣頻率為8000Hz,并且采用單聲道。

?序列號(hào):用來為接收方提供探測(cè)數(shù)據(jù)丟失的方法,但如何處理丟失的數(shù)據(jù)則是應(yīng)用程序自己的事情,RTP協(xié)議本身并不負(fù)責(zé)數(shù)據(jù)的重傳。

?時(shí)間戳:記錄了負(fù)載中第一個(gè)字節(jié)的采樣時(shí)間,接收方能夠時(shí)間戳能夠確定數(shù)據(jù)的到達(dá)是否受到了延遲抖動(dòng)的影響,但具體如何來補(bǔ)償延遲抖動(dòng)則是應(yīng)用程序自己的事情。

從RTP數(shù)據(jù)報(bào)的格式不難看出,它包含了傳輸媒體的類型、格式、序列號(hào)、時(shí)間戳以及是否有附加數(shù)據(jù)等信息,這些都為實(shí)時(shí)的流媒體傳輸提供了相應(yīng)的基礎(chǔ)。RTP協(xié)議的目的是提供實(shí)時(shí)數(shù)據(jù)(如交互式的音頻和視頻)的端到端傳輸服務(wù),因此在RTP中沒有連接的概念,它可以建立在底層的面向連接或面向非連接的傳輸協(xié)議之上;RTP也不依賴于特別的網(wǎng)絡(luò)地址格式,而僅僅只需要底層傳輸協(xié)議支持組幀(Framing)和分段(Segmentation)就足夠了;另外RTP本身還不提供任何可靠性機(jī)制,這些都要由傳輸協(xié)議或者應(yīng)用程序自己來保證。在典型的應(yīng)用場(chǎng)合下,RTP一般是在傳輸協(xié)議之上作為應(yīng)用程序的一部分加以實(shí)現(xiàn)的,

二、RTCP控制協(xié)議

RTCP控制協(xié)議需要與RTP數(shù)據(jù)協(xié)議一起配合使用,當(dāng)應(yīng)用程序啟動(dòng)一個(gè)RTP會(huì)話時(shí)將同時(shí)占用兩個(gè)端口,分別供RTP和RTCP使用。RTP本身并不能為按序傳輸數(shù)據(jù)包提供可靠的保證,也不提供流量控制和擁塞控制,這些都由RTCP來負(fù)責(zé)完成。通常RTCP會(huì)采用與RTP相同的分發(fā)機(jī)制,向會(huì)話中的所有成員周期性地發(fā)送控制信息,應(yīng)用程序通過接收這些數(shù)據(jù),從中獲取會(huì)話參與者的相關(guān)資料,以及網(wǎng)絡(luò)狀況、分組丟失概率等反饋信息,從而能夠?qū)Ψ?wù)質(zhì)量進(jìn)行控制或者對(duì)網(wǎng)絡(luò)狀況進(jìn)行診斷。

RTCP協(xié)議的功能是通過不同的RTCP數(shù)據(jù)報(bào)來實(shí)現(xiàn)的,主要有如下幾種類型:

?SR:發(fā)送端報(bào)告,所謂發(fā)送端是指發(fā)出RTP數(shù)據(jù)報(bào)的應(yīng)用程序或者終端,發(fā)送端同時(shí)也可以是接收端。

?RR:接收端報(bào)告,所謂接收端是指僅接收但不發(fā)送RTP數(shù)據(jù)報(bào)的應(yīng)用程序或者終端。

?SDES:源描述,主要功能是作為會(huì)話成員有關(guān)標(biāo)識(shí)信息的載體,如用戶名、郵件地址、電話號(hào)碼等,此外還具有向會(huì)話成員傳達(dá)會(huì)話控制信息的功能。

?BYE:通知離開,主要功能是指示某一個(gè)或者幾個(gè)源不再有效,即通知會(huì)話中的其他成員自己將退出會(huì)話。

?APP:由應(yīng)用程序自己定義,解決了RTCP的擴(kuò)展性問題,并且為協(xié)議的實(shí)現(xiàn)者提供了很大的靈活性。

RTCP數(shù)據(jù)報(bào)攜帶有服務(wù)質(zhì)量監(jiān)控的必要信息,能夠?qū)Ψ?wù)質(zhì)量進(jìn)行動(dòng)態(tài)的調(diào)整,并能夠?qū)W(wǎng)絡(luò)擁塞進(jìn)行有效的控制。由于RTCP數(shù)據(jù)報(bào)采用的是多播方式,因此會(huì)話中的所有成員都可以通過RTCP數(shù)據(jù)報(bào)返回的控制信息,來了解其他參與者的當(dāng)前情況。


在一個(gè)典型的應(yīng)用場(chǎng)合下,發(fā)送媒體流的應(yīng)用程序?qū)⒅芷谛缘禺a(chǎn)生發(fā)送端報(bào)告SR,該RTCP數(shù)據(jù)報(bào)含有不同媒體流間的同步信息,以及已經(jīng)發(fā)送的數(shù)據(jù)報(bào)和字節(jié)的計(jì)數(shù),接收端根據(jù)這些信息可以估計(jì)出實(shí)際的數(shù)據(jù)傳輸速率。另一方面,接收端會(huì)向所有已知的發(fā)送端發(fā)送接收端報(bào)告RR,該RTCP數(shù)據(jù)報(bào)含有已接收數(shù)據(jù)報(bào)的最大序列號(hào)、丟失的數(shù)據(jù)報(bào)數(shù)目、延時(shí)抖動(dòng)和時(shí)間戳等重要信息,發(fā)送端應(yīng)用根據(jù)這些信息可以估計(jì)出往返時(shí)延,并且可以根據(jù)數(shù)據(jù)報(bào)丟失概率和時(shí)延抖動(dòng)情況動(dòng)態(tài)調(diào)整發(fā)送速率,以改善網(wǎng)絡(luò)擁塞狀況,或者根據(jù)網(wǎng)絡(luò)狀況平滑地調(diào)整應(yīng)用程序的服務(wù)質(zhì)量。

三、RTSP實(shí)時(shí)流協(xié)議

作為一個(gè)應(yīng)用層協(xié)議,RTSP提供了一個(gè)可供擴(kuò)展的框架,它的意義在于使得實(shí)時(shí)流媒體數(shù)據(jù)的受控和點(diǎn)播變得可能??偟恼f來,RTSP是一個(gè)流媒體表示協(xié)議,主要用來控制具有實(shí)時(shí)特性的數(shù)據(jù)發(fā)送,但它本身并不傳輸數(shù)據(jù),而是必須依賴于下層傳輸協(xié)議所提供的某些服務(wù)。RTSP可以對(duì)流媒體提供諸如播放、暫停、快進(jìn)等操作,它負(fù)責(zé)定義具體的控制消息、操作方法、狀態(tài)碼等,此外還描述了與RTP間的交互操作。

由RTSP控制的媒體流集合可以用表示描述(Presentation Description)來定義,所謂表示是指流媒體服務(wù)器提供給客戶機(jī)的一個(gè)或者多個(gè)媒體流的集合,而表示描述則包含了一個(gè)表示中各個(gè)媒體流的相關(guān)信息,如數(shù)據(jù)編碼/解碼算法、網(wǎng)絡(luò)地址、媒體流的內(nèi)容等。雖然RTSP服務(wù)器同樣也使用標(biāo)識(shí)符來區(qū)別每一流連接會(huì)話(Session),但RTSP連接并沒有被綁定到傳輸層連接(如TCP等),也就是說在整個(gè) RTSP連接期間,RTSP用戶可打開或者關(guān)閉多個(gè)對(duì)RTSP服務(wù)器的可靠傳輸連接以發(fā)出RTSP請(qǐng)求。此外,RTSP連接也可以基于面向無連接的傳輸協(xié)議(如UDP等)。

RTSP協(xié)議目前支持以下操作:

?檢索媒體:允許用戶通過HTTP或者其它方法向媒體服務(wù)器提交一個(gè)表示描述。如表示是組播的,則表示描述就包含用于該媒體流的組播地址和端口號(hào);如果表示是單播的,為了安全在表示描述中應(yīng)該只提供目的地址。

?邀請(qǐng)加入:媒體服務(wù)器可以被邀請(qǐng)參加正在進(jìn)行的會(huì)議,或者在表示中回放媒體,或者在表示中錄制全部媒體或其子集,非常適合于分布式教學(xué)。

?添加媒體:通知用戶新加入的可利用媒體流,這對(duì)現(xiàn)場(chǎng)講座來講顯得尤其有用。RTSP請(qǐng)求也可以交由代理、通道或者緩存來進(jìn)行處理。

RTSP消息格式: RTSP的消息有兩大類,一是請(qǐng)求消息(request),一是回應(yīng)消息(response),兩種消息的格式不同.

請(qǐng)求消息:

方法 URI RTSP版本 CR LF

消息頭 CR LF CR LF

消息體 CR LF

其中方法包括OPTION回應(yīng)中所有的命令,URI是接受方的地址,例如 :

rtsp://192.168.20.136

RTSP版本一般都是 RTSP/1.0.每行后面的CR LF表示回車換行,需要接受端有相應(yīng)的解析,最后一個(gè)消息頭需要有兩個(gè)CR LF

回應(yīng)消息:

RTSP版本 狀態(tài)碼 解釋 CR LF

消息頭 CR LF CR LF

消息體 CR LF

其中RTSP版本一般都是RTSP/1.0,狀態(tài)碼是一個(gè)數(shù)值,200表示成功,解釋是與狀態(tài)碼對(duì)應(yīng)的文本解釋.


簡(jiǎn)單的rtsp交互過程: C表示rtsp客戶端,S表示rtsp服務(wù)端

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

1.S->C:OPTION response //S回應(yīng)信息中包括提供的所有可用方法

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

2.S->C:DESCRIBE response //S回應(yīng)媒體初始化描述信息,主要是sdp

3.C->S:SETUP request //設(shè)置會(huì)話的屬性,以及傳輸模式,提醒S建立會(huì)話

3.S->C:SETUP response //S建立會(huì)話,返回會(huì)話標(biāo)識(shí)符,以及會(huì)話相關(guān)信息

4.C->S:PLAY request //C請(qǐng)求播放

4.S->C:PLAY response //S回應(yīng)該請(qǐng)求的信息

S->C:發(fā)送流媒體數(shù)據(jù)

5.C->S:TEARDOWN request //C請(qǐng)求關(guān)閉會(huì)話

5.S->C:TEARDOWN response //S回應(yīng)該請(qǐng)求

上述的過程是標(biāo)準(zhǔn)的、友好的rtsp流程,但實(shí)際的需求中并不一定按部就班來。其中第3和4步是必需的!第一步,只要服務(wù)器客戶端約定好,有哪些方法可用,則option請(qǐng)求可以不要。第二步,如果我們有其他途徑得到媒體初始化描述信息(比如http請(qǐng)求等等),則我們也不需要通過rtsp中的describe請(qǐng)求來完成。第五步,可以根據(jù)系統(tǒng)需求的設(shè)計(jì)來決定是否需要。

rtsp中常用方法:

1.OPTION

目的是得到服務(wù)器提供的可用方法:

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

CSeq: 1 //每個(gè)消息都有序號(hào)來標(biāo)記,第一個(gè)包通常是option請(qǐng)求消息

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

服務(wù)器的回應(yīng)信息包括提供的一些方法,例如:

?RTSP/1.0 200 OK Server: UServer 0.9.7_rc1

Cseq: 1 //每個(gè)回應(yīng)消息的cseq數(shù)值和請(qǐng)求消息的cseq相對(duì)應(yīng)

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

2.DESCRIBE

C向S發(fā)起DESCRIBE請(qǐng)求,為了得到會(huì)話描述信息(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)

服務(wù)器回應(yīng)一些對(duì)此會(huì)話的描述信息(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表示媒體描述,下面是對(duì)會(huì)話中視頻通道的媒體描述

?a=rtpmap:96 MP4V-ES/90000

a=fmtp:96 profile-level-id=245; config=000001B0F5000001B509000001000000012000C888B0E0E0FA62D089028307 a=control:trackID=0//trackID=0表示視頻流用的是通道0

3.SETUP 客戶端提醒服務(wù)器建立會(huì)話,并確定傳輸模式:

?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,表示對(duì)該通道進(jìn)行設(shè)置。Transport參數(shù)設(shè)置了傳輸模式,包的結(jié)構(gòu)。接下來的數(shù)據(jù)包頭部第二個(gè)字節(jié)位置就是interleaved,它的值是每個(gè)通道都不同的,trackID=0的interleaved值有兩個(gè)0或1,0表示rtp包,1表示rtcp包,接受端根據(jù)interleaved的值來區(qū)別是哪種數(shù)據(jù)包。

服務(wù)器回應(yīng)信息:

?RTSP/1.0 200 OK Server: UServer 0.9.7_rc1 Cseq: 3 Session: 6310936469860791894

//服務(wù)器回應(yīng)的會(huì)話標(biāo)識(shí)符

Cache-Control: no-cache

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

4.PLAY 客戶端發(fā)送播放請(qǐng)求:

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

CSeq: 4

Session: 6310936469860791894

Range: npt=0.000- //設(shè)置播放時(shí)間的范圍

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

服務(wù)器回應(yīng)信息:

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包中的信息

5.TEARDOWN 客戶端發(fā)起關(guān)閉請(qǐng)求:

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)

服務(wù)器回應(yīng):

RTSP/1.0 200 OK

Server: UServer 0.9.7_rc1

Cseq: 5

Session: 6310936469860791894

Connection: Close

以上方法都是交互過程中最為常用的,其它還有一些重要的方法如 get/set_parameter,pause,redirect等等 ps: sdp的格式 v=o=s=i=u=e=p=c=b=:t=r=z=.... k=k=:a=a=:m=o = (所有者/創(chuàng)建者和會(huì)話標(biāo)識(shí)符)

s = (會(huì)話名稱)

i = * (會(huì)話信息)

u = * (URI 描述)

e = * (Email 地址)

p = * (電話號(hào)碼)

c = * (連接信息)

b = * (帶寬信息)

z = * (時(shí)間區(qū)域調(diào)整)

k = * (加密密鑰)

a = * (0 個(gè)或多個(gè)會(huì)話屬性行)

時(shí)間描述:

t = (會(huì)話活動(dòng)時(shí)間)

r = * (0或多次重復(fù)次數(shù))

媒體描述:

m = (媒體名稱和傳輸?shù)刂罚?/p>

i = * (媒體標(biāo)題)

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

b = * (帶寬信息)

k = * (加密密鑰)

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

RTSP點(diǎn)播消息流程實(shí)例(客戶端:VLC, RTSP服務(wù)器:LIVE555 Media Server)

1)C(Client)-> M(Media Server)

OPTIONS rtsp://192.168.1.109/1.mpg RTSP/1.0

CSeq: 1

user-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)

1)M -> C

RTSP/1.0 200 OK

CSeq: 1

Date: wed, Feb 20 2008 07:13:24 GMT

Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

2)C -> M

DESCRIBE rtsp://192.168.1.109/1.mpg RTSP/1.0

CSeq: 2

Accept: application/sdp

User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)

2)M -> C

RTSP/1.0 200 OK

CSeq: 2

Date: wed, Feb 20 2008 07:13:25 GMT

Content-Base: rtsp://192.168.1.109/1.mpg/

Content-type: application/sdp

Content-length: 447

v=0

o =- 2284269756 1 IN IP4 192.168.1.109

s=MPEG-1 or 2 program Stream, streamed by the LIVE555 Media Server

i=1.mpg

t=0 0

a=tool:LIVE555 Streaming Media v2008.02.08

a=type:broadcast

a=control:*

a=range:npt=0-66.181

a=x-qt-text-nam:MPEG-1 or Program Stream, streamed by the LIVE555 Media Server

a=x-qt-text-inf:1.mpg

m=video 0 RTP/AVP 32

c=IN IP4 0.0.0.0

a=control:track1

m=audio 0 RTP/AVP 14

c=IN IP4 0.0.0.0

a=control:track2

3)C -> M

SETUP rtsp://192.168.1.109/1.mpg/track1 RTSP/1.0

CSeq: 3

Transport: RTP/AVP; unicast;client_port=1112-1113

User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)

3)M -> C

RTSP/1.0 200 OK

CSeq: 3

Date: wed, Feb 20 2008 07:13:25 GMT

Transport: RTP/AVP;unicast;destination=192.168.1.222;source=192.168.1.109;client_port=1112-1113;server_port=6970-6971

Session: 3

4)C -> M

SETUP rtsp://192.168.1.109/1.mpg/track2 RTSP/1.0

CSeq: 4

Transport: RTP/AVP; unicast;client_port=1114-1115

Session: 3

User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)

4)M -> C

RTSP/1.0 200 OK

CSeq: 4

Date: wed, Feb 20 2008 07:13:25 GMT

Transport: RTP/AVP;unicast;destination=192.168.1.222;source=192.168.1.109;client_port=1114-1115;server_port=6972-6973

Session: 3

5)C -> M

PLAY rtsp://192.168.1.109/1.mpg/ RTSP/1.0

CSeq: 5

Session: 3

Range: npt=0.000-

User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)

5)M -> C

RTSP/1.0 200 OK

CSeq: 5

Range: npt=0.000-

Session: 3

RTP-Info: url=rtsp://192.168.1.109/1.mpg/track1;seq=9200;rtptime=214793785,url=rtsp://192.168.1.109/1.mpg/track2;seq=12770;rtptime=31721

(開始傳輸流媒體...)

一、整體框架圖

Android中基于NuPlayer的RTSP框架如下圖所示。

整個(gè)圖主要分為兩個(gè)部分,一部分是NuPlayer的架構(gòu),另一部分則是實(shí)現(xiàn)了基于RTSP的流媒體播放功能,即RTSPSource。當(dāng)然還有一些其他的Source,如圖中的HTTPLiveSource,還有圖中沒有畫出的GenericSource、StreamingSource等,他們是并列關(guān)系,實(shí)現(xiàn)了不同的播放功能。

二、NuPlayer架構(gòu)

1、NuPlayerDriver是對(duì)NuPlayer的封裝,與NuPlayerDriver處于并列位置的是StagefrightPlayer,他們都繼承MediaPlayerInterface接口。通過NuPlayer來實(shí)現(xiàn)播放的功能。

2、NuPlayer真正實(shí)現(xiàn)了播放的功能,通過各個(gè)Source的接口來得到數(shù)據(jù)流的信息和解碼數(shù)據(jù)本身。

三、RTSP功能實(shí)現(xiàn)架構(gòu)(重點(diǎn)中的重點(diǎn))

1、RTSPSource是NuPlayer架構(gòu)的Source,給NuPlayer輸送媒體所需數(shù)據(jù)信息和媒體數(shù)據(jù)。在整個(gè)NuPlayer架構(gòu)中,與RTSPSource并列的Source有HTTPLiveSource、GenericSource、StreamingSource,還有一個(gè)MP4Source,他們都繼承NuPlayer::Source。

2、MyHandler是RTSP的核心,其中包含ARTSPConnection和ARTPConnection兩大部分。MyHandler負(fù)責(zé)向Server端發(fā)送Request和處理Response,并負(fù)責(zé)將待解碼的媒體數(shù)據(jù)傳送給RTSPSource。

3、AnotherPacketSource在RTSPSource中作為mAudioTrack和mVideoTrack,他雖然繼承了MediaSource接口,但是并沒有使用read來讀數(shù)據(jù),而是通過dequeueAccessUnit接口來獲得數(shù)據(jù)。RTSPSource通過調(diào)用queueAccessUnit結(jié)構(gòu)將數(shù)據(jù)保存到這里。

4、ARTSPConnection負(fù)責(zé)維護(hù)RTSP的socket,發(fā)送Request,循環(huán)接收Server端數(shù)據(jù),響應(yīng)Server的Request。這里只是接收Response,真正的處理在MyHandler里。

5、ARTPConnection負(fù)責(zé)維護(hù)RTP和RTCP的socket,接收RTP和RTCP包,周期性發(fā)送RTCP包。需要說明的一點(diǎn)是,如果傳輸RTP和RTCP數(shù)據(jù)使用的是TCP,那么會(huì)共用RTSP的socket;如果用的是UDP,那么針對(duì)每個(gè)stream都會(huì)創(chuàng)建兩個(gè)socket,一個(gè)用于傳輸RTP數(shù)據(jù),一個(gè)用于傳輸RTCP數(shù)據(jù)。

6、ARTPSource,每個(gè)RTP數(shù)據(jù)流都有一個(gè)ARTPSource,后者會(huì)創(chuàng)建一個(gè)ARTPAssembler。依據(jù)處理數(shù)據(jù)流的壓縮格式,實(shí)例化對(duì)應(yīng)格式的Assembler。在ARTPSource中實(shí)現(xiàn)的一個(gè)最主要而且重要的功能就是根據(jù)SeqNum對(duì)RTP包進(jìn)行排序。

7、ARTPAssembler對(duì)ARTPConnection接收到的數(shù)據(jù)進(jìn)行處理,說的簡(jiǎn)單一點(diǎn)就將接收到的媒體數(shù)據(jù)進(jìn)行重組,以滿足解碼器的要求。如AVC數(shù)據(jù),他會(huì)把單一NAL,NAL分片和復(fù)合NAL分別處理后,都以單獨(dú)NAL的形式回調(diào)傳給RTSPSource,存放在AnotherPacketSource中,供decoder端使用。目前支持的Assembler有一下幾種,他們都繼承ARTPAssembler。

(1)AAVCAssembler

(2)AMPEG4AudioAssembler

(3)AH263Assembler

(4)AAMRAssembler

(5)AMPEG4ElementaryAssembler

(6)ARawAudioAssembler

(7)AMPEG2TSAssembler

8、APacketSource用來包存和設(shè)置每個(gè)stream的屬性。針對(duì)每個(gè)stream都會(huì)創(chuàng)建一個(gè)APacketSource

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容