轉(zhuǎn)自:http://tech./167/a490677.html 隨著互聯(lián)網(wǎng)的飛速發(fā)展,流媒體技術(shù)的應(yīng)用越來越廣泛,從網(wǎng)上廣播,、電影播放到遠程教學(xué)以及在線的新聞網(wǎng)站等都用到了流媒體技術(shù)。但現(xiàn)有公開文獻所報道的大多是利用現(xiàn)有的流媒體服務(wù)器來搭建一個流媒體服務(wù)系統(tǒng),,或者是針對流媒體數(shù)據(jù)的編碼方式所進行的研究,。本文對流媒體服務(wù)器技術(shù)的研究重點在于如何建立一個服務(wù)器,并且在實現(xiàn)流媒體傳輸?shù)膬蓚€基本協(xié)議RTP/RTCP的基礎(chǔ)上構(gòu)建一個基本的流媒體服務(wù)器,。 2流媒體技術(shù)簡介 2.1“流”的定義 現(xiàn)在網(wǎng)上傳輸視頻,、音頻主要有下載(Download)和流式傳輸(Streaming)兩種方式。流式傳輸是連續(xù)傳送視/音頻信號,,當(dāng)流媒體在客戶機播放時其余部分在后臺繼續(xù)下載,。流式傳輸有順序流式傳輸(ProgressiveStreaming)和實時流式傳輸(RealtimeStreaming)兩種方式。實時流式傳輸是實時傳送,,特別適合現(xiàn)場事件,,實時流式傳輸必須匹配連接帶寬,這意味著圖像質(zhì)量會因網(wǎng)絡(luò)速度降低而變差,以減少對傳輸帶寬的需求,?!皩崟r”的概念是指在一個應(yīng)用中數(shù)據(jù)的交付必須與數(shù)據(jù)的產(chǎn)生保持精確的時間關(guān)系。 在Internet中使用流式傳輸技術(shù)的連續(xù)時基媒體就稱為流媒體,,通常也將其視頻與音頻稱為視頻流和音頻流,。實現(xiàn)流式傳輸一般都需要專用服務(wù)器和播放器。 2.2流媒體系統(tǒng)組件 流媒體是由各種不同軟件構(gòu)成的,,這些軟件在各個不同層面上互相通信,,基本的流媒體系統(tǒng)包含以下3個組件: 播放器(Player),用來播放流媒體的軟件,。 服務(wù)器(Server),,用來向用戶發(fā)送流媒體的軟件。 編碼器(Encode),,用來將原始的音頻視頻轉(zhuǎn)化為流媒體格式的軟件,。 這些組件之間通過特定的協(xié)議互相通信,按照特定的格式互相交換文件數(shù)據(jù),。有些文件中包含了由特定編解碼器解碼的數(shù)據(jù),,這種編解碼器通過特定算法壓縮文件的數(shù)據(jù)量。 3流媒體服務(wù)器的基本功能和服務(wù)方式 3.1流媒體服務(wù)器的主要功能 (1)響應(yīng)客戶的請求,,把媒體數(shù)據(jù)傳送給客戶,。流媒體服務(wù)器在流媒體傳送期間必須與客戶的播放器保持雙向通信(這種通信是必需的,,因為客戶可能隨時暫停或快放一個文件),。 (2)響應(yīng)廣播的同時能夠及時處理新接收的實時廣播數(shù)據(jù),,并將其編碼。 (3)可提供其他額外功能,,如:數(shù)字權(quán)限管理(DRM),,插播廣告,分割或鏡像其他服務(wù)器的流,,還有組播,。 3.2流媒體服務(wù)器的服務(wù)方式 (1)單播。在客戶端與媒體服務(wù)器之間建立一個單獨的數(shù)據(jù)通道,,從1臺服務(wù)器送出的每個數(shù)據(jù)包只能傳送給1個客戶機,。 (2)組播。在以組播技術(shù)構(gòu)建的網(wǎng)絡(luò)上,,允許路由器一次將數(shù)據(jù)包復(fù)制到多個通道上,。 (3)點播與廣播。點播連接是客戶端與服務(wù)器之間的主動的連接,,在點播連接中,,用戶通過選擇內(nèi)容項目來初始化客戶端連接,用戶可以開始,、停止,、后退、快進或暫停流,。廣播指的是用戶被動地接收流,,在廣播過程中,,數(shù)據(jù)包的單獨一個拷貝將發(fā)送給網(wǎng)絡(luò)上的所有用戶,,客戶端接收流,但不能控制流,。 4構(gòu)建流媒體服務(wù)器 4.1RTP/RTCP協(xié)議簡介 實時傳輸協(xié)議RTP(RealtimeTransportProtocol):是針對Internet上多媒體數(shù)據(jù)流的一個傳輸協(xié)議,由IETF(Internet工程任務(wù)組)作為RFC1889發(fā)布,。RTP被定義為在一對一或一對多的傳輸情況下工作,其目的是提供時間信息和實現(xiàn)流同步,。RTP的典型應(yīng)用建立在UDP上,,但也可以在TCP或ATM等其他協(xié)議之上工作。RTP本身只保證實時數(shù)據(jù)的傳輸,,并不能為按順序傳送數(shù)據(jù)包提供可靠的傳送機制,,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務(wù),。 實時傳輸控制協(xié)議RTCP(RealtimeTransportControlProtocol):負責(zé)管理傳輸質(zhì)量在當(dāng)前應(yīng)用進程之間交換控制信息,。在RTP會話期間,,各參與者周期性地傳送RTCP包,包中含有已發(fā)送的數(shù)據(jù)包的數(shù)量,、丟失的數(shù)據(jù)包的數(shù)量等統(tǒng)計資料,,因此,服務(wù)器可以利用這些信息動態(tài)地改變傳輸速率,,甚至改變有效載荷類型,。RTP和RTCP配合使用,能以有效的反饋和最小的開銷使傳輸效率最佳化,,故特別適合傳送網(wǎng)上的實時數(shù)據(jù),。 RTCP主要有4個功能: (1)用反饋信息的方法來提供分配數(shù)據(jù)的傳送質(zhì)量,這種反饋可以用來進行流量的擁塞控制,,也可以用來監(jiān)視網(wǎng)絡(luò)和用來診斷網(wǎng)絡(luò)中的問題; (2)為RTP源提供一個永久性的CNAME(規(guī)范性名字)的傳送層標志,,因為在發(fā)現(xiàn)沖突或者程序更新重啟時SSRC(同步源標識)會變,需要一個運作痕跡,,在一組相關(guān)的會話中接收方也要用CNAME來從一個指定的與會者得到相聯(lián)系的數(shù)據(jù)流(如音頻和視頻); (3)根據(jù)與會者的數(shù)量來調(diào)整RTCP包的發(fā)送率; (4)傳送會話控制信息,,如可在用戶接口顯示與會者的標識,這是可選功能,。 4.2RTP/RTCP工作過程 工作時,,RTP協(xié)議從上層接收流媒體信息碼流(如H.263),裝配成RTP數(shù)據(jù)包發(fā)送給下層,,下層協(xié)議提供RTP和RTCP的分流,。如在UDP中,RTP使用一個偶數(shù)號端口,,則相應(yīng)的RTCP使用其后的奇數(shù)號端口,。RTP數(shù)據(jù)包沒有長度限制,它的最大包長只受下層協(xié)議的限制,。 4.3服務(wù)器的算法 服務(wù)器軟件模型主要有兩種,,即并發(fā)服務(wù)器和循環(huán)服務(wù)器。循環(huán)服務(wù)器(IterativeServer)是指在一個時刻只處理一個請求的服務(wù)器,。 并發(fā)服務(wù)器(ConcurrentServer)是指在一個時刻可以處理多個請求的服務(wù)器,。事實上,多數(shù)服務(wù)器沒有用于同時處理多個請求的冗余設(shè)備,,而是提供一種表面上的并發(fā)性,,方法是依靠執(zhí)行多個線程,每個線程處理一個請求,,從客戶的角度看,,服務(wù)器就像在并發(fā)地與多個客戶通信。 由于流媒體服務(wù)時間的不定性和數(shù)據(jù)交互實時性的請求,,流媒體服務(wù)器一般采用并發(fā)服務(wù)器算法,。本文構(gòu)建了一個基本的流媒體服務(wù)器,,能夠同時響應(yīng)多個用戶的請求,把本地硬盤流媒體文件或?qū)崟r數(shù)據(jù)流(H.263格式)發(fā)送給用戶,。在應(yīng)用中,,把客戶分為請求實時數(shù)據(jù)的實時客戶和請求文件數(shù)據(jù)的文件客戶兩類。主要算法為: (1)打開設(shè)備,,分配資源,。當(dāng)設(shè)備準備好時,創(chuàng)建一個RTP實時服務(wù)線程和一個RTCP實時服務(wù)線程,。 (2)創(chuàng)建一個UDP套接字并將其綁定到所提供服務(wù)的地址之上,。 (3)反復(fù)調(diào)用接收模塊,接收來自客戶的RTCP報告,,根據(jù)其類型做出響應(yīng),。對新實時客戶的請求,把客戶地址添加到實時服務(wù)的客戶列表中,,對新文件客戶的請求,,則創(chuàng)建一個新RTP文件服務(wù)線程和一個新RTCP文件服務(wù)線程;對已經(jīng)在服務(wù)中的客戶則根據(jù)RTCP報告的內(nèi)容調(diào)整服務(wù)。 RTP實時服務(wù)線程1:初始化客戶列表和RTP首部,。 RTP實時服務(wù)線程2:從設(shè)備讀取媒體數(shù)據(jù),,把數(shù)據(jù)發(fā)送給實時服務(wù)列表中的客戶。 RTP實時服務(wù)線程3:更新RTP首部和統(tǒng)計數(shù)據(jù),。 RTP實時服務(wù)線程4:計算延時,,重復(fù)第二步。 RTCP實時服務(wù)線程1:初始化RTCP首部,。 RTCP實時服務(wù)線程2:發(fā)送發(fā)送方報告給實時服務(wù)列表中的客戶,。 RTCP實時服務(wù)線程3:計算延時,重復(fù)第二步,。 RTP文件服務(wù)線程1:初始化RTP首部,。 RTP文件服務(wù)線程2.:從文件讀取媒體數(shù)據(jù),把數(shù)據(jù)發(fā)送給客戶,。 RTP文件服務(wù)線程3:更新已發(fā)送數(shù)據(jù)的統(tǒng)計信息,,為生成發(fā)送方報告做準備,。 RTP文件服務(wù)線程4:計算延時,,調(diào)整發(fā)送速度,正常情況下開始重復(fù)第二步,。 RTCP文件服務(wù)線程1:初始化RTCP首部,,發(fā)送一個源描述(SDES)報文給客戶。 RTCP文件服務(wù)線程2:根據(jù)已發(fā)送數(shù)據(jù)的統(tǒng)計信息生成發(fā)送方報告,,發(fā)送給客戶,。 RTCP文件服務(wù)線程3:計算延時,,正常情況下開始重復(fù)第一步。 5流媒體服務(wù)器實現(xiàn)中應(yīng)注意的問題 5.1會話和流的兩級分用 一個RTP會話(Session)包括傳給某個指定目的地對(DestinationPair)的所有通信量,,發(fā)送方可能包括多個,。 而從同一個同步源發(fā)出的RTP分組序列稱為流(Stream),一個RTP會話可能包含多個RTP流。一個RTP分組在服務(wù)器端發(fā)送出去的時候總是要指定屬于哪個會話和流,,在接收時也需要進行兩級分用,,即會話分用和流分用。只有當(dāng)RTP使用同步源標識(SSRC)和分組類型(PTYPE)把同一個流中的分組組合起來,,才能夠使用序列號(SequenceNumber)和時間戳(Timestamp)對分組進行排序和正確回放,。 并發(fā)服務(wù)器模式要求用多線程來提供服務(wù),所以多線程的管理十分重要,。在本文構(gòu)建的服務(wù)器中,,不同客戶的請求和反饋都由服務(wù)器的主線程處理,由于實時數(shù)據(jù)的獨有性,,不同實時客戶可以共用一個RTP實時服務(wù)線程和一個RTCP實時服務(wù)線程,,這樣可以大大減小服務(wù)器的負擔(dān),而每個文件客戶由于請求的文件不同,,相應(yīng)地對速度和開始時間的要求都可能不同,,所以需要有自己獨有的RTP文件服務(wù)線程和RTCP文件服務(wù)線程。 RTP服務(wù)線程負責(zé)把實時數(shù)據(jù)流發(fā)送給客戶,,RTCP服務(wù)線程根據(jù)RTP線程的統(tǒng)計數(shù)據(jù),,產(chǎn)生發(fā)送方報告給客戶。RTP線程和RTCP線程之間通過一段共享內(nèi)存交互統(tǒng)計數(shù)據(jù),,對共享內(nèi)存必須設(shè)置互斥體進行保護,,防止出現(xiàn)錯誤讀寫。在這種方式下,,服務(wù)器可以根據(jù)每個用戶的不同請求和具體情況方便地提供不同的服務(wù),。 5.3時間戳的處理 時間戳字段是RTP首部中說明數(shù)據(jù)包時間的同步信息,是數(shù)據(jù)能以正確的時間順序恢復(fù)的關(guān)鍵,。時間戳的值給出了分組中數(shù)據(jù)的第一個字節(jié)的采樣時間(SamplingInstant),,要求發(fā)送方時間戳的時鐘是連續(xù)、單調(diào)增長的,,即使在沒有數(shù)據(jù)輸入或發(fā)送數(shù)據(jù)時也是如此,。在靜默時,發(fā)送方不必發(fā)送數(shù)據(jù),,保持時間戳的增長,,在接收端,由于接收到的數(shù)據(jù)分組的序號沒有丟失,,就知道沒有發(fā)生數(shù)據(jù)丟失,,而且只要比較前后分組的時間戳的差異,,就可以確定輸出的時間間隔。 RTP規(guī)定一次會話的初始時間戳必須隨機選擇,,但協(xié)議沒有規(guī)定時間戳的單位,,也沒有規(guī)定該值的精確解釋,而是由負載類型來確定時鐘的顆粒,,這樣各種應(yīng)用類型可以根據(jù)需要選擇合適的輸出計時精度,。 在RTP傳輸音頻數(shù)據(jù)時,一般選定邏輯時間戳速率與采樣速率相同,,但是在傳輸視頻數(shù)據(jù)時,,必須使時間戳速率大于每幀的一個滴答。如果數(shù)據(jù)是在同一時刻采樣的,,協(xié)議標準還允許多個分組具有相同的時間戳值,。 5.4媒體數(shù)據(jù)發(fā)送速度的控制 由于RTP協(xié)議沒有規(guī)定RTP分組的長度和發(fā)送數(shù)據(jù)的速度,因而需要根據(jù)具體情況調(diào)整服務(wù)器端發(fā)送媒體數(shù)據(jù)的速度,。對來自設(shè)備的實時數(shù)據(jù)可以采取等時間間隔訪問設(shè)備緩沖區(qū),,在有新數(shù)據(jù)輸入時發(fā)送數(shù)據(jù)的方式,時間戳的設(shè)置相對容易,。對已經(jīng)錄制好的本地硬盤上的媒體文件,,以H.263格式的文件為例,由于文件本身不包含幀率信息,,所以需要知道錄制時的幀率或者設(shè)置一個初始值,,在發(fā)送數(shù)據(jù)的時候找出發(fā)送數(shù)據(jù)中的幀數(shù)目,根據(jù)幀率和預(yù)置值來計算時延,,以適當(dāng)?shù)乃俣劝l(fā)送數(shù)據(jù)并設(shè)置時間戳信息,。 5.5多種流同步 RTCP的一個關(guān)鍵作用就是能讓接收方同步多個RTP流,例如:當(dāng)音頻與視頻一起傳輸?shù)臅r候,,由于編碼的不同,,RTP使用兩個流分別進行傳輸,這樣兩個流的時間戳以不同的速率運行,,接收方必須同步兩個流,,以保證聲音與影像的一致。 為能進行流同步,,RTCP要求發(fā)送方給每個傳送一個唯一的標識數(shù)據(jù)源的規(guī)范名(CanonicalName),,盡管由一個數(shù)據(jù)源發(fā)出的不同的流具有不同的同步源標識(SSRC),但具有相同的規(guī)范名,,這樣接收方就知道哪些流是有關(guān)聯(lián)的,。而發(fā)送方報告報文所包含的信息可被接收方用于協(xié)調(diào)兩個流中的時間戳值,。發(fā)送方報告中含有一個以網(wǎng)絡(luò)時間協(xié)議NTP(NetworkTimeProtocol)格式表示的絕對時間值,,接著RTCP報告中給出一個RTP時間戳值,,產(chǎn)生該值的時鐘就是產(chǎn)生RTP分組中的TimeStamp字段的那個時鐘。由于發(fā)送方發(fā)出的所有流和發(fā)送方報告都使用同一個絕對時鐘,,接收方就可以比較來自同一數(shù)據(jù)源的兩個流的絕對時間,,從而確定如何將一個流中的時間戳值映射為另一個流中的時間戳值。 流媒體技術(shù)的應(yīng)用日益廣泛,,對流媒體技術(shù)的研究具有很大的實際意義,本文通過對RTP/RTCP協(xié)議的研究,,分析流媒體服務(wù)器的一般功能和結(jié)構(gòu),給出構(gòu)建一個基本的流媒體服務(wù)器的實現(xiàn)方案,,實驗證明可以同時滿足多個實時和文件客戶的要求,并已經(jīng)應(yīng)用于一個遠程監(jiān)控系統(tǒng)中,。
|
|
來自: MikeDoc > 《視頻技術(shù)》