資源描述:
《基于內(nèi)存緩沖區(qū)的流媒體數(shù)據(jù)緩存》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、基于內(nèi)存緩沖區(qū)的流媒體數(shù)據(jù)緩存姓名:常雙舉學(xué)號:7120310418班級:12400092014年7月18日基于內(nèi)存緩沖區(qū)的流媒體數(shù)據(jù)緩存常雙舉720310418124009摘要:在有了一個對流媒體數(shù)據(jù)的深刻理解的情況下,剖析緩沖區(qū)建立的多種困難和情況,并給出解決問題的想法和算法,使構(gòu)建出的緩沖區(qū)可以接收流媒體數(shù)據(jù)。一、題目描述流媒體是指以流的方式在網(wǎng)絡(luò)中傳輸音頻、視頻和多媒體文件的形式,流式傳輸方式是將視頻和音頻等多媒體文件經(jīng)過特殊的壓縮方式分成一個個的壓縮包,由服務(wù)器向用戶計算機(jī)連續(xù)、實(shí)時傳送;在采用流式傳輸方
2、式的系統(tǒng)中,用戶不必像非流式播放那樣等到整個文件下載完畢后才能看到當(dāng)中的內(nèi)容,而是只需要經(jīng)過幾秒鐘或幾十秒的啟動延時即可在用戶計算機(jī)上利用相應(yīng)的播放器對壓縮的視頻或音頻等流式媒體文件進(jìn)行播放,剩余的部分將繼續(xù)進(jìn)行下載,直至播放完畢;從這里看出流媒體數(shù)據(jù)是一邊下載一邊輸出的;而且這個過程的一系列相關(guān)的包稱為“流”,而流式傳輸?shù)膶?shí)現(xiàn)需要緩存,因?yàn)镮nternet以包傳輸為基礎(chǔ)進(jìn)行斷續(xù)的異步傳輸;這里就可以知道整個實(shí)驗(yàn)的大致流程為服務(wù)器以數(shù)據(jù)包的形式像用戶傳送數(shù)據(jù),即用戶接收到的一個個的數(shù)據(jù)包,而又因?yàn)榱魇絺鬏數(shù)男枰?,?/p>
3、戶需要建立緩存區(qū),即題目中的內(nèi)存緩沖區(qū),用戶的緩沖區(qū)接收到服務(wù)器發(fā)送的數(shù)據(jù)包,將其寫入緩沖區(qū)處理好,整理出正確的數(shù)據(jù)輸出給用戶;整個過程是實(shí)時的,即緩沖區(qū)是一邊接收數(shù)據(jù)包,一邊輸出給用戶的。二、問題分析清楚了整個實(shí)驗(yàn)的流程,有幾個問題是必須要清楚的;一是服務(wù)器發(fā)送給緩沖區(qū)的數(shù)據(jù)包的順序問題,是服務(wù)器順序切割文件產(chǎn)生的順序數(shù)據(jù)包還是多線程下載產(chǎn)生的亂序的數(shù)據(jù)包?二是服務(wù)器在傳送數(shù)據(jù)包的情況下,有沒有可能因?yàn)橐恍┮蛩貙?dǎo)致某些數(shù)據(jù)包發(fā)送失敗,從而產(chǎn)生數(shù)據(jù)包丟失的問題?三是假如服務(wù)器接收的是多用戶請求,那么傳送的數(shù)據(jù)包對于
4、用戶來說是否是重復(fù)的呢?同時,由于用戶可以同時下載多個文件,多個節(jié)目,假如某一用戶向服務(wù)器發(fā)送多節(jié)目下載請求,緩沖區(qū)接收的數(shù)據(jù)包豈不是具有不同節(jié)目ID的數(shù)據(jù)包?除去以上的數(shù)據(jù)包的屬性問題,還有緩沖區(qū)大小問題和用戶需求問題;緩沖區(qū)大小問題是指緩沖區(qū)作為一個數(shù)據(jù)的中轉(zhuǎn)站,不可能具有特別大的一塊內(nèi)存供其使用,這不符合緩沖區(qū)的緩沖性質(zhì),因此需要對緩沖區(qū)設(shè)定大小限制,例如,要求緩沖區(qū)占用必須在512K以內(nèi);用戶需求問題是指用戶在使用數(shù)據(jù)時,要求從緩沖區(qū)中拿到的數(shù)據(jù)可以顯示出一幀的畫面或者一段語音,否則對于用戶來說,這段數(shù)據(jù)是
5、不能夠使用的,因此需要設(shè)定一個輸出要求,即對緩沖區(qū)可輸出數(shù)據(jù)量的最低輸出要求,例如設(shè)定緩沖區(qū)中可用數(shù)據(jù)大于1k時,緩沖區(qū)方可輸出數(shù)據(jù)。針對以上這些問題,我們需要有一個大概解決這些問題的思路;首先針對數(shù)據(jù)包的屬性問題,可以設(shè)計一個基本的緩沖區(qū),緩沖區(qū)可以接收順序單線程、無丟失、無重復(fù)和單節(jié)目ID的數(shù)據(jù)包,然后再根據(jù)接收到數(shù)據(jù)包的屬性復(fù)雜性,依次為緩沖區(qū)添加功能,從而達(dá)到處理數(shù)據(jù)包的目的,但是在沿著這個思路思考的時候,發(fā)現(xiàn)有幾個問題是不能解決的,首先多用戶下載的重復(fù)包問題是不能進(jìn)入緩沖區(qū)的,還有多節(jié)目ID的數(shù)據(jù)包是不可
6、能依靠一個緩沖區(qū)來處理的,另外緩沖區(qū)的內(nèi)存限制和用戶需求都需要輔助函數(shù)來解決,所以,解決以上所有問題一個簡單的緩沖區(qū)類是不夠的,我們需要設(shè)計一個功能更加復(fù)雜的節(jié)目類!一、解決方案依據(jù)以上對問題的發(fā)現(xiàn)和探討,我們大體的思路基本確定了,即設(shè)計一個功能完全的封裝的節(jié)目類來接收服務(wù)器發(fā)送的多屬性數(shù)據(jù)包,并輸出數(shù)據(jù)供用戶使用,輸出的數(shù)據(jù)存放在目的文件中,以表示用戶使用過的數(shù)據(jù);1、緩沖區(qū)設(shè)計數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體b,結(jié)構(gòu)體中包含offset-偏移量、judge-判斷是否該存儲體為輸出源和arra-vector動態(tài)數(shù)組模板類以及用來
7、指向下一個結(jié)構(gòu)體的next結(jié)構(gòu)體指針;緩沖區(qū)說明:動態(tài)鏈表的連續(xù)動態(tài)存儲體,即可以申請指針相連的存儲結(jié)構(gòu)體,存儲結(jié)構(gòu)體中有vector數(shù)組動態(tài)存儲;框圖表示:intoffset;intjudge;vectorarra;數(shù)據(jù)區(qū)intoffset;intjudge;vectorarra;數(shù)據(jù)區(qū)intoffset;intjudge;vectorarra;數(shù)據(jù)區(qū)nextnext2、亂序數(shù)據(jù)包處理算法描述:亂序到來的數(shù)據(jù)包可以分為以下幾種情況;1、數(shù)據(jù)包寫在某個存儲體的末尾,要求存儲體末尾
8、元素與數(shù)據(jù)包首元素相接,判斷條件offset+arra.length=indataoffset;在寫完后,要查驗(yàn)在接收這個數(shù)據(jù)包后,是否下個存儲體可以連接在當(dāng)前存儲體的末尾,判斷條件offset+arra.length=next->offset;連接后,要注意調(diào)整指針,循環(huán)查驗(yàn)直到條件不滿足;2、數(shù)據(jù)包寫在某個存儲體的開始,要求數(shù)據(jù)包的末尾元素與存儲體首元素