----------------------------------------轉(zhuǎn)載請(qǐng)注明出處http://blog.csdn.net/tjy1985/article/details/7996121------------------------------------------------------- 從這篇開始我們將進(jìn)入流媒體的環(huán)節(jié),,流媒體在android中有nuplayer來實(shí)現(xiàn)的,,在開始講解android流媒體前,我們先來講講流媒體傳輸協(xié)議,,了解了基本協(xié)議,,我們?cè)诳创a的過程中,就會(huì)有事半功倍的效果,。我們將主要講解RTSP,,HTTP,HTTPS, SDP四種協(xié)議。 一:RTSP協(xié)議簡(jiǎn)介 RTSP協(xié)議一般與RTP/RTCP和RSVP等底層協(xié)議一起協(xié)同工作,提供基于Internet的整套的流服務(wù),。它可以選擇發(fā)送通道(例如:UDP,、組播UDP和TCP)和基于RTP的發(fā)送機(jī)制。它可以應(yīng)用于組播和點(diǎn)播,。RTP, RTCP,RSVP 定義如下: 1. 實(shí)時(shí)傳輸協(xié)議RTP(Real-time Transport protocol) RTSP協(xié)議機(jī)理: 客戶機(jī)在向視頻服務(wù)器請(qǐng)求視頻服務(wù)之前,,首先通過HTTP協(xié)議從Web服務(wù)器獲取所請(qǐng)求視頻服務(wù)的演示描述(Presentation description )文件,在RTSP中,,每個(gè)演示(Presentation)及其所對(duì)應(yīng)的媒體流都由一個(gè)RTSP URL標(biāo)識(shí),。整個(gè)演示及媒體特性都在一個(gè)演示描述(Presentation description )文件中定義,該文件可能包括媒體編碼方式,、語言,、RTSP URLs、目標(biāo)地址,、端口及其它參數(shù),。用戶在向服務(wù)器請(qǐng)求某個(gè)連續(xù)媒體流的服務(wù)之前,必須首先從服務(wù)器獲得該媒體流的演示描述(Presentation description )文件以得到必需的參數(shù),,演示描述文件的獲取可采用HTTP,、email或其他方法。利用該文件提供的信息定位視頻服務(wù)地址(包括視頻服務(wù)器地址和端口號(hào))及視頻服務(wù)的編碼方式等信息,。然后客戶機(jī)根據(jù)上述信息向視頻服務(wù)器請(qǐng)求視頻服務(wù),。視頻服務(wù)初始化完畢,視頻服務(wù)器為該客戶建立一個(gè)新的視頻服務(wù)流,,客戶端與服務(wù)器運(yùn)行實(shí)時(shí)流控制協(xié)議RTSP,,以對(duì)該流進(jìn)行各種VCR控制信號(hào)的交換,如播放(PLAY)、停止(PAUSE),、快進(jìn),、快退等。當(dāng)服務(wù)完畢,,客戶端提出拆線(TEARDOWN)請(qǐng)求,。服務(wù)器使用RTP/UDP協(xié)議將媒體數(shù)據(jù)傳輸給客戶端,一旦數(shù)據(jù)抵達(dá)客戶端,,客戶端應(yīng)用程序即可播放輸出,。在流式傳輸中,使用RTP/RTCP/UDP和RTSP/TCP兩種不同的通信協(xié)議在客戶端和服務(wù)器間建立聯(lián)系,。如下圖:
RSTP 一些基本方法及用途: OPTIONS 獲得有效方法 SETUP 建立傳輸 ANNOUNCE 改變媒體文件的類型 DESCRIBE 獲得媒體文件的類型 PLAY 播放 RECORD 刻錄 REDIRECT 轉(zhuǎn)換客戶端到新的服務(wù)器 PAUSE 暫停 SET PARAMETER 設(shè)置設(shè)備,,編碼等參數(shù) TEARDOWN 移除狀態(tài)
完整的播放過程: GET 過程: C->W: GET /twister.sdp HTTP/1.1 Host: www.example.com Accept: application/sdp W->C: HTTP/1.0 200 OK Content-Type: application/sdp v=0 o=- 2890844526 2890842807 IN IP4 192.16.24.202 s=RTSP Session m=audio 0 RTP/AVP 0 a=control:rtsp://audio.com/twister/audio.en m=video 0 RTP/AVP 31 a=control:rtsp://video.com/twister/video SETUP過程: C->A(audio): SETUP rtsp://audio.com/twister/audio.en RTSP/1.0 CSeq: 1 Transport: RTP/AVP/UDP;unicast ;client_port=3056-3057 A->C: RTSP/1.0 200 OK CSeq: 1 Session: 12345678 Transport: RTP/AVP/UDP;unicast ;client_port=3056-3057; ;server_port=5000-5001 C->V(video): SETUP rtsp://video.com/twister/video RTSP/1.0 CSeq: 1 Transport: RTP/AVP/UDP;unicast ;client_port=3058-3059
V->C: RTSP/1.0 200 OK CSeq: 1 Session: 23456789 Transport: RTP/AVP/UDP;unicast ;client_port=3058-3059 ;server_port=5002-5003
PLAY 過程: C->V: PLAY rtsp://video.com/twister/video RTSP/1.0 CSeq: 2 Session: 23456789 Range: smpte=0:10:00- V->C: RTSP/1.0 200 OK CSeq: 2 Session: 23456789 Range: smpte=0:10:00-0:20:00 RTP-Info: url=rtsp://video.com/twister/video ;seq=12312232;rtptime=78712811 C->A: PLAY rtsp://audio.com/twister/audio.en RTSP/1.0 CSeq: 2 Session: 12345678 Range: smpte=0:10:00-
A->C: RTSP/1.0 200 OK CSeq: 2 Session: 12345678 Range: smpte=0:10:00-0:20:00 RTP-Info: url=rtsp://audio.com/twister/audio.en ;seq=876655;rtptime=1032181 C->A: TEARDOWN rtsp://audio.com/twister/audio.en RTSP/1.0 CSeq: 3 Session: 12345678 A->C: RTSP/1.0 200 OK CSeq: 3 C->V: TEARDOWN rtsp://video.com/twister/video RTSP/1.0 CSeq: 3 Session: 23456789 V->C: RTSP/1.0 200 OK CSeq: 3 關(guān)于RTSP的一些時(shí)間概念:
normal play time (NPT): seconds, microseconds MPTE timestamps (seconds, frames) absolute time (for live events) 2:HTTP協(xié)議的幾個(gè)重要概念 3:建立連接的方式 HTTP支持2中建立連接的方式:非持久連接和持久連接(HTTP1.1默認(rèn)的連接方式為持久連接),。 1) 非持久連接 讓我們查看一下非持久連接情況下從服務(wù)器到客戶傳送一個(gè)Web頁面的步驟,。假設(shè)該貝面由1個(gè)基本HTML文件和10個(gè)JPEG圖像構(gòu)成,而且所有這些對(duì)象都存放在同一臺(tái)服務(wù)器主機(jī)中,。再假設(shè)該基本HTML文件的URL為:gpcuster.cnblogs.com/index.html,。 下面是具體步騾: 1.HTTP客戶初始化一個(gè)與服務(wù)器主機(jī)gpcuster.cnblogs.com中的HTTP服務(wù)器的TCP連接。HTTP服務(wù)器使用默認(rèn)端口號(hào)80監(jiān)聽來自HTTP客戶的連接建立請(qǐng)求,。 2.HTTP客戶經(jīng)由與TCP連接相關(guān)聯(lián)的本地套接字發(fā)出—個(gè)HTTP請(qǐng)求消息,。這個(gè)消息中包含路徑名/somepath/index.html。 3.HTTP服務(wù)器經(jīng)由與TCP連接相關(guān)聯(lián)的本地套接字接收這個(gè)請(qǐng)求消息,,再從服務(wù)器主機(jī)的內(nèi)存或硬盤中取出對(duì)象/somepath/index.html,,經(jīng)由同一個(gè)套接字發(fā)出包含該對(duì)象的響應(yīng)消息。 4.HTTP服務(wù)器告知TCP關(guān)閉這個(gè)TCP連接(不過TCP要到客戶收到剛才這個(gè)響應(yīng)消息之后才會(huì)真正終止這個(gè)連接),。 5.HTTP客戶經(jīng)由同一個(gè)套接字接收這個(gè)響應(yīng)消息,。TCP連接隨后終止。該消息標(biāo)明所封裝的對(duì)象是一個(gè)HTML文件,??蛻魪闹腥〕鲞@個(gè)文件,加以分析后發(fā)現(xiàn)其中有10個(gè)JPEG對(duì)象的引用,。 6.給每一個(gè)引用到的JPEG對(duì)象重復(fù)步騾1-4,。 上述步驟之所以稱為使用非持久連接,原因是每次服務(wù)器發(fā)出一個(gè)對(duì)象后,,相應(yīng)的TCP連接就被關(guān)閉,,也就是說每個(gè)連接都沒有持續(xù)到可用于傳送其他對(duì)象。每個(gè)TCP連接只用于傳輸一個(gè)請(qǐng)求消息和一個(gè)響應(yīng)消息,。就上述例子而言,,用戶每請(qǐng)求一次那個(gè)web頁面,,就產(chǎn)生11個(gè)TCP連接。 2) 持久連接 非持久連接有些缺點(diǎn),。首先,,客戶得為每個(gè)待請(qǐng)求的對(duì)象建立并維護(hù)一個(gè)新的連接。對(duì)于每個(gè)這樣的連接,,TCP得在客戶端和服務(wù)器端分配TCP緩沖區(qū),,并維持TCP變量。對(duì)于有可能同時(shí)為來自數(shù)百個(gè)不同客戶的請(qǐng)求提供服務(wù)的web服務(wù)器來說,,這會(huì)嚴(yán)重增加其負(fù)擔(dān)。其次,,如前所述,,每個(gè)對(duì)象都有2個(gè)RTT的響應(yīng)延長(zhǎng)——一個(gè)RTT用于建立TCP連接,另—個(gè)RTT用于請(qǐng)求和接收對(duì)象,。最后,,每個(gè)對(duì)象都遭受TCP緩啟動(dòng),因?yàn)槊總€(gè)TCP連接都起始于緩啟動(dòng)階段,。不過并行TCP連接的使用能夠部分減輕RTT延遲和緩啟動(dòng)延遲的影響,。 在持久連接情況下,服務(wù)器在發(fā)出響應(yīng)后讓TCP連接繼續(xù)打開著,。同一對(duì)客戶/服務(wù)器之間的后續(xù)請(qǐng)求和響應(yīng)可以通過這個(gè)連接發(fā)送,。整個(gè)Web頁面(上例中為包含一個(gè)基本HTMLL文件和10個(gè)圖像的頁面)自不用說可以通過單個(gè)持久TCP連接發(fā)送:甚至存放在同一個(gè)服務(wù)器中的多個(gè)web頁面也可以通過單個(gè)持久TCP連接發(fā)送。通常,,HTTP服務(wù)器在某個(gè)連接閑置一段特定時(shí)間后關(guān)閉它,,而這段時(shí)間通常是可以配置的。持久連接分為不帶流水線(without pipelining)和帶流水線(with pipelining)兩個(gè)版本,。如果是不帶流水線的版本,,那么客戶只在收到前一個(gè)請(qǐng)求的響應(yīng)后才發(fā)出新的請(qǐng)求。這種情況下,,web頁面所引用的每個(gè)對(duì)象(上例中的10個(gè)圖像)都經(jīng)歷1個(gè)RTT的延遲,,用于請(qǐng)求和接收該對(duì)象。與非持久連接2個(gè)RTT的延遲相比,,不帶流水線的持久連接已有所改善,,不過帶流水線的持久連接還能進(jìn)一步降低響應(yīng)延遲。不帶流水線版本的另一個(gè)缺點(diǎn)是,,服務(wù)器送出一個(gè)對(duì)象后開始等待下一個(gè)請(qǐng)求,,而這個(gè)新請(qǐng)求卻不能馬上到達(dá)。這段時(shí)間服務(wù)器資源便閑置了,。 HTTP/1.1的默認(rèn)模式使用帶流水線的持久連接,。這種情況下,,HTTP客戶每碰到一個(gè)引用就立即發(fā)出一個(gè)請(qǐng)求,因而HTTP客戶可以一個(gè)接一個(gè)緊挨著發(fā)出各個(gè)引用對(duì)象的請(qǐng)求,。服務(wù)器收到這些請(qǐng)求后,,也可以一個(gè)接一個(gè)緊挨著發(fā)出各個(gè)對(duì)象。如果所有的請(qǐng)求和響應(yīng)都是緊挨著發(fā)送的,,那么所有引用到的對(duì)象一共只經(jīng)歷1個(gè)RTT的延遲(而不是像不帶流水線的版本那樣,,每個(gè)引用到的對(duì)象都各有1個(gè)RTT的延遲)。另外,,帶流水線的持久連接中服務(wù)器空等請(qǐng)求的時(shí)間比較少,。與非持久連接相比,持久連接(不論是否帶流水線)除降低了1個(gè)RTT的響應(yīng)延遲外,,緩啟動(dòng)延遲也比較小,。其原因在于既然各個(gè)對(duì)象使用同一個(gè)TCP連接,服務(wù)器發(fā)出第一個(gè)對(duì)象后就不必再以一開始的緩慢速率發(fā)送后續(xù)對(duì)象,。相反,,服務(wù)器可以按照第一個(gè)對(duì)象發(fā)送完畢時(shí)的速率開始發(fā)送下一個(gè)對(duì)象。 4: 緩存的機(jī)制 HTTP/1.1中緩存的目的是為了在很多情況下減少發(fā)送請(qǐng)求,,同時(shí)在許多情況下可以不需要發(fā)送完整響應(yīng),。前者減少了網(wǎng)絡(luò)回路的數(shù)量;HTTP利用一個(gè)“過期(expiration)”機(jī)制來為此目的,。后者減少了網(wǎng)絡(luò)應(yīng)用的帶寬,;HTTP用“驗(yàn)證(validation)”機(jī)制來為此目的。具體可以參考: http://www./tech/cache_docs.html
三 RTSP協(xié)議與HTTP協(xié)議的聯(lián)系與區(qū)別
四 HTTPS傳輸協(xié)議 HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協(xié)議,,它是一個(gè)安全通信通道,,它基于HTTP開發(fā),用于在客戶計(jì)算機(jī)和服務(wù)器之間交換信息,。它使用安全套接字層(SSL)進(jìn)行信息交換,,簡(jiǎn)單來說它是HTTP的安全版,。 HTTPS和HTTP的區(qū)別: 1:http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443,。 HTTPS解決的問題:
五 SDP協(xié)議 SDP會(huì)話描述協(xié)議:為會(huì)話通知,、會(huì)話邀請(qǐng)和其它形式的多媒體會(huì)話初始化等目的提供了多媒體會(huì)話描述,。會(huì)話目錄用于協(xié)助多媒體會(huì)議的通告,并為會(huì)話參與者傳送相關(guān)設(shè)置信息,。 SDP 即用于將這種信息傳輸?shù)浇邮斩恕?SDP 完全是一種會(huì)話描述格式――它不屬于傳輸協(xié)議 ――它只使用不同的適當(dāng)?shù)膫鬏攨f(xié)議,,包括會(huì)話通知協(xié)議 (SAP) 、會(huì)話初始協(xié)議(SIP),、實(shí)時(shí)流協(xié)議 (RTSP),、 MIME 擴(kuò)展協(xié)議的電子郵件以及超文本傳輸協(xié)議 (HTTP)。SDP 的設(shè)計(jì)宗旨是通用性,,它可以應(yīng)用于大范圍的網(wǎng)絡(luò)環(huán)境和應(yīng)用程序,,而不僅僅局限于組播會(huì)話目錄。 SDP是會(huì)話描述協(xié)議的縮寫,,是描述流媒體初始化參數(shù)的格式,,由IETF作為RFC 4566頒布。流媒體是指在傳輸過程中看到或聽到的內(nèi)容,,SDP包通常包括以下信息: (1)會(huì)話信息· 會(huì)話名和目的 · 會(huì)話活動(dòng)時(shí)間 由于參與會(huì)話的資源是受限制的,,因此包括以下附加信息是非常有用的 · 會(huì)話使用的帶寬信息 · 會(huì)話負(fù)責(zé)人的聯(lián)系信息 (2)媒體信息 · 媒體類型,,例如視頻和音頻 · 傳輸協(xié)議,例如RTP/UDP/IP和H.320,。 · 多播地址和媒體傳輸端口(IP多播會(huì)話) · 用于聯(lián)系地址的媒體和傳輸端口的遠(yuǎn)端地址(IP單播會(huì)話) SDP描述由許多文本行組成,,文本行的格式為<類型>=<值>,<類型>是一個(gè)字母,,<值>是結(jié)構(gòu)化的文本串,,其格式依<類型>而定。 SDP格式(帶*為可選): Session description v= (protocol version) //該行指示協(xié)議的版本 o= (owner/creator and session identifier) 例如: o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4 //o行中包含與會(huì)話所有者有關(guān)的參數(shù)(1:第一個(gè)參數(shù)表明會(huì)話發(fā)起者的名稱,,該參數(shù)可不填寫,,如填寫和SIP消息中,from消息頭的內(nèi)容一致:2:第二個(gè)參數(shù)為主叫方的會(huì)話標(biāo)識(shí)符:3:第三個(gè)參數(shù)為主叫方會(huì)話的版本,,會(huì)話數(shù)據(jù)有改變時(shí),,版本號(hào)遞增:4:第四個(gè)參數(shù)定義了網(wǎng)絡(luò)類型,IN表示Internet網(wǎng)絡(luò)類型,,目前僅定義該網(wǎng)絡(luò)類型:5:第五個(gè)參數(shù)為地址類型,,目前支持IPV4和IPV6兩種地址類型:6:第六個(gè)參數(shù)為地址:表明會(huì)話發(fā)起者的IP地址,該地址為信令面的IP地址,,信令PDP激活時(shí)為手機(jī)分配,。) s= (session name) //表明本次會(huì)話的標(biāo)題,或會(huì)話的名稱 i=* (session information) u=* (URI of description) e=* (email address) p=* (phone number) c=* (connection information - not required if included in all media) b=* (zero or more bandwidth information lines) One or more time descriptions ("t=" and "r=" lines, see below) z=* (time zone adjustments) k=* (encryption key) a=* (zero or more session attribute lines) Zero or more media descriptions Time description t= (time the session is active) r=* (zero or more repeat times) Media description, if present m= (media name and transport address) 例如: m=audio 3458 RTP/AVP 0 96 97 // m行又稱媒體行,,描述了發(fā)送方所支持的媒體類型等信息(1: 第一個(gè)參數(shù)為媒體名稱:表明支持音頻類型,。2: 第二個(gè)參數(shù)為端口號(hào),表明UE在本地端口為3458上發(fā)送音頻流,。3: 第三個(gè)參數(shù)為傳輸協(xié)議,,一般為RTP/AVP協(xié)議。4:四-七參數(shù)為所支持的四種凈荷類型編號(hào)) m=video 3400 RTP/AVP 98 99 //m行又稱媒體行,,描述了發(fā)送方所支持的媒體類型等信息 i=* (media title) c=* (connection information - optional if included at session-level) b=* (zero or more bandwidth information lines) k=* (encryption key) a=* (zero or more media attribute lines)
參考文檔: |
|