專利名稱:避免緩存跳幀的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種對緩存數(shù)據(jù)調(diào)度的方法,特別適用但不僅限于基于P2P內(nèi)容分發(fā) 的緩存調(diào)度方法。
背景技術(shù):
內(nèi)容分發(fā)網(wǎng)(Content Distribution Network,以下簡稱CDN),是架構(gòu)在現(xiàn)有互 聯(lián)網(wǎng)上的一種分布式內(nèi)容傳遞平臺。其目的是通過在現(xiàn)有的hternet中增加一層新的 網(wǎng)絡架構(gòu),通過智能化策略,將中心的內(nèi)容發(fā)布到最接近用戶、服務能力最好的網(wǎng)絡邊緣節(jié) 點,使用戶可以就近取得所需的內(nèi)容,解決hternet網(wǎng)絡擁塞狀況,提高用戶訪問網(wǎng)站的 響應速度。從技術(shù)上全面解決由于網(wǎng)絡帶寬小、用戶訪問量大、網(wǎng)點分布不均等原因,解決 用戶訪問響應速度慢的問題。簡單地說就是利用P2P(Point to Point的簡稱,又被稱為 “點對點”)技術(shù),將一個服務器的內(nèi)容平均分部到多個服務器上,服務器智能識別,讓用戶 獲取離用戶最近的服務器,提高下載速度。在目前的市場環(huán)境中采用機頂盒結(jié)合基于P2P 的⑶N客戶端的產(chǎn)品還很少,其原理基本上還是采取的傳統(tǒng)的RTSP (Real Time Streaming I^otocol即實時流傳輸協(xié)議)的傳統(tǒng)方式或者傳統(tǒng)CDN的組播方式,在CDN上采取P2P技 術(shù)的公司現(xiàn)在目前只有原力公司,但是原力公司是將P2P的客戶端封裝為HTTP流的形式進 行傳輸,其下載速率不適合高清碼流的播放。CDN客戶端的工作原理是,從各邊緣節(jié)點或者其他客戶端請求文件分片,以供點 播。所謂的“分片”是指把一個大的數(shù)據(jù)包例如一部影片,按照預先設定的數(shù)據(jù)大小切成 若干段,以方便于網(wǎng)絡傳輸。其工作原理是先把分片下載到內(nèi)容分發(fā)客戶端自身的緩存中, 然后播放器從該緩存中讀取內(nèi)容并播放顯示。CDN客戶端負責存儲下載的緩存數(shù)據(jù)及實現(xiàn) 所有的播放策略。緩存是客戶端的核心部分,直接影響著播放的流暢性,從而影響播放質(zhì) 量。傳統(tǒng)的緩存管理,經(jīng)常會出現(xiàn)下載速率大于播放的讀取速率,而客戶端的緩存容量是一 定的,當緩存被寫滿后便會循環(huán)到緩存頂點開始再次寫入,新寫入的數(shù)據(jù)將原有的舊數(shù)據(jù) 覆蓋掉。當新寫入數(shù)據(jù)在緩存中的位置超過了讀取的位置,就會出現(xiàn)跳幀。舉例說明客戶 端緩存容量為10個分片,當緩存寫滿后,下載的第11分片便會覆蓋第1分片進行寫入,由 此遞推。如果此時剛讀取到第3分片,而寫入的緩存位置已經(jīng)超過了讀取位置,則在下一次 讀取時便會讀取第14分片而不是應讀的第4分片,因而出現(xiàn)了跳幀現(xiàn)象。很明顯,這種現(xiàn) 象將會嚴重影響用戶的體驗。
發(fā)明內(nèi)容
本發(fā)明的目的就是提供一種解決讀取緩存時跳幀的方法,特別適用于基于P2P內(nèi) 容分發(fā)的緩存讀取環(huán)境,但不排除其它適用環(huán)境也能使用本方法。本發(fā)明避免緩存跳幀的方法,包括以下步驟a.客戶端從互聯(lián)網(wǎng)上持續(xù)下載分片數(shù)據(jù)并按分片號順序?qū)懭氲阶陨淼木彺嬷校籦.讀取單元按分片號順序讀取緩存中寫入的分片數(shù)據(jù);
c.如果緩存中的讀取指針追平緩存的寫入指針時,讀取單元則停止讀取,等待緩 存中寫入新分片數(shù)據(jù)后,從步驟b往下執(zhí)行;如果緩存中的讀取指針未追平緩存的寫入指 針則往下執(zhí)行;d.當緩存容量被下載的分片數(shù)據(jù)寫滿后,緩存中的寫入指針循環(huán)至緩存頂部繼續(xù) 按分片號順序?qū)懭胂螺d的新分片數(shù)據(jù),新分片數(shù)據(jù)覆蓋已寫入的舊分片數(shù)據(jù);e.如果緩存中覆蓋寫入的新分片數(shù)據(jù)追平讀取單元正在讀取的舊分片數(shù)據(jù)時,客 戶端的下載和寫入新分片數(shù)據(jù)停止,直到舊分片數(shù)據(jù)被讀取后再從步驟a開始往下執(zhí)行; 如果緩存中覆蓋寫入的新分片數(shù)據(jù)未追平讀取單元正在讀取的舊分片數(shù)據(jù)則執(zhí)行步驟f ;f.如果下載已完成,讀取單元讀取緩存數(shù)據(jù)至結(jié)束;如果下載未完成,從步驟a開 始執(zhí)行直到下載完成。其中所說的指針是用于指示在對緩存寫入或讀取時,當前寫入或讀取的緩存刻度 相對緩存頂點的偏移量。在對互聯(lián)網(wǎng)數(shù)據(jù)下載并實時讀取時,通常可能會出現(xiàn)兩種現(xiàn)象一 是下載速率小于讀取速率,這就造成了讀取不連續(xù),其現(xiàn)有的解決方式是停止讀取,直到有 新數(shù)據(jù)可讀再繼續(xù),這個方式已是現(xiàn)有的成熟技術(shù);另一種現(xiàn)象是下載速率大于讀取速率, 特別是當這兩個速率相差較大或緩存容量較小時,便有可能出現(xiàn)跳幀。而在用戶接收信息 時出現(xiàn)跳幀則會極大得降低用戶體驗,甚至會使用戶錯失重要信息。而通過本發(fā)明的方法, 能夠完全避免這種原因跳幀,保證用戶完整地接收下載信息。在步驟e中,一種可選的實現(xiàn)方法包括當緩存中的寫入指針與讀取指針的位置 一致時,如果寫入的分片數(shù)據(jù)的分片號大于正在讀取的分片數(shù)據(jù)的分片號,則客戶端的下 載和寫入新分片數(shù)據(jù)停止,直至舊分片數(shù)據(jù)被讀取后再從步驟a開始向下執(zhí)行;否則執(zhí)行 步驟f。另一種實現(xiàn)步驟e的方法包括當緩存中已讀取的分片數(shù)據(jù)總量加上緩存能夠 容納的分片的總量等于已寫入緩存的分片數(shù)據(jù)總量時,客戶端的下載和寫入新分片數(shù)據(jù)停 止,直至舊分片數(shù)據(jù)被讀取后再從步驟a開始向下執(zhí)行;反之執(zhí)行步驟f。在步驟e中還可以包括當緩存中的寫入指針與讀取指針的位置一致時,如果寫 入指針循環(huán)寫入的次數(shù)>讀取指針循環(huán)讀取的次數(shù),則客戶端的下載和寫入新分片數(shù)據(jù)停 止,直至舊分片數(shù)據(jù)被讀取后再從步驟a開始向下執(zhí)行;否則執(zhí)行步驟f。在上述的基礎上,步驟e中客戶端的下載和寫入新分片數(shù)據(jù)停止的時長是由客戶 端根據(jù)當時的網(wǎng)絡環(huán)境隨機設定的。客戶端的CPU根據(jù)自身的性能和當時的網(wǎng)絡下載速度 以及讀取速度,隨機為停止下載和寫入的時長設定一個相適應的值,在避免讀取跳幀的同 時,也盡量避免因頻繁下載-停止-下載而對系統(tǒng)帶來較大的負擔。在CDN的客戶端中,以PC機或機頂盒為優(yōu)選,并且其應用環(huán)境以內(nèi)容分發(fā)網(wǎng)絡為 優(yōu)選。通過上述方法對緩存中數(shù)據(jù)的讀取和寫入進行調(diào)度,完全能夠解決因為下載速率 大于讀取緩存速率而出現(xiàn)的讀取跳幀的問題,在CDN網(wǎng)絡環(huán)境中對高清碼流的下載和播放 所產(chǎn)生的有益效果更為突出,因此完全能夠滿足用戶完整接收信息的需求,極大地提高了 用戶體驗。以下結(jié)合由附圖所示實施例的具體實施方式
,對本發(fā)明的上述內(nèi)容再作進一步的 詳細說明。但不應將此理解為本發(fā)明上述主題的范圍僅限于以下的實例。在不脫離本發(fā)明上述技術(shù)思想情況下,根據(jù)本領(lǐng)域普通技術(shù)知識和慣用手段做出的各種替換或變更,均應 包括在本發(fā)明的范圍內(nèi)。
圖1是本發(fā)明避免緩存跳幀的方法的流程圖。
具體實施例方式實施例1 如圖1所示,在⑶N(內(nèi)容分發(fā)網(wǎng))的網(wǎng)絡環(huán)境中,以機頂盒為⑶N客戶端為例,當 它接收到用戶的下載指令后,便對所請求下載的數(shù)據(jù)的URL(網(wǎng)絡地址)進行解析,然后請 求跟蹤服務器獲得所有該數(shù)據(jù)的分片所存在的服務器以及其它客戶端,當機頂盒獲取到足 夠的相應資源后,執(zhí)行以下步驟a.客戶端從互聯(lián)網(wǎng)上持續(xù)下載分片數(shù)據(jù)并按分片號順序?qū)懭氲阶陨淼木彺嬷?;b.讀取單元按分片號順序讀取緩存中寫入的分片數(shù)據(jù);c.如果緩存中的讀取指針追平緩存的寫入指針時,讀取單元則停止讀取,等待緩 存中寫入新分片數(shù)據(jù)后,從步驟b往下執(zhí)行;如果緩存中的讀取指針未追平緩存的寫入指 針則往下執(zhí)行;d.當緩存容量被下載的分片數(shù)據(jù)寫滿后,緩存中的寫入指針循環(huán)至緩存頂部繼續(xù) 按分片號順序?qū)懭胂螺d的新分片數(shù)據(jù),新分片數(shù)據(jù)覆蓋已寫入的舊分片數(shù)據(jù);e.如果緩存中覆蓋寫入的新分片數(shù)據(jù)追平讀取單元正在讀取的舊分片數(shù)據(jù)時,客 戶端的下載和寫入新分片數(shù)據(jù)停止,直到舊分片數(shù)據(jù)被讀取后再從步驟a開始往下執(zhí)行; 如果緩存中覆蓋寫入的新分片數(shù)據(jù)未追平讀取單元正在讀取的舊分片數(shù)據(jù)則執(zhí)行步驟f ;f.如果下載已完成,讀取單元讀取緩存數(shù)據(jù)至結(jié)束;如果下載未完成,從步驟a開 始執(zhí)行直到下載完成。在步驟e中機頂盒的下載和寫入新分片數(shù)據(jù)停止的時長是由機頂盒的CPU根據(jù)自 身的性能和當時的網(wǎng)絡下載速度以及讀取速度,隨機為停止下載和寫入的時長設定一個相 適應的值。實施例2 在實施例1的基礎上,將步驟e更改為當緩存中的寫入指針與讀取指針的位置一 致時,如果寫入的分片數(shù)據(jù)的分片號大于正在讀取的分片數(shù)據(jù)的分片號,則客戶端的下載 和寫入新分片數(shù)據(jù)停止,直至舊分片數(shù)據(jù)被讀取后再從步驟a開始向下執(zhí)行;否則執(zhí)行步 馬聚f ο實施例3 在實施例1的基礎上,將步驟e更改為當緩存中的寫入指針與讀取指針的位置一 致時,如果寫入指針循環(huán)寫入的次數(shù)>讀取指針循環(huán)讀取的次數(shù),則客戶端的下載和寫入 新分片數(shù)據(jù)停止,直至舊分片數(shù)據(jù)被讀取后再從步驟a開始向下執(zhí)行;否則執(zhí)行步驟f。
權(quán)利要求
1.避免緩存跳幀的方法,其特征為包括以下步驟a.客戶端從互聯(lián)網(wǎng)上持續(xù)下載分片數(shù)據(jù)并按分片號順序?qū)懭氲阶陨淼木彺嬷?;b.讀取單元按分片號順序讀取緩存中寫入的分片數(shù)據(jù);c.如果緩存中的讀取指針追平緩存的寫入指針時,讀取單元則停止讀取,等待緩存中 寫入新分片數(shù)據(jù)后,從步驟b往下執(zhí)行;如果緩存中的讀取指針未追平緩存的寫入指針則 往下執(zhí)行;d.當緩存容量被下載的分片數(shù)據(jù)寫滿后,緩存中的寫入指針循環(huán)至緩存頂部繼續(xù)按分 片號順序?qū)懭胂螺d的新分片數(shù)據(jù),新分片數(shù)據(jù)覆蓋已寫入的舊分片數(shù)據(jù);e.如果緩存中覆蓋寫入的新分片數(shù)據(jù)追平讀取單元正在讀取的舊分片數(shù)據(jù)時,客戶端 的下載和寫入新分片數(shù)據(jù)停止,直到舊分片數(shù)據(jù)被讀取后再從步驟a開始往下執(zhí)行;如果 緩存中覆蓋寫入的新分片數(shù)據(jù)未追平讀取單元正在讀取的舊分片數(shù)據(jù)則執(zhí)行步驟f ;f.如果下載已完成,讀取單元讀取緩存數(shù)據(jù)至結(jié)束;如果下載未完成,從步驟a開始執(zhí) 行直到下載完成。
2.如權(quán)利要求1所述的避免緩存跳幀的方法,其特征為步驟e包括當緩存中的寫入指針與讀取指針的位置一致時,如果寫入的分片數(shù)據(jù)的分片號大于正 在讀取的分片數(shù)據(jù)的分片號,則客戶端的下載和寫入新分片數(shù)據(jù)停止,直至舊分片數(shù)據(jù)被 讀取后再從步驟a開始向下執(zhí)行;否則執(zhí)行步驟f。
3.如權(quán)利要求1所述的避免緩存跳幀的方法,其特征為步驟e包括當緩存中已讀取的分片數(shù)據(jù)總量加上緩存能夠容納的分片的總量等于已寫入緩存的 分片數(shù)據(jù)總量時,客戶端的下載和寫入新分片數(shù)據(jù)停止,直至舊分片數(shù)據(jù)被讀取后再從步 驟a開始向下執(zhí)行;反之執(zhí)行步驟f。
4.如權(quán)利要求1所述的避免緩存跳幀的方法,其特征為步驟e包括當緩存中的寫入指針與讀取指針的位置一致時,如果寫入指針循環(huán)寫入的次數(shù)>讀取 指針循環(huán)讀取的次數(shù),則客戶端的下載和寫入新分片數(shù)據(jù)停止,直至舊分片數(shù)據(jù)被讀取后 再從步驟a開始向下執(zhí)行;否則執(zhí)行步驟f。
5.如權(quán)利要求1至4所述的避免緩存跳幀的方法,其特征為步驟e中客戶端的下載和 寫入新分片數(shù)據(jù)停止的時長是由客戶端根據(jù)當時的網(wǎng)絡環(huán)境隨機設定的。
6.如權(quán)利要求1至4所述的避免緩存跳幀的方法,其特征為所述的客戶端為PC機或機 頂盒。
7.如權(quán)利要求1至4所述的避免緩存跳幀的方法,其特征為所述的互聯(lián)網(wǎng)為內(nèi)容分發(fā) 網(wǎng)絡。
全文摘要
本發(fā)明避免緩存跳幀的方法,包括的步驟有a.下載數(shù)據(jù)并寫入緩存中;b.讀取緩存中的數(shù)據(jù);c.如果緩存中的讀取指針追平緩存的寫入指針時,讀取單元則停止讀取,等待有新數(shù)據(jù)后再繼續(xù);d.當緩存容量被寫滿后,新數(shù)據(jù)循環(huán)寫入并覆蓋舊數(shù)據(jù);e.當緩存中覆蓋寫入的新數(shù)據(jù)追平讀取單元正在讀取的舊數(shù)據(jù)時,客戶端的下載和寫入新數(shù)據(jù)停止,直到舊數(shù)據(jù)被讀取后再繼續(xù)下載和寫入;f.下載至完成,讀取緩存數(shù)據(jù)至結(jié)束。通過上述方法,完全能夠解決因為下載速率大于讀取緩存速率而出現(xiàn)的讀取跳幀的問題,在CDN網(wǎng)絡環(huán)境中對高清碼流的下載和播放所產(chǎn)生的有益效果更為突出,因此完全能夠滿足用戶完整接收信息的需求,極大地提高了用戶體驗。
文檔編號H04L29/08GK102130946SQ201110021939
公開日2011年7月20日 申請日期2011年1月19日 優(yōu)先權(quán)日2011年1月19日
發(fā)明者唐軍 申請人:四川長虹電器股份有限公司