專利名稱:語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及語音傳輸技術(shù)領(lǐng)域,尤其涉及一種語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法。
背景技術(shù):
隨著Internet(互聯(lián)網(wǎng))使用的普及和技術(shù)的不斷成熟,使得傳統(tǒng)的語音信息承載在Internet上傳輸成為可能,因此,VOIP(基于互聯(lián)網(wǎng)協(xié)議的語音)業(yè)務(wù)的各項技術(shù)也就應(yīng)運(yùn)而生。通過目前IP(互聯(lián)網(wǎng)協(xié)議)網(wǎng)進(jìn)行語音包傳遞主要面臨的是IP網(wǎng)中固有的延時、抖動、丟包、亂序等問題均會對VOIP的語音質(zhì)量造成影響,所謂網(wǎng)絡(luò)抖動,即延時變化。
在VOIP的應(yīng)用中,發(fā)送網(wǎng)關(guān)的DSP(數(shù)字信號處理)是以相同時間間隔發(fā)送經(jīng)過編碼壓縮后的語音包,如10毫秒、20毫秒、30毫秒。語音包經(jīng)過IP網(wǎng)后產(chǎn)生了抖動,到達(dá)接收網(wǎng)關(guān)時,相鄰語音包的時間間隔發(fā)生了變化,因此不再是發(fā)送時的相同間隔。這時,接收網(wǎng)關(guān)如果將收到的這些已經(jīng)產(chǎn)生抖動的語音包直接播放,則接收端用戶所聽到的就不是發(fā)送端用戶所說的話,從而影響了語音通信的質(zhì)量。
目前,解決這種網(wǎng)絡(luò)抖動的方法是在接收網(wǎng)關(guān)上增加一個抗抖動機(jī)制,即JB(抖動緩存,Jitter Buffer),將收到的語音包進(jìn)行一定時間的緩存,使得接收網(wǎng)關(guān)在播放接收到的語音包時,能以發(fā)送時的相同間隔進(jìn)行播放。這樣,通過在接收端增加一定的延時,從而消除了IP網(wǎng)產(chǎn)生的抖動問題。JB在網(wǎng)絡(luò)中的位置如圖1所示,通常位于接收網(wǎng)關(guān)處。
下面將要介紹一下現(xiàn)有技術(shù)中所采用的JB機(jī)制,為了便于理解相應(yīng)的JB機(jī)制首先需要對JB涉及的兩個重要概念進(jìn)行說明,即JB深度和JB長度。JB深度為第一個包到達(dá)JB隊列的時間與該包被播放(即出JB隊列)的時間之差,一旦第一個包的播放時間確定了,其后續(xù)包的播放時間也就跟著確定了,因此,JB深度用來描述一開始由JB隊列所產(chǎn)生的初始延時。JB長度則為JB隊列的物理長度,即在實現(xiàn)中JB隊列所能存放語音包的個數(shù)所對應(yīng)的時間長度,因此,JB長度反映的是JB隊列容納提早到達(dá)的語音包的能力。為此,JB長度的設(shè)置應(yīng)大于或等于JB深度。
目前所采用的解決抖動問題的技術(shù)方案主要是靜態(tài)的JB機(jī)制。所謂的靜態(tài)JB機(jī)制是指在整個通話過程中,JB深度保持不變。如圖2所示,發(fā)送方的階梯曲線表示發(fā)送方以相同的時間間隔發(fā)送數(shù)據(jù)包。由于網(wǎng)絡(luò)中的抖動,使得數(shù)據(jù)包到達(dá)接收方后就不再是等間距的階梯曲線了。靜態(tài)JB方案根據(jù)第一個包到達(dá)的時間t1和事先設(shè)定的JB深度確定出第一個包的播放時間,即確定了圖中的虛線,此后JB深度就不再改變了,后續(xù)包就按照圖中的虛線時間播放。當(dāng)數(shù)據(jù)包到達(dá)點落在虛線的左側(cè)時,表示該數(shù)據(jù)包提早到;當(dāng)落在右側(cè)時,表示數(shù)據(jù)包遲到,即錯過了該包應(yīng)該播放的時間,視為丟包。例如圖中虛線t2表示JB深度為(t2-t1),這個不變的JB深度導(dǎo)致了后續(xù)的第6、7、8個包丟失;而虛線t3表示JB深度設(shè)為(t3-t1),這個JB深度沒有造成丟包,但對前5個包造成了不必要的較大延時。
因此,上述方案中,由于語音包在IP網(wǎng)絡(luò)中經(jīng)歷的延時是隨當(dāng)前網(wǎng)絡(luò)狀況而不斷發(fā)生變化的,而且這種變化是無法預(yù)知的。因此,使用固定JB深度的靜態(tài)JB方案并不能很好地達(dá)到抗抖動的效果。如圖2所示,固定JB深度如果設(shè)小了,則會導(dǎo)致丟失率增加;如果設(shè)大了,會增加不必要的延時。丟包率和延時正是衡量VOIP語音質(zhì)量的兩個重要的參數(shù),這兩個參數(shù)的增大都會降低VOIP的語音質(zhì)量。
靜態(tài)JB方案的另外一個缺點是,后續(xù)語音包的播放時間受到第一個語音包的影響。因為圖2中的虛線是由第一個包到達(dá)時間和固定JB深度所確定的,而第一個包的到達(dá)時間也是隨機(jī)的,這樣,由于第一個包的早到或遲到都會影響靜態(tài)JB方案的效果。
發(fā)明內(nèi)容
鑒于上述現(xiàn)有技術(shù)所存在的缺點,本發(fā)明的目的是提供一種語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,從而使得接收網(wǎng)關(guān)的抗抖動機(jī)制能夠動態(tài)地適配變化的IP網(wǎng)絡(luò)。
本發(fā)明的目的是通過以下技術(shù)方案實現(xiàn)的本發(fā)明提供了一種語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,該方法包括A、統(tǒng)計并計算語音傳輸過程中的延時和抖動;B、根據(jù)所述的延時和抖動對接收端的抖動緩存進(jìn)行深度的調(diào)整。
所述的步驟A包括統(tǒng)計并計算語音傳輸過程中的平均延時和平均抖動,或者統(tǒng)計并計算語音傳輸過程中的最小延時和平均抖動,且所述的延時為語音數(shù)據(jù)包從發(fā)送方到接收方需要的時間,所述的抖動為各個語音數(shù)據(jù)包的延時的變化。
在上述步驟A中所述的平均延時dI和對應(yīng)的平均抖動vi分別為di=α×di-1+(1-α)×ni,vi=α×vi-1+(1-α)|di-ni|,α為通過測試獲得的權(quán)值因子,且0≤α≤1,i為語音數(shù)據(jù)包的序號;所述的最小延時為dmin和對應(yīng)的平均抖動為vi分別為dmin=min(dmin,ni),vi=α×vi-1+(1-α)(ni-dmin)。
所述的步驟A進(jìn)一步包括A1、接收語音數(shù)據(jù)包,計算該語音數(shù)據(jù)包的平均延時和平均抖動值;A2、將該語音數(shù)據(jù)包分拆為若干個以基本單位為打包時長的數(shù)據(jù)包,所述的基本單位是指JB(抖動緩存)隊列中每個元素的打包時長;
A3、將拆分后的數(shù)據(jù)包加入抖動緩存隊列中,同時,統(tǒng)計其中的丟包數(shù)量,并在丟包數(shù)量超過設(shè)定值時重新啟動JB隊列。
所述的步驟B包括B1、計算當(dāng)前語音數(shù)據(jù)包的實際播放時間,即為舊播放時間,并根據(jù)計算獲得的平均延時和平均抖動或最小延時和平均抖動計算當(dāng)前語音數(shù)據(jù)包的播放時間,稱為新播放時間;B2、根據(jù)所述的舊播放時間和所述的新播放時間,對接收端的抖動緩存隊列進(jìn)行深度的調(diào)整。
所述的步驟B1包括根據(jù)當(dāng)前的系統(tǒng)時間確定當(dāng)前語音包的舊播放時間;確定當(dāng)前語音數(shù)據(jù)包的新播放時間如果為基于平均延時和平均抖動計算,則所述的當(dāng)前的第一個語音數(shù)據(jù)包的新播放時間為pi=tsi+di+γ×vi,所述的后續(xù)的語音數(shù)據(jù)包的新播放時間為pj=pi+tsj-tsi,所述的i為當(dāng)前語音段的第一個語音數(shù)據(jù)包的序號,所述的j為后續(xù)的語音數(shù)據(jù)包的序號,所述的γ為對平均抖動的放大倍數(shù),所述的tsi和tsj分別為發(fā)送端發(fā)送第i個和第j個語音數(shù)據(jù)包的時間;如果為基于最小延時dmin和平均抖動計算,則所述的當(dāng)前語音數(shù)據(jù)包的新播放時間pi為pi=tsi+dmin+γ×vi,所述的后續(xù)的語音數(shù)據(jù)包的新播放時間pj為pj=pi+tsj-tsi。
所述的步驟B2包括當(dāng)語音傳輸過程中發(fā)生語音數(shù)據(jù)包丟失的情況時,或處于靜音期間時,則根據(jù)所述的語音數(shù)據(jù)包的舊播放時間和所述的新播放時間,對接收端的抖動緩存隊列進(jìn)行深度的調(diào)整。
所述的步驟B2包括B21、確定語音傳輸過程中的相應(yīng)靜音段的開始點;B22、在所述的靜音段的開始點根據(jù)所述的舊播放時間和所述的新播放時間,對接收端的抖動緩存隊列進(jìn)行深度的調(diào)整。
所述的步驟B22包括B221、計算新播放時間與舊播放時間間的差值,并判斷該差值的絕對值是否大于允許的最大調(diào)整幅度值,如果大于,則令允許的最大調(diào)整幅度值為本次JB調(diào)整的幅度值,否則,以所述的差值的絕對值作為本次JB調(diào)整的幅度值;B222、根據(jù)確定的本次JB調(diào)整的幅度值對所述的JB進(jìn)行深度調(diào)整。
所述的步驟B222包括根據(jù)確定的本次JB調(diào)整的幅度值,并通過調(diào)整JB的出隊指針進(jìn)行JB長度的調(diào)整,包括進(jìn)行增加JB深度的操作和縮短JB長度的操作。
本發(fā)明還包括,當(dāng)進(jìn)行所述的縮短JB深度的操作時,如果確定遇到語音數(shù)據(jù)包,則停止相應(yīng)的縮短JB深度的操作。
本發(fā)明中,所述的步驟B包括判斷上一次抖動緩存深度調(diào)整的時間距本次抖動緩存深度調(diào)整的時間的間隔值是否大于設(shè)定的允許進(jìn)行抖動緩存深度調(diào)整的最小間隔時間,如果是,則根據(jù)所述的延時和抖動對接收端的抖動緩存進(jìn)行深度的調(diào)整,否則,不進(jìn)行抖動緩存的濃度調(diào)整。
由上述本發(fā)明所提供的技術(shù)方案可以看出,本發(fā)明中,通過實時統(tǒng)計網(wǎng)絡(luò)的平均延時和平均抖動以準(zhǔn)確地反映出當(dāng)前網(wǎng)絡(luò)的狀況,并根據(jù)不斷變化的網(wǎng)絡(luò)中的平均延時和平均抖動狀況對JB深度進(jìn)行實時調(diào)整,從而使得接收網(wǎng)關(guān)的抗抖動機(jī)制能夠動態(tài)地適配變化的IP網(wǎng)絡(luò),降低了在網(wǎng)絡(luò)中傳輸語音的過程中的丟包率。本發(fā)明改變了原有的靜態(tài)JB的技術(shù)方案所存在的因JB無法靈活地適應(yīng)網(wǎng)絡(luò)狀況的變化而導(dǎo)致丟包率上升的問題。本發(fā)明中,在接收網(wǎng)關(guān)處可以根據(jù)實際需要靈活地選擇相應(yīng)的動態(tài)JB調(diào)整方案,以有效地改善網(wǎng)絡(luò)中的語音傳輸效果。在相應(yīng)產(chǎn)品中的測試結(jié)果表明本發(fā)明能很好地達(dá)到語音傳輸過程中的較佳的抗抖動效果,特別在網(wǎng)絡(luò)質(zhì)量較差的情況下可以較大地提高VOIP的語音質(zhì)量。
圖1為JB應(yīng)用的網(wǎng)絡(luò)環(huán)境示意圖;圖2為基于靜態(tài)JB的語音數(shù)據(jù)包收發(fā)延時示意圖;圖3為本發(fā)明中各個變量的含義的示意圖;圖4為本發(fā)明中所述的隨機(jī)調(diào)整方式的示意圖;圖5為本發(fā)明中所述的靜音期間調(diào)整方式的示意圖;圖6為本發(fā)明中所述的入隊處理過程的流程圖;圖7A、7B、7C為本發(fā)明中所述的出隊處理過程的流程圖;圖8為本發(fā)明中所述的動態(tài)調(diào)整JB深度處理過程的流程圖。
具體實施例方式
本發(fā)明提出了一種語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,該方法首先針對現(xiàn)有的靜態(tài)JB提出了動態(tài)調(diào)整JB的概念,其次該方法提供了基于語音傳輸過程中產(chǎn)生的延時和抖動對接收端的JB的深度進(jìn)行動態(tài)的調(diào)整,即兼顧了網(wǎng)絡(luò)中進(jìn)行語音傳輸時所產(chǎn)生的抖動和延時對JB的深度的不同要求,并進(jìn)行相應(yīng)的調(diào)整,從而有效地改善語音傳輸?shù)馁|(zhì)量,針對無法預(yù)計其延時變化的IP網(wǎng)絡(luò),采用動態(tài)JB可以達(dá)到很好的達(dá)到抗抖動效果,減少不必要丟包率或延時。如果僅根據(jù)平均抖動的變化作為JB深度需要調(diào)整的幅度,則當(dāng)網(wǎng)絡(luò)的平均延時增大,但平均抖動是不變時,無需對JB深度進(jìn)行調(diào)整,而實際上由于平均延時增大,JB深度是需要進(jìn)行增加調(diào)整的;因此,單純依據(jù)平均抖動變化而不引入平均延時是無法準(zhǔn)確地進(jìn)行JB深度的調(diào)整,以適應(yīng)不同的網(wǎng)絡(luò)傳輸狀況。
本發(fā)明中,可以采用實時地計算當(dāng)前網(wǎng)絡(luò)的平均延時和平均抖動,并根據(jù)實時統(tǒng)計的網(wǎng)絡(luò)信息,動態(tài)調(diào)整JB深度的方便,從而使JB的深度可以適應(yīng)當(dāng)前的網(wǎng)絡(luò)狀況,降低了網(wǎng)絡(luò)中的丟包率和延時,提高了VOIP(基于IP的語音業(yè)務(wù))的語音質(zhì)量。本發(fā)明的實現(xiàn)使得JB的深度不再僅與第一個語音數(shù)據(jù)包的到達(dá)時間的相關(guān),如果第一個語音數(shù)據(jù)包早到或遲到導(dǎo)致JB的深度無法適應(yīng)以后的需要,則可以通過后續(xù)的動態(tài)調(diào)整過程對JB深度進(jìn)行調(diào)整補(bǔ)償。
本發(fā)明所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法具體包括以下處理過程步驟1實時統(tǒng)計并計算語音傳輸過程中的延時和抖動,以便于根據(jù)所述的延時和抖動確定所述的JB深度需要調(diào)整的幅度值;為準(zhǔn)確地衡量每次JB深度調(diào)整需要調(diào)整的幅度值,以保證調(diào)整后的JB可以很好地適應(yīng)相應(yīng)的網(wǎng)絡(luò)傳輸情況,減少語音數(shù)據(jù)包的丟包率,并保證語音的質(zhì)量;為此,可以根據(jù)語音傳輸過程中的平均延時和平均抖動進(jìn)行相應(yīng)的JB深度的調(diào)整,還可以根據(jù)語音傳輸過程中的最小延時和平均抖動進(jìn)行相應(yīng)的JB深度的調(diào)整,下面分別說明如何計算所述的各值(1)實時統(tǒng)計網(wǎng)絡(luò)狀況、計算每個包的播放時間,并通過如下公式對每個收到的語音數(shù)據(jù)包計算當(dāng)前網(wǎng)絡(luò)的平均延時di和平均抖動vi,其中涉及的ni為第i個語音數(shù)據(jù)包在網(wǎng)絡(luò)中的總延時,ai為第i個語音數(shù)據(jù)包到達(dá)接收網(wǎng)送的時間(取自接收網(wǎng)關(guān)的系統(tǒng)時間),tsi為發(fā)送第i個語音數(shù)據(jù)包的時間(取自發(fā)送網(wǎng)關(guān)的DSP采樣時間),α為可調(diào)的權(quán)植因子ni=ai-tsi→(算式1)di=α×di-1+(1-α)×ni→(算式2)vi=α×vi-1+(1-α)×|di-ni|→(算式3)其中0≤α≤1語音數(shù)據(jù)包到達(dá)接收網(wǎng)關(guān)的時間和時戳之差就是語音數(shù)據(jù)包在網(wǎng)絡(luò)中的相對延時ni;在此,我們并不考慮發(fā)送網(wǎng)關(guān)和接收網(wǎng)關(guān)的時鐘同步問題。動態(tài)JB關(guān)注的問題是網(wǎng)絡(luò)中的抖動,即延時的變化;而并不關(guān)注網(wǎng)絡(luò)中產(chǎn)生的絕對延時,因此,只要保證發(fā)送網(wǎng)關(guān)和接收網(wǎng)關(guān)的相對時鐘同步即可;上式中,通過對所述的α的調(diào)整可以設(shè)置本次數(shù)據(jù)包的計算值對平均值的影響程度,α可在實現(xiàn)中根據(jù)實際網(wǎng)絡(luò)狀況選擇最優(yōu)的權(quán)值;(2)在對每個語音數(shù)據(jù)包進(jìn)行網(wǎng)絡(luò)狀況統(tǒng)計時,所述的最小延時dmin和平均抖動vi2為根據(jù)如下算式進(jìn)行計算ni=ai-tsi→(算式4)dmin=min(dmin,ni)→(算式5)vi=α×vi-1+(1-α)×(ni-dmin)→(算式6)ni為第i個語音數(shù)據(jù)包在網(wǎng)絡(luò)中的延時,dmin為最小延時,記錄最小的網(wǎng)絡(luò)延時;vi為平均抖動,與(1)中計算過程不同的是第i個語音數(shù)據(jù)包的抖動只要把第i個語音數(shù)據(jù)包的網(wǎng)絡(luò)延時減去最小延時即可,而不必再進(jìn)行取絕對值操作了,所述的α仍然是可調(diào)的權(quán)植因子。
步驟2根據(jù)所述的平均延時和平均抖動,或者根據(jù)所述的最小延時和平均抖動計算每個語音數(shù)據(jù)包的播放時間,即語音數(shù)據(jù)包的新的播放時間;同時,還需要計算語音數(shù)據(jù)包的實際播放時間,即舊的播放時間;即以實時統(tǒng)計的網(wǎng)絡(luò)中的語音傳輸?shù)钠骄訒r和平均抖動或最小延時和平均抖動作為計算依據(jù),計算每個語音數(shù)據(jù)包的播放時間;以系統(tǒng)的當(dāng)前時間為依據(jù)計算當(dāng)前語音數(shù)據(jù)包的實際播放時間,如果以平均延時和平均抖動為依據(jù)計算所述的語音數(shù)據(jù)包的播放時間時,具體計算可以采用以下算式進(jìn)行,公式如下pi=tsi+di+γ×vi→(算式7)pj=pi+tsj-tsi→(算式8)其中,i為當(dāng)前語音段的第一個語音數(shù)據(jù)包的序號,且pi為當(dāng)前的第一個語音數(shù)據(jù)包的新的播放時間;j為當(dāng)前語音段的后續(xù)的語音數(shù)據(jù)包的序號,且pj為后續(xù)的語音數(shù)據(jù)包的新的播放時間;γ表示對平均抖動的放大倍數(shù),可在實現(xiàn)中根據(jù)實際網(wǎng)絡(luò)狀況選擇最優(yōu)的放大倍數(shù);如果以最小延時和平均抖動為依據(jù)計算所述的語音數(shù)據(jù)包的播放時間,則在計算每個語音數(shù)據(jù)包的播放時間可以采用如下算式
pj=pi+tj-ti→(算式10)其中,i為當(dāng)前語音段的第一個語音數(shù)據(jù)包的序號,且pi為當(dāng)前的第一個語音數(shù)據(jù)包的新的播放時間,j為當(dāng)前語音段的后續(xù)的語音數(shù)據(jù)包的序號;且pj為后續(xù)的語音數(shù)據(jù)包的新的播放時間;γ表示對平均抖動的放大倍數(shù),可在實現(xiàn)中根據(jù)實際網(wǎng)絡(luò)狀況選擇最優(yōu)的放大倍數(shù);與前面不同的是,在計算pi時,不再使用平均延時,而是使用最小延時和平均抖動;根據(jù)最小延時和平均抖動計算所述的語音數(shù)據(jù)包的播放時間時,因只要進(jìn)行比較操作,所以計算量減小;而且,計算平均抖動時可以不必考慮取絕對值操作;然而,依據(jù)該方法計算出的播放時間進(jìn)行JB深度調(diào)整,將可能導(dǎo)致JB深度不斷增長,即計算出的pi值會偏大,例如,當(dāng)網(wǎng)絡(luò)正常時最小延時為dmin,經(jīng)過一段時間后,由于某臺關(guān)鍵路徑上的路由器癱瘓而導(dǎo)致網(wǎng)絡(luò)延時增加并且持續(xù)了一段時間,此時仍然使用網(wǎng)絡(luò)正常狀況下記錄的dmin,將導(dǎo)致平均抖動增大,再經(jīng)過γ倍的放大后,最終導(dǎo)致每次計算出的pi都會偏大;因此,如果要使用該方法還需要避免JB深度不斷增大,例如可以采用當(dāng)dmin值在設(shè)定的一段時間內(nèi)沒有更新時,則強(qiáng)迫更新其值,從而避免JB深度不斷增大。
步驟3根據(jù)所述的當(dāng)前語音數(shù)據(jù)包的新的播放時間與舊的播放時間的差值進(jìn)行JB深度的調(diào)整,即根據(jù)所述的差值確定JB深度需要調(diào)整的幅度值;對JB深度通常采用調(diào)整JB隊列出隊指針的方式進(jìn)行,如果增大JB的深度,則將相應(yīng)的出隊指針作遞減處理,如果減小JB的深度,則將相應(yīng)的出隊指針作遞增處理,所述的遞增或遞減的量則由所述的JB深度需要調(diào)整的幅度值確定;通常在對JB深度進(jìn)行調(diào)整時,為保證語音傳輸過程的相對穩(wěn)定,還需要考慮兩方面的問題,一方面是確定合適的對JB深度進(jìn)行調(diào)整的頻度,過于頻繁的調(diào)整將導(dǎo)致JB深度的反復(fù)振蕩,而頻度大小又無法很好地體現(xiàn)出動態(tài)JB的優(yōu)點,另一方面是對JB深度進(jìn)行調(diào)整的幅度,如果一次調(diào)整的幅度過大,會出現(xiàn)JB深度瞬間大幅度伸長或大幅度縮減,對語音的瞬間傳輸效果產(chǎn)生較大的影響;另外,對JB深度進(jìn)行動態(tài)調(diào)整時,還需要確定一個調(diào)整的時間點;由于在一個持續(xù)通話中,通話雙方傳送的語音數(shù)據(jù)通常是一段語音和一段靜音交替出現(xiàn),因此,動態(tài)調(diào)整JB深度時間點可以采用兩種方式確定一種是隨機(jī)調(diào)整的方式,即語音傳輸過程中一旦出現(xiàn)丟包情況便立刻進(jìn)行JB深度的調(diào)整,如圖4所示,語音段K的第i+1個語音數(shù)據(jù)包遲到導(dǎo)致丟包,這時立刻根據(jù)相應(yīng)的計算結(jié)果進(jìn)行JB深度增長調(diào)整,從而使得后續(xù)的第i+2、i+3、i+4個包不被丟棄;隨機(jī)調(diào)整方式的優(yōu)點是減少丟包率,但會損壞通話的語音質(zhì)量,影響交互通話的可理解性,例如當(dāng)調(diào)整點恰好落在語音段時,此時如果增加JB深度會使一句連貫的話中出現(xiàn)了不應(yīng)該的停頓;相反,如果減少JB深度會使一句話中的若干部分丟失,這些都會造成語音質(zhì)量的下降;另一種方案是靜音期間調(diào)整的方式,即動態(tài)調(diào)整的時間點選擇在靜音期間,采用這種方案就可以避免第一種方案中造成的語音質(zhì)量下降;如果在靜音期間進(jìn)行動態(tài)JB的調(diào)整,增加和減小JB深度只會影響靜音階段持續(xù)時間的長短,而靜音階段持續(xù)時間的稍微增長或縮短并不會影響到語音質(zhì)量;如圖5所示,在語音段K中,即使出現(xiàn)了丟包也不進(jìn)行調(diào)整,在靜音段K中進(jìn)行動態(tài)JB深度增長調(diào)整,使得后續(xù)的語音段K+1不再出現(xiàn)丟包,所產(chǎn)生的影響只是靜音段K的稍微增長。
下面以靜音期間調(diào)整的方式為例,對本發(fā)明所述的的基于平均延時和平均抖動的動態(tài)調(diào)整JB的實現(xiàn)方法作進(jìn)一步說明,具體的實現(xiàn)過程可以包括三個處理過程,分別為語音數(shù)據(jù)包入隊的處理過程、出隊的處理過程、動態(tài)調(diào)整JB深度的處理過程。JB中的JB隊列按時戳進(jìn)行排序,JB隊列的每個元素代表不同編解碼打包時長的基本單位,如G.711規(guī)定基本單位為10ms、G.729規(guī)定基本單位為10ms、G.723規(guī)定基本單位為30ms。
首先,對語音數(shù)據(jù)包入隊的處理過程進(jìn)行說明,語音數(shù)據(jù)包入隊過程中除了對所述的語音數(shù)據(jù)包進(jìn)行加入JB隊列的處理外,還需要計算所述的語音數(shù)據(jù)包的ni、di、vi,以便于后面的動態(tài)調(diào)整JB深度的處理過程根據(jù)該計算結(jié)果進(jìn)行相應(yīng)的調(diào)整,對ni、di、vi的計算可以采用前面描述過的算式實現(xiàn),其中,考慮到算法在CPU(中央處理器)上的運(yùn)行效率,所述的α的取值都應(yīng)為2的N次冪的倒數(shù),如0.875,0.75等,這樣,在實現(xiàn)時可使用移位運(yùn)算完成,例如,通過在網(wǎng)上實際測試得出α取值0.75時效果最佳,故α取值0.75。除上述計算外,對語音數(shù)據(jù)包進(jìn)行加入JB隊列的處理過程如圖6所示,具體包括以下步驟步驟61進(jìn)行語音數(shù)據(jù)包的拆包處理,即將各種編解碼各種打包時長的單個數(shù)據(jù)包拆成若干個以基本單位為打包時長的數(shù)據(jù)包,除了拆分語音數(shù)據(jù)包凈荷部分外,還包括對拆分后各個RTP(實時傳輸協(xié)議)包首部時戳的重新計算,以確定新的時間戳。
步驟62定義一個丟包計數(shù)器變量ucLossCounter,用于記錄連續(xù)的無法進(jìn)入JB隊列的數(shù)據(jù)包個數(shù),即語音數(shù)據(jù)包因遲到或早到導(dǎo)致丟包時,該變量開始計數(shù)。
步驟63判斷當(dāng)前的拆分獲得的數(shù)據(jù)包能否入JB隊列,如果能,則執(zhí)行步驟64,否則,執(zhí)行步驟65;步驟64令丟包計數(shù)器變量ucLossCounter=0,并保存當(dāng)前的數(shù)據(jù)包;另外,為確定保存的數(shù)據(jù)包不是重復(fù)的數(shù)據(jù)包,該步驟中在保存當(dāng)前的數(shù)據(jù)包前還需要判斷所述的數(shù)據(jù)包是否為重復(fù)的數(shù)據(jù)包,如果是,則作丟棄處理,如果不是,則保存。
步驟65確定該數(shù)據(jù)包為遲到或早到的數(shù)據(jù)包而無法加入JB隊列,即該數(shù)據(jù)包為丟棄的數(shù)據(jù)包,將丟包計數(shù)器變量ucLossCounter作加1處理;此處還需要分別對遲到、早到的數(shù)據(jù)包進(jìn)行統(tǒng)計,作為測試JB效果的參數(shù),以便于根據(jù)該參數(shù)確定本發(fā)明中涉及的可調(diào)的參數(shù),如α和γ等。
步驟66判斷丟包計數(shù)器變量ucLossCounter是否小于設(shè)定的丟包數(shù)量,如果小于,則執(zhí)行步驟67,不對JB隊列作處理,否則,執(zhí)行步驟68,重新啟動JB隊列;例如可以設(shè)定允許的丟包數(shù)量為3,則當(dāng)連續(xù)三個數(shù)據(jù)包無法入JB隊列時,便重啟JB隊列,同時為監(jiān)測網(wǎng)絡(luò)在一段時間內(nèi)的語音傳輸性能,還需要對JB重新啟動的次數(shù)進(jìn)行統(tǒng)計,如果重新啟動的次數(shù)過多則說明網(wǎng)絡(luò)中存在著較嚴(yán)重的延時和抖動,如不進(jìn)行維護(hù)已經(jīng)無法再進(jìn)行語音數(shù)據(jù)的傳輸。
相應(yīng)的數(shù)據(jù)包進(jìn)入JB隊列緩存后,經(jīng)過一定的延時后,接著,還需要對所述的數(shù)據(jù)包進(jìn)行出隊處理,具體的處理過程如圖7所示,包括以下步驟步驟71定義靜態(tài)變量空包計數(shù)器變量和調(diào)整頻度變量,分別用于統(tǒng)計連續(xù)的空包的數(shù)量,及連續(xù)兩次調(diào)整間隔的時間值;所述的空包計數(shù)器變量用于確定當(dāng)前是否處于靜音期間;所述的JB隊列初始延時計數(shù)器用于實現(xiàn)一個設(shè)定的JB隊列的初始延時,如初始可以設(shè)置為50ms,則經(jīng)過50ms后JB隊列中的數(shù)據(jù)包方可出隊;具體的計數(shù)方式為當(dāng)需要執(zhí)行一次出隊處理時,判斷初始延時計數(shù)器值是否小于或等于0,如果不是,則減去JB隊列元素的基本單位(如10ms),如此循環(huán)操作,直到所述的初始延時計數(shù)器值小于或等于0時,開始進(jìn)行出隊處理,即執(zhí)行以下步驟。
步驟72判斷出JB隊列的數(shù)據(jù)包的類型,即根據(jù)數(shù)據(jù)包中的記錄其類型的字段值確定數(shù)據(jù)包的類型,如果是空包,則執(zhí)行步驟73,如果是靜音包,則執(zhí)行步驟74,對于語音包,則執(zhí)行步驟75。
步驟73對所述的空包進(jìn)行進(jìn)一步的處理,包括步驟731根據(jù)靜間標(biāo)志判斷當(dāng)前是否處于靜音期間,如果該標(biāo)志為true,則為處于靜音期間,如果為false,則不處于靜音期間,從而進(jìn)一步確定該空包是否為靜音包,如果是,則執(zhí)行步驟732,否則,執(zhí)行步驟733;步驟732令空包計數(shù)器值為“0”,并創(chuàng)建非傳輸幀,執(zhí)行步驟736;步驟733令空包計數(shù)器值加1,并判斷空包計數(shù)器計數(shù)值是否大于設(shè)定值,如果大于,則執(zhí)行步驟734,否則,執(zhí)行步驟735;步驟734將所述的靜音標(biāo)志設(shè)置為true,確定當(dāng)前處于靜音期間,并確定該數(shù)據(jù)包為靜音包,創(chuàng)建非傳輸幀,執(zhí)行步驟736;步驟735創(chuàng)建丟包指示幀,以便于進(jìn)行相應(yīng)的丟包數(shù)量的統(tǒng)計,并執(zhí)行步驟736;步驟731至步驟735的處理過程主要為區(qū)分當(dāng)出隊的元素為空(即為空包)且當(dāng)前不是處于靜音期間時所存在的兩種可能一種是當(dāng)前出隊的數(shù)據(jù)包應(yīng)該為語音包,但由于該數(shù)據(jù)包遲于其播放時間到達(dá),造成丟包,這時應(yīng)向DSP下發(fā)丟包指示幀;第二種可能是在此之前,丟失了一個靜音幀,因而沒有將靜音標(biāo)志置為靜音期間,這時向DSP下發(fā)的應(yīng)是非傳輸幀而不是丟包指示幀;例如,可以設(shè)定當(dāng)空包計數(shù)器變量ucEmptyCounter記錄的連續(xù)出現(xiàn)次數(shù)小于2次時,將當(dāng)前空包當(dāng)成丟包指示幀下發(fā);當(dāng)次數(shù)大于等于2次時,當(dāng)成非傳輸幀下發(fā),同時把當(dāng)前靜音標(biāo)志改為靜音期間;步驟736將數(shù)據(jù)包出隊,統(tǒng)計出隊數(shù)據(jù)包數(shù)量,并更新出隊指針和出隊時戳。
步驟74對靜音包作進(jìn)一步的處理,具體包括步驟741令空包計數(shù)器計數(shù)值為“0”,且記錄當(dāng)前最靜音包大序列號,并將數(shù)據(jù)包的RTP頭部轉(zhuǎn)換成DSP頭部;步驟742將數(shù)據(jù)包出隊,統(tǒng)計出隊數(shù)據(jù)包數(shù)量,并更新出隊指針和出隊時戳;
步驟743判斷靜間標(biāo)志是否為靜音期間的標(biāo)志,如果是,則執(zhí)行步驟744,即不作任何處理,如果不是,則將靜音標(biāo)志設(shè)置為靜音期間的標(biāo)志,并執(zhí)行步驟745;步驟745判斷當(dāng)前調(diào)整頻度變量的統(tǒng)計值是否大于設(shè)定的允許的兩次JB深度調(diào)整的間隔時間(即調(diào)整頻度控制因子),如果是,則執(zhí)行步驟746,否則,執(zhí)行步驟747;所述的調(diào)整頻度控制因子為通過一個計時器進(jìn)行統(tǒng)計,每進(jìn)行一次JB深度調(diào)整,則該計時器清“0”,并始重新計時,當(dāng)需要進(jìn)行新的一次的JB深度的調(diào)整時,判斷該計時值是否大于設(shè)定的值(即設(shè)定的允許的兩次JB深度調(diào)整的間隔時間),如果大于,則執(zhí)行步驟746,否則,執(zhí)行步驟747;所述的調(diào)整頻度控制因子為通過測試獲得,可以在實際網(wǎng)或模擬實際網(wǎng)上測試獲得,例如可以取值為100毫秒,即控制兩次動態(tài)JB調(diào)整的時間間隔至少為100毫秒;步驟746進(jìn)行JB深度的調(diào)整,具體的調(diào)整過程,將在后面的動態(tài)調(diào)整JB深度的處理過程中進(jìn)行說明;步驟747針對該靜音包的處理過程結(jié)束。
步驟75對所述的語音包進(jìn)行處理,具體包括步驟751令空包計數(shù)器變量為“0”,如果所述的靜音標(biāo)志為靜音期間的標(biāo)志,還需要將所述的靜音標(biāo)志改為非靜音期間的標(biāo)志;步驟752記錄當(dāng)前的數(shù)據(jù)包的最大序列號,并將所述的RTP頭部轉(zhuǎn)換成DSP頭部;步驟753出隊并統(tǒng)計出隊的數(shù)據(jù)包的數(shù)量,更新出隊指針和出隊時戳,本次語音包的處理過程結(jié)束。
最后,對所述的動態(tài)調(diào)整JB深度的處理過程進(jìn)行說明。對JB深度進(jìn)行調(diào)整時,具體的調(diào)整點選擇在每個靜音段的開始點,以避免在語音段開始點進(jìn)行縮短JB深度的調(diào)整,導(dǎo)致丟棄該語音段的前面若干語音包,造成語音質(zhì)量下降的現(xiàn)象出現(xiàn);具體的處理過程參見圖8,包括以下步驟步驟81為判斷是否需要進(jìn)行JB深度的動態(tài)調(diào)整時,首先需要計算當(dāng)前靜音包的實際播放時間,定義為舊播放時間,所述的舊播放時間為根據(jù)當(dāng)前的系統(tǒng)時間確定,即舊播放時間=系統(tǒng)當(dāng)前時間×?xí)r間轉(zhuǎn)換變量,所述的時間轉(zhuǎn)換變量為將毫秒轉(zhuǎn)換為系統(tǒng)的計時單位1/8毫秒;步驟82根據(jù)前面所述的算式7或算式9,計算出當(dāng)前靜音包的播放時間,定義為新播放時間,新播放時間就是符合當(dāng)前網(wǎng)絡(luò)抖動狀況的播放時間;步驟83計算新播放時間和舊播放時間之差,即為JB深度需要調(diào)整的幅度,為便于進(jìn)行調(diào)整還需要將所得的差值除以JB的元素長度值(即打包時長的基本單位),獲得最終的JB深度需要調(diào)整的幅度值,如果所得的差值為“0”,則不需要進(jìn)行調(diào)整;步驟84比較確定所述的幅度值的絕對值與設(shè)定的允許的一次最大調(diào)整的幅度值中較小的一個,作為實際針對JB調(diào)整的幅度值;所述的允許的一次最大調(diào)整的幅度值即為調(diào)整幅度控制因子,通過實際網(wǎng)或模擬實際網(wǎng)上測試,取值可以為10,單位為JB隊列單元格所對應(yīng)的時間(即基本單位),例如編解碼為G.711時,動態(tài)JB一次調(diào)整的幅度范圍允許為增長或縮短JB深度(10×10)毫秒;步驟85判斷所述的計算獲得的幅度值是否小于“0”,如果是執(zhí)行步驟86,否則,執(zhí)行步驟87;步驟86對JB進(jìn)行深度縮短的調(diào)整,具體為步驟861建立循環(huán)變量,并令其初始值為“0”;步驟862判斷循環(huán)變量是否小于實際針對JB調(diào)整的幅度值,如果是,則執(zhí)行步驟863,否則,執(zhí)行步驟88;步驟863判斷當(dāng)前數(shù)據(jù)包是否為語音包,如果是語音包,則執(zhí)行步驟88,否則,執(zhí)行步驟864;
即在進(jìn)行JB深度縮短操作時,只要遇到語音包就立刻停止縮短調(diào)整,以保證JB深度調(diào)整時不刪除任何語音包,避免由于JB深度動態(tài)調(diào)整造成的語音質(zhì)量下降;步驟864將當(dāng)前數(shù)據(jù)包類型置為空包,并將出隊指針遞增1,循環(huán)變量加1,執(zhí)行步驟862;步驟87對JB進(jìn)行深度增長調(diào)整,具體為步驟871建立循環(huán)變量,并令其初始值為“0”;步驟872判斷循環(huán)變量是否小于實際針對JB調(diào)整的幅度值,如果是,則執(zhí)行步驟863,否則,執(zhí)行步驟88;步驟873將出隊指針遞減1,并將當(dāng)前數(shù)據(jù)包類型置為空包,循環(huán)變量加1,執(zhí)行步驟872;步驟88根據(jù)調(diào)整的結(jié)果更新JB的深度值,過程結(jié)束。
由上述針對本發(fā)明的詳細(xì)的描述可以看出,與靜態(tài)JB相比,本發(fā)明能根據(jù)不斷變化的網(wǎng)絡(luò)狀況進(jìn)行動態(tài)JB深度的實時調(diào)整,使得接收網(wǎng)關(guān)的抗抖動機(jī)制能夠動態(tài)地適配變化的IP網(wǎng)絡(luò)。通過實時統(tǒng)計網(wǎng)絡(luò)的平均延時和平均抖動可以準(zhǔn)確地反映出當(dāng)前網(wǎng)絡(luò)的狀況。
以上所述,僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求書的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于包括A、統(tǒng)計并計算語音傳輸過程中的延時和抖動;B、根據(jù)所述的延時和抖動對接收端的抖動緩存進(jìn)行深度的調(diào)整。
2.根據(jù)權(quán)利要求1所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于所述的步驟A包括統(tǒng)計并計算語音傳輸過程中的平均延時和平均抖動,或者統(tǒng)計并計算語音傳輸過程中的最小延時和平均抖動,且所述的延時為語音數(shù)據(jù)包從發(fā)送方到接收方需要的時間,所述的抖動為各個語音數(shù)據(jù)包的延時的變化。
3.根據(jù)權(quán)利要求2所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于,在所述的步驟A中所述的平均延時dI和對應(yīng)的平均抖動vi分別為di=α×di-1+(1-α)×ni,vi=α×vi-1+(1-α)|di-ni|,α為通過測試獲得的權(quán)值因子,且0≤α≤1,i為語音數(shù)據(jù)包的序號;所述的最小延時為dmin和對應(yīng)的平均抖動為vi分別為dmin=min(dmin,ni),vi=α×vi-1+(1-α)(ni-dmin)。
4.根據(jù)權(quán)利要求1所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于所述的步驟A包括A1、接收語音數(shù)據(jù)包,計算該語音數(shù)據(jù)包的平均延時和平均抖動值;A2、將該語音數(shù)據(jù)包分拆為若干個以基本單位為打包時長的數(shù)據(jù)包,所述的基本單位是指JB(抖動緩存)隊列中每個元素的打包時長;A3、將拆分后的數(shù)據(jù)包加入抖動緩存隊列中,同時,統(tǒng)計其中的丟包數(shù)量,并在丟包數(shù)量超過設(shè)定值時重新啟動JB隊列。
5.根據(jù)權(quán)利要求1或4所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于所述的步驟B包括B1、計算當(dāng)前語音數(shù)據(jù)包的實際播放時間,即為舊播放時間,并根據(jù)計算獲得的平均延時和平均抖動或最小延時和平均抖動計算當(dāng)前語音數(shù)據(jù)包的播放時間,稱為新播放時間;B2、根據(jù)所述的舊播放時間和所述的新播放時間,對接收端的抖動緩存隊列進(jìn)行深度的調(diào)整。
6.根據(jù)權(quán)利要求5所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于所述的步驟B1包括根據(jù)當(dāng)前的系統(tǒng)時間確定當(dāng)前語音包的舊播放時間;確定當(dāng)前語音數(shù)據(jù)包的新播放時間如果為基于平均延時和平均抖動計算,則所述的當(dāng)前的第一個語音數(shù)據(jù)包的新播放時間為pi=tsi+di+γ×vi,所述的后續(xù)的語音數(shù)據(jù)包的新播放時間為pj=pi+tsj-tsi,所述的i為當(dāng)前語音段的第一個語音數(shù)據(jù)包的序號,所述的j為后續(xù)的語音數(shù)據(jù)包的序號,所述的γ為對平均抖動的放大倍數(shù),所述的tsi和tsj分別為發(fā)送端發(fā)送第i個和第j個語音數(shù)據(jù)包的時間;如果為基于最小延時dmin和平均抖動計算,則所述的當(dāng)前語音數(shù)據(jù)包的新播放時間pi為pi=tsi+dmin+γ×vi,所述的后續(xù)的語音數(shù)據(jù)包的新播放時間pj為pj=pi+tsj-tsi。
7.根據(jù)權(quán)利要求5所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于所述的步驟B2包括當(dāng)語音傳輸過程中發(fā)生語音數(shù)據(jù)包丟失的情況時,或處于靜音期間時,則根據(jù)所述的語音數(shù)據(jù)包的舊播放時間和所述的新播放時間,對接收端的抖動緩存隊列進(jìn)行深度的調(diào)整。
8.根據(jù)權(quán)利要求5所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于所述的步驟B2包括B21、確定語音傳輸過程中的相應(yīng)靜音段的開始點;B22、在所述的靜音段的開始點根據(jù)所述的舊播放時間和所述的新播放時間,對接收端的抖動緩存隊列進(jìn)行深度的調(diào)整。
9.根據(jù)權(quán)利要求8所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于所述的步驟B22包括B221、計算新播放時間與舊播放時間間的差值,并判斷該差值的絕對值是否大于允許的最大調(diào)整幅度值,如果大于,則令允許的最大調(diào)整幅度值為本次JB調(diào)整的幅度值,否則,以所述的差值的絕對值作為本次JB調(diào)整的幅度值;B222、根據(jù)確定的本次JB調(diào)整的幅度值對所述的JB進(jìn)行深度調(diào)整。
10.根據(jù)權(quán)利要求9所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于所述的步驟B222包括根據(jù)確定的本次JB調(diào)整的幅度值,并通過調(diào)整JB的出隊指針進(jìn)行JB長度的調(diào)整,包括進(jìn)行增加JB深度的操作和縮短JB長度的操作。
11.根據(jù)權(quán)利要求10所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于,當(dāng)進(jìn)行所述的縮短JB深度的操作時,如果確定遇到語音數(shù)據(jù)包,則停止相應(yīng)的縮短JB深度的操作。
12.根據(jù)權(quán)利要求1或4所述的語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法,其特征在于所述的步驟B包括判斷上一次抖動緩存深度調(diào)整的時間距本次抖動緩存深度調(diào)整的時間的間隔值是否大于設(shè)定的允許進(jìn)行抖動緩存深度調(diào)整的最小間隔時間,如果是,則根據(jù)所述的延時和抖動對接收端的抖動緩存進(jìn)行深度的調(diào)整,否則,不進(jìn)行抖動緩存的濃度調(diào)整。
全文摘要
本發(fā)明涉及一種語音傳輸過程中實現(xiàn)動態(tài)調(diào)整抖動緩存的方法。該方法通過實時統(tǒng)計網(wǎng)絡(luò)的平均延時和平均抖動以準(zhǔn)確地反映出當(dāng)前網(wǎng)絡(luò)的狀況,并根據(jù)不斷變化的網(wǎng)絡(luò)中的平均延時和平均抖動狀況對JB深度進(jìn)行實時調(diào)整,從而使得接收網(wǎng)關(guān)的抗抖動機(jī)制能夠動態(tài)地適配變化的IP網(wǎng)絡(luò),降低了在網(wǎng)絡(luò)中傳輸語音的過程中的丟包率。同時,改變了原有的靜態(tài)JB的技術(shù)方案所存在的因JB無法靈活地適應(yīng)網(wǎng)絡(luò)狀況的變化而導(dǎo)致丟包率上升的問題。在相應(yīng)產(chǎn)品中的測試結(jié)果表明本發(fā)明能很好地達(dá)到語音傳輸過程中的較佳的抗抖動效果,特別在網(wǎng)絡(luò)質(zhì)量較差的情況下可以較大地提高VOIP的語音質(zhì)量。
文檔編號H04L29/02GK1627747SQ20031012196
公開日2005年6月15日 申請日期2003年12月9日 優(yōu)先權(quán)日2003年12月9日
發(fā)明者王麒, 樊榮 申請人:華為技術(shù)有限公司