"; str += "
    中國(guó)投影網(wǎng)資訊      中國(guó)投影網(wǎng)首頁(yè) > 投影資訊 > 正文" str += "返回 打印
    "; str += "
    "; article=document.getElementById('article').innerHTML; if(article.indexOf(strAdBegin)!=-1){ str +=article.substr(0,article.indexOf(strAdBegin)); strTmp=article.substr(article.indexOf(strAdEnd)+strAdEnd.length, article.length); }else{ strTmp=article } str +=strTmp str += "
    "; //str += window.location.href str += "
    "; str += ""; document.write(str); document.close(); } [解析]流媒體客戶端的結(jié)構(gòu)與原理淺析_投影資訊/投影行業(yè)新聞

    国产精品一区在线观看,国产一二三区在线观看,一二三四在线播放免费视频中国,手机日韩理论片在线播放

     
    投影信息
    新品上市
    應(yīng)用案例
    市場(chǎng)熱點(diǎn)
    展會(huì)信息
    代理招商
    技術(shù)動(dòng)態(tài)
    招標(biāo)信息
    教學(xué)專區(qū)
    資訊搜索
    您的位置:首頁(yè) >> 行業(yè)資訊 >> 技術(shù)動(dòng)態(tài) >> [解析]流媒體客戶端的結(jié)構(gòu)與原理淺析
    [解析]流媒體客戶端的結(jié)構(gòu)與原理淺析
    中國(guó)投影網(wǎng)資訊 [2005-8-27 9:20:12]     編輯:伊琳

         流媒體是一種在網(wǎng)絡(luò)上在線播放多媒體的技術(shù)。由于其邊下載邊播放的特性,縮短了用戶初始等待的延遲,但其數(shù)據(jù)也需要采用流式傳輸,具有較高的實(shí)時(shí)需求,因此比起一般的本地播放處理更為復(fù)雜。客戶端是流媒體系統(tǒng)中一個(gè)基本的組成部分,一般是一個(gè)具有網(wǎng)絡(luò)通信功能的播放器,比較著名的具有流媒體功能的播放器有realplayer、Windows media player等。這里以在Windows平臺(tái)上自主開(kāi)發(fā)的一套客戶端播放器為實(shí)例,介紹流媒體客戶端的系統(tǒng)結(jié)構(gòu)和工作原理。

         一、系統(tǒng)結(jié)構(gòu)

         根據(jù)工作平臺(tái)的不同,客戶端的形式也有多種,除了PC機(jī),還可以運(yùn)行在機(jī)頂盒或無(wú)線便攜式設(shè)備上。但是客戶端的工作流程卻都是相似,即從網(wǎng)絡(luò)中接收從流服務(wù)器傳輸過(guò)來(lái)的各類媒體數(shù)據(jù)流,存入一個(gè)緩沖隊(duì)列,然后對(duì)其中的每一幀數(shù)據(jù)調(diào)用各類解碼器重建成原始的數(shù)據(jù)格式,最后經(jīng)同步后在設(shè)備上播放出來(lái)。

         從功能層次上看,播放器主模塊可以分為四個(gè)層次:RTSP會(huì)話控制層、RTP數(shù)據(jù)傳輸層、解碼層和顯示播放層(如圖1所示)。播放器與服務(wù)器之間的通信主要是由位于應(yīng)用層的RTSP協(xié)議和位于傳輸層的RTP 協(xié)議(Real-time Transport Protocol)來(lái)實(shí)現(xiàn)的。

         RTSP會(huì)話控制層由播放器主線程來(lái)完成,負(fù)責(zé)RTSP相關(guān)控制指令的傳送與接收分析。RTP數(shù)據(jù)傳輸層和解碼層分別由從主線程產(chǎn)生的接收和解碼線程來(lái)完成,接收和解碼線程對(duì)應(yīng)視頻數(shù)據(jù)和音頻數(shù)據(jù)又各自分別獨(dú)立為兩個(gè)不同的線程處理數(shù)據(jù)的接收和解碼任務(wù)。顯示播放層同樣也實(shí)現(xiàn)視頻、音頻兩個(gè)獨(dú)立的播放任務(wù)。

         對(duì)于各層之間的信息交互,首先由RTSP會(huì)話控制層向流媒體服務(wù)器提出請(qǐng)求并建立連接,然后RTP數(shù)據(jù)傳輸層負(fù)責(zé)對(duì)網(wǎng)絡(luò)上傳送過(guò)來(lái)的實(shí)時(shí)視頻、音頻數(shù)據(jù)進(jìn)行預(yù)處理,主要是統(tǒng)計(jì)相關(guān)數(shù)據(jù)信息并依照RTP包頭在緩沖隊(duì)列中進(jìn)行排序。根據(jù)RTP數(shù)據(jù)包頭時(shí)戳信息,按時(shí)送達(dá)到解碼層進(jìn)行解碼。解碼線程選擇匹配的解碼器進(jìn)行解碼,并最終在顯示播放層完成最終的播放。

        二、工作原理

        1. RTSP會(huì)話連接

        RTSP[2]是基于TCP協(xié)議的一個(gè)實(shí)時(shí)流控制協(xié)議。通過(guò)此協(xié)議,可以為服務(wù)器和客戶端建立會(huì)話控制連接,為多媒體流提供遠(yuǎn)程控制功能,諸如播放、暫停、跳躍、停止等。因此對(duì)于客戶端應(yīng)該首先連接服務(wù)器端的RTSP端口。建立RTSP連接后,客戶端發(fā)送DESCRIBE方法給服務(wù)器,其中包含了點(diǎn)播文件的URL。如果存在認(rèn)證步驟,服務(wù)器就會(huì)返回一個(gè)錯(cuò)誤碼,接著,客戶端會(huì)將用戶輸入的用戶名和密碼包含進(jìn)RTSP包并再次發(fā)送DESCRIBE。服務(wù)器收到后會(huì)傳送媒體描述文件SDP(符合RFC2327標(biāo)準(zhǔn))到客戶端播放器?蛻舳俗x取SDP描述文件來(lái)配置音頻、視頻解碼同步信息,例如:文件名、網(wǎng)絡(luò)類型、RTP數(shù)據(jù)傳輸通道端口號(hào)、編碼類型、采樣率等。在配置好音視頻相關(guān)信息后,客戶端發(fā)送SETUP方法給服務(wù)器,配置相關(guān)的傳輸網(wǎng)絡(luò)協(xié)議,傳輸方式和端口等信息。最后在創(chuàng)建好接收解碼線程后,客戶端發(fā)送PLAY方法,通知服務(wù)器往本地RTP接收端口發(fā)送音視頻數(shù)據(jù)。會(huì)話結(jié)束后,客戶端發(fā)送TEARDOWN到服務(wù)器斷開(kāi)連接。此外,在會(huì)話期間,客戶端可以通過(guò)改變PLAY指令的參數(shù),以及PAUSE指令實(shí)現(xiàn)播放暫停跳躍等VCR功能。圖2中的TEST,RESEND和ECHO指令是我們?yōu)橹悄芰鞣⻊?wù)增加的幾個(gè)RTSP指令。

        2. 解碼前的RTP數(shù)據(jù)處理

        RTP[3]傳輸通常基于傳輸效率較高數(shù)據(jù)可靠性較低的UDP協(xié)議,是一個(gè)針對(duì)實(shí)時(shí)數(shù)據(jù)的傳輸協(xié)議。在UDP數(shù)據(jù)包之前增加了一個(gè)RTP包頭,其中包含了一些可以較好保證流數(shù)據(jù)連續(xù)性實(shí)時(shí)性的信息,如序列號(hào)、時(shí)間戳等。序列號(hào)可以保證到達(dá)客戶端的RTP包的連續(xù),而時(shí)間戳可以同步音視頻包。

    在RTSP的SETUP包中,客戶端會(huì)通知服務(wù)器本地RTP接收端口。因此在創(chuàng)建接收線程時(shí),首先創(chuàng)建本地UDP的socket端口并綁定。然后循環(huán)等待接收從服務(wù)器傳來(lái)的RTP音視頻數(shù)據(jù)包,并將接收到數(shù)據(jù)按序列號(hào)順序插入到一個(gè)緩沖隊(duì)列中。初始緩沖長(zhǎng)度可以由用戶設(shè)定。新的數(shù)據(jù)包根據(jù)其序列號(hào)插入到隊(duì)列中正確的位置。

    一旦緩沖增加到初始閾值,客戶端將啟動(dòng)解碼線程,開(kāi)始循環(huán)讀取緩沖的頭部節(jié)點(diǎn)數(shù)據(jù)。每次客戶端將讀取緩沖中具有相同時(shí)間戳的數(shù)據(jù)作為一個(gè)整體送入解碼器中。由于視頻的一幀數(shù)據(jù)被拆分成幾個(gè)時(shí)間戳相同的RTP數(shù)據(jù)包,而音頻沒(méi)有這樣處理,每個(gè)RTP包的時(shí)間戳都不一樣。因此,每次送入解碼器的是視頻的一幀或是音頻的一個(gè)RTP包單元的數(shù)據(jù),具體如圖3所示。

    從接收到解碼,音視頻數(shù)據(jù)都是在互為獨(dú)立的線程中處理,因此可能會(huì)由于網(wǎng)絡(luò)或終端環(huán)境因素而失去同步。

         3. 解碼后數(shù)據(jù)處理

         解碼器每次解碼一幀視頻或是一個(gè)音頻包(后面統(tǒng)稱為一個(gè)數(shù)據(jù)單元),由于被解碼后的數(shù)據(jù)并不一定就馬上需要被播放,為了保證安全性,從將一幀解碼到將此幀顯示出來(lái),中間可以經(jīng)過(guò)一段緩沖存儲(chǔ)過(guò)程。

         可以設(shè)計(jì)一個(gè)緩存,包含了一些長(zhǎng)度(視頻是16,音頻是32)固定的數(shù)組,分別用來(lái)存儲(chǔ)解碼后數(shù)據(jù)內(nèi)容以及播放時(shí)間信息和當(dāng)前填充狀態(tài)。解碼后的每一個(gè)數(shù)據(jù)單元被存入緩存,然后到播放時(shí)間時(shí)再?gòu)木彺嬷腥〕鱿鄳?yīng)的數(shù)據(jù)單元。每取出一個(gè)數(shù)據(jù)單元?jiǎng)t將新的一個(gè)數(shù)據(jù)單元填入被取出數(shù)據(jù)留出的空間。如此可以循環(huán)使用該固定長(zhǎng)度的緩存空間。

         這段緩存對(duì)于視頻,每一幀已解碼的數(shù)據(jù)被填入到同一個(gè)數(shù)組單元之中;對(duì)于音頻,每一個(gè)RTP包單元的數(shù)據(jù)解碼之后被填入到一個(gè)數(shù)組單元中。同時(shí)建立了兩個(gè)索引,一個(gè)用于填入數(shù)據(jù),一個(gè)用于取出數(shù)據(jù)。

         以視頻為例,初始時(shí)首先連續(xù)解碼16幀的數(shù)據(jù),將緩沖數(shù)組填滿,如圖4(a)所示:1表示已有數(shù)據(jù)填入,0表示數(shù)據(jù)已經(jīng)取出。

         當(dāng)?shù)?5組數(shù)據(jù)填完后,填值索引重新指向第0個(gè)數(shù)組。然后播放器繼續(xù)解下一幀。但是第0組里已經(jīng)有數(shù)據(jù),所以無(wú)法再往第0組填入數(shù)據(jù),此時(shí)填值操作進(jìn)行等待。此時(shí)取值索引初始時(shí)也指向第0組數(shù)據(jù),當(dāng)當(dāng)前時(shí)間等于第0組的播放時(shí)間時(shí),開(kāi)始取出并播放第0組的解碼數(shù)據(jù),取值索引移到第一組,此時(shí)第0組無(wú)數(shù)據(jù)。

         第0組數(shù)據(jù)播放之后,將重新喚醒解碼線程,將已解出的下一幀數(shù)據(jù)填入到第0組之中,填值索引也移至第1組。然后播放器繼續(xù)解下一幀,但是第一組里數(shù)據(jù)尚未被取出顯示,所以無(wú)法填入新數(shù)據(jù),解碼線程又開(kāi)始等待,所示。如此循環(huán)下去,即完成了解碼到顯示之間的工作。

         對(duì)于音頻,不同的在于,每次播放將從緩存中取出固定長(zhǎng)度或采樣點(diǎn)數(shù)的音頻數(shù)據(jù)。

         4. 音視頻同步

         前面曾提到,解碼到緩存中的音視頻數(shù)據(jù)由于不相關(guān)性是存在不同步的可能的,這樣在播放時(shí)會(huì)破壞服務(wù)質(zhì)量,因此需要在播放前取出緩存中數(shù)據(jù)時(shí)對(duì)音視頻進(jìn)行重同步。同步機(jī)制采用的是一個(gè)以系統(tǒng)時(shí)鐘為標(biāo)準(zhǔn)的計(jì)時(shí)循環(huán)。由于音頻對(duì)播放速率的均勻性要求更嚴(yán),因此音頻的播放是根據(jù)其本身的幀率按一定的速率不斷的取出數(shù)據(jù)進(jìn)行播放的。視頻則是根據(jù)計(jì)時(shí)器所更新的系統(tǒng)時(shí)鐘來(lái)確定是否播放,也就是說(shuō),當(dāng)系統(tǒng)時(shí)鐘超過(guò)下一幀視頻的播放時(shí)間后,該視頻將被播放。系統(tǒng)時(shí)鐘的更新以音頻為基準(zhǔn)。如果視頻失去同步,比如過(guò)分落后于當(dāng)前系統(tǒng)時(shí)鐘,則會(huì)選擇跳幀來(lái)盡快趕上計(jì)時(shí)器時(shí)間;如果超過(guò)當(dāng)前系統(tǒng)時(shí)鐘過(guò)多,則會(huì)暫時(shí)等待計(jì)時(shí)器計(jì)時(shí)增加。同樣,音頻出現(xiàn)意外情況時(shí),也會(huì)作類似的處理。這樣,在以上機(jī)制的保證下,音視頻能夠始終按照一定的基準(zhǔn)達(dá)到同步,并且能夠抵制外界變化對(duì)同步造成的影響。

         5. 音視頻播放

         音視頻媒體的播放可以調(diào)用DirectShow接口實(shí)現(xiàn),分別使用DirectDraw和DirectSound通過(guò)驅(qū)動(dòng)系統(tǒng)硬件設(shè)備來(lái)播放音視頻數(shù)據(jù)。DirectShow技術(shù)在音視頻采集,視頻聊天,視頻點(diǎn)播,視頻疊加,媒體播放等領(lǐng)域都有相當(dāng)成熟的應(yīng)用。在程序啟動(dòng)時(shí),需要先初始化音視頻的一些播放配置信息。如果是視頻,在解碼后如果到達(dá)某一幀的播放期限,則經(jīng)過(guò)同步檢測(cè)后將數(shù)據(jù)內(nèi)容作為參數(shù)調(diào)用函數(shù)進(jìn)行顯示。音頻則是在初始化后啟動(dòng)一個(gè)播放線程,在這個(gè)線程中存在一個(gè)循環(huán),不斷讀取緩存中的音頻數(shù)據(jù),然后進(jìn)行播放。

         三、結(jié)束語(yǔ)

         流媒體技術(shù)是多媒體數(shù)據(jù)在互聯(lián)網(wǎng)上傳輸很有前途應(yīng)用最廣泛的技術(shù),客戶端播放器作為其中一個(gè)重要的組成部分,其性能的好壞直接影響到用戶的服務(wù)質(zhì)量。在客戶端中,音視頻數(shù)據(jù)的處理從接收到解碼都是在相互獨(dú)立的線程中,然后利用數(shù)據(jù)的時(shí)間戳進(jìn)行同步保護(hù)。客戶端的通信與傳輸需要遵從RTP和RTSP,這是其支持流媒體播放的一個(gè)重要標(biāo)準(zhǔn)。






    更多相關(guān):


    文章來(lái)源:中國(guó)多媒體視訊
    推薦給朋友】【投稿建議】【加入收藏夾】【設(shè)為首頁(yè)】【 】【打印】【關(guān)閉】【評(píng)論】【頂部】 
    發(fā)表評(píng)論>>
    用戶    游客
    內(nèi)容