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