專利名稱:一種基于滑動窗口的fgs帶寬快速分配算法的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在異構(gòu)網(wǎng)絡(luò)環(huán)境下,大規(guī)模交互式實時多媒體系統(tǒng)中視頻碼流的快速帶寬分配算法,尤其涉及一種基于滑動窗口的FGS(Fine Granularity Scalability,F(xiàn)GS,精細(xì)可擴(kuò)展編碼)帶寬快速分配算法。
背景技術(shù):
異構(gòu)網(wǎng)絡(luò)環(huán)境下的實時視頻會議系統(tǒng)中需要解決的一個基本問題是網(wǎng)絡(luò)帶寬的自適應(yīng)。在MPEG-4標(biāo)準(zhǔn)中提出的FGS編碼方式對DCT殘差系數(shù)做位平面編碼,可根據(jù)實際帶寬的變化對增強(qiáng)層作任意長度截取而解碼,其視頻質(zhì)量與解碼長度成正比。
為了有效利用FGS碼流的這種特點,需要根據(jù)可用帶寬的變動,使用一種帶寬分配算法以保證接收端可以得到較恒定的圖像質(zhì)量。目前為止,牛頓搜索法,二分搜索法,R-D曲線合成法等被提出并都取得了不錯的效果。這些算法使用了一種滑動窗口協(xié)議以保證自身的有效性。滑動窗口協(xié)議需要發(fā)送端維持較大的M幀緩沖區(qū)(即所謂的滑動窗口),而每次發(fā)送出去的那幀并不是編碼器當(dāng)前編碼完成的,而是第N-M幀(假設(shè)當(dāng)前編完碼的是第N幀)。這樣即使接收端收到后馬上播放也會有M/fps秒的延遲(假設(shè)fps為發(fā)送端幀率)。這在實時視頻會議系統(tǒng)中,M/fps秒的延遲將會給交互效果帶來影響。此外,若M取值過小則會影響到算法有效性。
發(fā)明內(nèi)容
本發(fā)明的技術(shù)解決問題克服現(xiàn)有技術(shù)的不足,提供一種基于滑動窗口的FGS快速帶寬分配算法,它根據(jù)相鄰幀的差異程度,以小滑動窗口插幀的方法來達(dá)到現(xiàn)有算法中大滑動窗口的效果,從而降低算法的時延。
本發(fā)明的技術(shù)解決方案一種基于滑動窗口的FGS快速帶寬分配算法,其特征在于步驟如下 (1)由精細(xì)可擴(kuò)展編碼FGS編碼器在編碼時提取當(dāng)前編碼幀的速率-失真R-D(Rate-Distortion,R-D)曲線及絕對誤差和(Sum of Absolute Difference,SAD)信息曲線,即SAD信息,并將該幀存入滑動窗口,同時更新窗口的可用帶寬Rbudget; (2)若滑動窗口中真實幀數(shù)目小于預(yù)定閥值M,則轉(zhuǎn)到步驟(1); (3)遍歷滑動窗口,對每個未做插幀處理的真實幀根據(jù)其SAD信息做插幀處理,其中插入幀標(biāo)記為虛假幀,更新窗口的可用帶寬Rbudget; (4)根據(jù)插幀處理后的滑動窗口以及各個幀的R-D曲線,以當(dāng)前窗口的可用帶寬Rbudget為上限,運行FGS帶寬分配算法; (5)根據(jù)FGS帶寬分配算法運行結(jié)果發(fā)送滑動窗口中第一幀,清除該幀及相關(guān)虛假幀,更新窗口可用帶寬值Rbudget,若還有未發(fā)送幀,則轉(zhuǎn)到步驟(1)。
根據(jù)本發(fā)明的又一個方面,其中步驟(1)進(jìn)一步包括步驟 (a)由FGS編碼器在編碼時提取當(dāng)前編碼幀的R-D曲線及SADavg值; (b)將當(dāng)前編碼完成的視頻幀放入滑動窗口; (c)設(shè)滑動窗口內(nèi)M幀的可用帶寬上限為Rbudget,算法開始時Rbudget為0,用下式更新RbudgetRbudget=Rbudget+Rcur/fps,其中fps為發(fā)送端幀率,Rcur為當(dāng)前實際測得的網(wǎng)絡(luò)可用帶寬,并記錄Rcur的值; 根據(jù)本發(fā)明的又一個方面,其中步驟(3)進(jìn)一步包括 (a)根據(jù)標(biāo)記查找滑動窗口內(nèi)未做插幀處理的真實幀; (b)若第m幀為尚未做插幀處理的真實幀,則根據(jù)其SADavg值由方法getInsertNum得到值InsertNum,在窗口內(nèi)第m幀之后插入InsertNum個第m幀,這樣窗口中就會有一模一樣的InsertNum+1個第m幀,同時標(biāo)記區(qū)分真實幀和插入的虛假幀; (c)如果InsertNum的值大于0則以下式更新窗口的可用帶寬值Rbudget其中Rm是編碼第m幀時記錄的可能帶寬,Rn則是下一個真實幀在編碼時記錄的可能帶寬;若第m幀已經(jīng)是窗口內(nèi)最后一個真實幀,則取Rn=Rm,即上式退化為 根據(jù)本發(fā)明的又一個方面,其中步驟(5)進(jìn)一步包括 (a)根據(jù)算法結(jié)果發(fā)送滑動窗口內(nèi)第一幀; (b)清除發(fā)送出去的那一幀,及與該幀相關(guān)的所有虛假幀; (c)更新窗口的可用帶寬Rbudget,令其中ri為當(dāng)前發(fā)送幀的碼率,rj則是各個插入的虛假幀根據(jù)步驟(4)分配的發(fā)送碼率,InsertNum是該幀插入虛假幀的數(shù)量。
本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點在于本發(fā)明考慮視頻會議系統(tǒng)中,實時交互效果的需求,根據(jù)相鄰幀的差異程度,通過小滑動窗口插幀的方法來達(dá)到原來算法中大滑動窗口的效果。實驗表明,在不降低太多帶寬分配效能的前提下,該算法能充分達(dá)到低時延的目的。
圖1為本發(fā)明的算法基本流程圖; 圖2為已有算法的發(fā)送端緩沖區(qū)狀態(tài)圖; 圖3為本發(fā)明算法的發(fā)送端緩沖區(qū)狀態(tài)圖; 圖4為標(biāo)準(zhǔn)測試序列Foreman相應(yīng)視頻幀的R-D曲線圖; 圖5為標(biāo)準(zhǔn)測試序列Coastguard相應(yīng)視頻幀的R-D曲線圖; 圖6為本發(fā)明的實際測試時采用的可用帶寬變化圖; 圖7為本發(fā)明的實際測試碼率分配的比較圖; 圖8為本發(fā)明的實際測試延遲改善的比較圖。
具體實施例方式 下面參考附圖,對本發(fā)明的實施例進(jìn)行詳細(xì)的說明。
首先對本發(fā)明的算法原理進(jìn)行說明。
研究表明,相鄰視頻幀之間有著較強(qiáng)的時空相關(guān)性(這也是很多編碼器工作的原理所在)。這些相關(guān)性造成了編碼后相鄰幀的R-D曲線差異甚??;當(dāng)然,若視頻中有鏡頭轉(zhuǎn)動、場景切換等,那么幀之間的差異將會較大。如圖4、5所示,標(biāo)準(zhǔn)測試序列Foreman_Cif的第27、28、29幀的R-D曲線差異甚小,而Coastguard_Cif在第67、68、69幀處有鏡頭移動,故R-D曲線存在較大差異。本發(fā)明的算法利用了這種時空相關(guān)性設(shè)定較小的滑動窗口,依據(jù)相鄰幀之間的差異程度(一般以幀之間絕對誤差和SAD來量化衡量),對小窗口內(nèi)的各個視頻幀進(jìn)行插幀處理,以達(dá)到原來算法大滑動窗口的效果,從而快速分配碼率。
具體而言,本發(fā)明所提出的改進(jìn)算法基本流程如圖1所示。
本發(fā)明主要包括的核心思想根據(jù)視頻幀的SAD信息,以小滑動窗口插幀的方法來達(dá)到現(xiàn)有帶寬分配算法中大滑動窗口的效果,從而有效降低算法本身時延,但又不損失太多帶寬分配效能。
在描述算法前先定義如下變量及方法 1.設(shè)視頻幀率為fps,滑動窗口大小為M,令M=αfps; 2.設(shè)窗口內(nèi)M幀的可用帶寬上限為Rbudget,算法開始時令Rbudget=0; 3.設(shè)視頻幀長為vHeight,寬為vWidth; 4.設(shè)SADm為第m幀的SAD值,定義該幀的平均SAD為SADavg=SADm/vHeight/vWidth; 5.定義SAD閾值表SadThreshTable[1,...,n]={Sad1,Sad2,...,Sadn},其中Sad1<Sad2<...<Sadn;對應(yīng)的插值數(shù)值表為InsertNumTable[1,...,n]={λ1,λ2,...,λn},其中λ1>λ2>...>λn。算法中就是將FGS編碼過程中得到的SADavg與SadThreshTable中預(yù)設(shè)的Sadi(1≤i≤n)比較,以判斷相應(yīng)幀之后是否該插幀,以及該插入λi(1≤i≤n)幀。SADavg值越小說明前后幀差別不大可以插入較多的虛假幀,該值越大說明前后幀差距較大只能插入較少的虛假幀或者不能插入虛假幀; 6.方法getInsertNum定義如下 1)for i=1 to n 2)if SADavg≤SadThreshTable[i]then 3)return InsertNumTable[i] 5)endif 6)endfor 7)return 0 本發(fā)明的算法描述如下 1.由FGS編碼器在編碼時提取當(dāng)前編碼幀的R-D曲線及SADavg值,將其放入緩沖區(qū),同時用下式更新RbudgetRbudget=Rbudget+Rcur/fps,其中Rcur為當(dāng)前實際測得的網(wǎng)絡(luò)可用帶寬,并記錄Rcur的值; 2.如果滑動窗口中真實視頻幀的數(shù)量小于M,則轉(zhuǎn)到步驟1; 3.遍歷滑動窗口,對每個未做插幀處理的真實幀(設(shè)為第m幀)做插幀處理根據(jù)第m幀的SADavg由方法getInsertNum得到值InsertNum,在第m幀之后插入InsertNum個第m幀。這樣窗口中會有InsertNum+1個第m幀。同時標(biāo)記區(qū)分真實幀和虛假幀,若InsertNum大于0,則用下式更新Rbudget 其中Rm是編碼第m幀時記錄的可能帶寬,Rn則是下一個真實幀在編碼時記錄的可能帶寬;若第m幀已經(jīng)是窗口內(nèi)的最后一個真實幀,則取Rn=Rm,即上式退化為 4.根據(jù)插幀處理后的滑動窗口以及各個幀的R-D曲線,以當(dāng)前窗口的可用帶寬Rbudget為上限,運行現(xiàn)有的一種FGS帶寬分配算法;這里,現(xiàn)有的算法可以是牛頓搜索法,二分搜索法,R-D曲線合成法等;以二分搜索法為例,運行算法的步驟如下 a.計算只發(fā)送窗口內(nèi)所有幀基本層的最小失真Dw; b.計算若R<Rbudget-δ,則令Dmin=Dw;若R>Rbudget+δ,則令Dmax=Dw; c.否則,結(jié)束算法 算法中的Dmin和Dmax為預(yù)定義的最小和最大失真,δ則是平衡因子,保證算法在有限步驟內(nèi)結(jié)束,Ri(D)則是各個視頻幀的R-D曲線方程。
5.根據(jù)算法結(jié)果發(fā)送滑動窗口中第一幀。清除該幀及與該幀相關(guān)的虛假幀,用下式更新Rbudget其中ri為當(dāng)前發(fā)送幀碼率,InsertNum則是插入的虛假幀的數(shù)量,rj則是各個虛假幀根據(jù)步驟(4)分配的發(fā)送碼率。若還有未發(fā)送幀,轉(zhuǎn)到步驟1;否則,結(jié)束算法。
本發(fā)明的算法與原有算法最大的不同之處是運行算法前滑動窗口內(nèi)不僅含有未發(fā)送的幀數(shù)據(jù),還包含了根據(jù)每幀SAD值插入的虛假幀。這樣,真正運行算法的窗口大小不是M,而是插幀后的大小(如圖2,3所示)。如此一來,本發(fā)明就可以設(shè)定一個較小的滑動窗口,來達(dá)到原有算法需要的較大的滑動窗口。此外,α以及SadThreshTable和InsertNumTable的定義值應(yīng)根據(jù)具體的應(yīng)用而定。
以下通過本發(fā)明算法和現(xiàn)有算法的對比,對本發(fā)明在保障帶寬分配效能的前提下有效降低算法時延的改進(jìn)予以說明。測試實驗采用標(biāo)準(zhǔn)測試序列Foreman_Cif,其分辨率為352×288,共200幀,幀率取為20,即測試時間長度為10秒。
實驗以R-D曲線合成法和本發(fā)明的算法作對比。其中R-D曲線合成法的滑動窗口分別為50和10,本發(fā)明的算法取α為0.5,即滑動窗口大小為10。測試中所用的帶寬變化如圖6所示。此外,測試中定義SadThreshTable和InsertNumTable取值如下SadThreshTable[6]={2,4,8,16,32,64},InsertNumTable[6]={10,8,6,4,2,1}(這些值為經(jīng)驗值)。
如圖7所示,改進(jìn)后的快速分配算法要好于同樣小窗口的R-D曲線合成法,且在多項統(tǒng)計上都較接近于使用大窗口的R-D曲線合成法。如圖8所示,由于使用了小滑動窗口,本發(fā)明的算法在處理每幀的消耗時間上卻有了大幅改進(jìn)。
應(yīng)用本發(fā)明的多媒體實時交互系統(tǒng)已多次在教育部、科技部的視頻會議中得到應(yīng)用。在教育部,超過150個大學(xué)和各個省市的教育主管部門已經(jīng)使用該系統(tǒng)作為教育部內(nèi)部的協(xié)同和會議平臺。證明了實際的應(yīng)用效果。
對于本領(lǐng)域的普通技術(shù)人員來說可顯而易見的得出其他優(yōu)點和修改。因此,具有更廣方面的本發(fā)明并不局限于這里所示出的并且所描述的具體說明及示例性實施例。因此,在不脫離由隨后權(quán)利要求及其等價體所定義的一般發(fā)明構(gòu)思的精神和范圍的情況下,可對其作出各種修改。
權(quán)利要求
1.一種基于滑動窗口的FGS帶寬快速分配算法,其特征在于步驟如下
(1)由精細(xì)可擴(kuò)展編碼FGS編碼器在編碼時提取當(dāng)前編碼幀的速率-失真R-D曲線及絕對誤差和SAD信息,并將該幀存入滑動窗口,同時更新窗口的可用帶寬Rbudget;
(2)若滑動窗口中真實幀數(shù)目小于預(yù)定閥值M,則轉(zhuǎn)到步驟(1);
(3)遍歷滑動窗口,對每個未做插幀處理的真實幀根據(jù)其SAD信息做插幀處理,其中插入幀標(biāo)記為虛假幀,更新窗口的可用帶寬Rbudget;
(4)根據(jù)插幀處理后的滑動窗口以及各個幀的R-D曲線,以當(dāng)前窗口的可用帶寬Rbudget為上限,運行FGS帶寬分配算法;
(5)根據(jù)FGS帶寬分配算法運行結(jié)果發(fā)送滑動窗口中第一幀,清除該幀及相關(guān)虛假幀,更新窗口可用帶寬值Rbudget,若還有未發(fā)送幀,則轉(zhuǎn)到步驟(1)。
2.根據(jù)權(quán)利要求1的一種基于滑動窗口的FGS帶寬快速分配算法,其特征在于所述的步驟(1)進(jìn)一步包括
(a)由FGS編碼器在編碼時提取當(dāng)前編碼幀的R-D曲線及SADavg值;
(b)將當(dāng)前編碼完成的視頻幀放入滑動窗口;
(c)設(shè)滑動窗口內(nèi)M幀的可用帶寬上限為Rbudget,算法開始時Rbudget為0,用下式更新RbudgetRbudget=Rbudget+Rcur/fps,其中fps為發(fā)送端幀率,Rcur為當(dāng)前實際測得的網(wǎng)絡(luò)可用帶寬,并記錄Rcur的值。
3.根據(jù)權(quán)利要求1的一種基于滑動窗口的FGS帶寬快速分配算法,其特征在于所述的步驟(3)進(jìn)一步包括
(a)根據(jù)標(biāo)記查找滑動窗口內(nèi)未做插幀處理的真實幀;
(b)若第m幀為未做插幀處理的真實幀,則根據(jù)其SADavg值由方法getInsertNum得到值InsertNum,在窗口內(nèi)第m幀之后插入InsertNum個第m幀。這樣窗口中就會有一模一樣的InsertNum+1個第m幀,同時標(biāo)記區(qū)分真實幀和插入的虛假幀;
(c)如果InsertNum的值大于0則以下式更新窗口的可用帶寬值Rbudget其中Rm是編碼第m幀時記錄的可能帶寬,Rn則是窗口內(nèi)下一個真實幀在編碼時記錄的可能帶寬;若第m幀已經(jīng)是窗口內(nèi)最后一個真實幀,則取Rn=Rm,即上式退化為
4.根據(jù)權(quán)利要求1的一種基于滑動窗口的FGS帶寬快速分配算法,其特征在于所述的步驟(5)進(jìn)一步包括
(a)根據(jù)算法結(jié)果發(fā)送滑動窗口內(nèi)第一幀;
(b)清除發(fā)送出去的那一幀,及與該幀相關(guān)的所有虛假幀;
(c)更新窗口的可用帶寬Rbudget,令其中ri為當(dāng)前發(fā)送幀的碼率,rj則是各個插入的虛假幀根據(jù)步驟(4)分配的發(fā)送碼率,InsertNum是該幀插入虛假幀的數(shù)量。
全文摘要
一種基于滑動窗口的FGS帶寬快速分配算法(1)由FGS編碼器在編碼時提取當(dāng)前編碼幀的R-D曲線及絕對誤差和SAD)信息,并將該幀放入滑動窗口內(nèi),更新窗口的可用帶寬值;(2)若滑動窗口內(nèi)真實幀數(shù)目小于預(yù)定閥值M,則轉(zhuǎn)到步驟(1);(3)遍歷整個滑動窗口,對每個未做插幀處理的真實幀根據(jù)其SAD信息做插幀處理,其中插入幀標(biāo)記為虛假幀,更新窗口的可用帶寬值;(4)根據(jù)插幀處理后的滑動窗口以及各個幀的R-D曲線,以當(dāng)前窗口的可用帶寬為上限,運行FGS帶寬分配算法;(5)根據(jù)算法結(jié)果發(fā)送滑動窗口內(nèi)第一幀,清除該幀及相關(guān)的虛假幀,更新窗口可用帶寬,若還有未發(fā)送幀則轉(zhuǎn)到步驟(1)。本發(fā)明根據(jù)相鄰幀的差異程度,以小滑動窗口插幀的方法來達(dá)到現(xiàn)有算法中大滑動窗口的效果,從而降低算法時延。
文檔編號H04N7/26GK101119489SQ20071012047
公開日2008年2月6日 申請日期2007年8月20日 優(yōu)先權(quán)日2007年8月20日
發(fā)明者華 繆, 單寶松, 強(qiáng) 曾, 劉祥龍 申請人:北京航空航天大學(xué)