專利名稱:用于消除ip語音數據抖動的自適應抖動緩存實現方法
技術領域:
本發明涉及IP技術,更具體地說,涉及一種用于消除IP語音數據抖動的自適應抖動緩存實現方法。
背景技術:
由于IP網絡的傳輸特性,會對分組語音數據造成一定程度的時間抖動。延時是直接影響到IP語音質量的重要因素,也是產生抖動的根本原因,在IP網絡中的延時主要包括傳播延時和處理延時。傳播延時是指電流或者光子在網絡中以某一速度傳送一段距離時所引起的延時;處理延時則是由語音傳輸過程中各種處理語音的設備所引起的,例如在因特網中使用的路由器、LAN(局域網)交換機、WAN(廣域網)交換機等。變化的延時就會產生抖動,即由于各種延時的變化將導致數據幀經過網絡到達接收端的速率發生變化。抖動帶來的不利影響是可能導致語音質量的嚴重失真。
因此,在數據接收端必須執行數據緩存操作以消除時間抖動,通過在語音處理設備的接收端加入緩沖區,用于保存足夠長的時間的數據,使最慢的數據包也能在語音還原處理之前及時的到達,從而消除抖動的不利影響。緩存的數據數量越多,接收端可以承受的數據抖動程度就越大,接收數據的丟包率就越小。丟包率是指分組語音數據包在IP網絡的傳輸過程中丟失的數據包所占總的數據包的比率。分組語音數據包通常是采用UDP(用戶數據報文協議)協議進行傳輸,由于UDP是一種非可靠的、無連接的數據報服務,它本身不保證服務質量,而且因特網的帶寬等資源隨用戶數和業務量的變化而波動較大,例如擁塞和網絡故障這些都是產生丟包的因素。丟包會影響語音復原的質量,當丟包率超過一定程度以后,會導致語音無法復原。
但是對數據進行緩存會產生延時,緩存的數據數量越多,數據的延時也就越大。由于語音數據的延時也同樣會影響語音數據回放時的質量,所以數據的延時和丟包率是不可能同時達到最理想指標的。抖動緩存通常稱為JitterBuffer,圖1是在特定的網絡資源情況下,JitterBuffer處理時延與對應的丟包率之間的關系示意圖。
從圖1中可以看出,處理時延較小時,丟包率很大;丟包率較小時,則處理時延又很大。為了兼顧處理時延和丟包率,最好能針對實際接收數據的時間抖動情況,對JitterBuffer進行實時的動態的調整。然而現有技術中還沒有對JitterBuffer進行動態調整的方案,一直未能解決上述問題。
發明內容
針對現有技術的上述缺陷,本發明要對抖動緩存的處理時延進行動態、實時的調整,在維持語音質量的前提下,實現語音延時的最小化。
本發明解決其技術問題所采用的技術方案是提供一種用于消除IP語音數據抖動的自適應抖動緩存實現方法,其中采用具有兩級指針隊列的抖動緩存,每次從IP網絡中接收一幀IP分組語音數據,并按以下步驟進行動態調整(1)根據所收到的每一幀IP數據所攜帶的參數,實時檢測并保存當前的時間抖動數值,再檢測當前第一隊列中是否有數據幀指針;(2)如果當前第一隊列中沒有數據幀指針,則再判斷當前數據幀與上一數據幀是否連續;(2-1)如果不連續則將當前數據幀的指針送入第一隊列,等待后續處理;(2-2)如果連續則直接將該數據幀的指針送入第二隊列;(3)如果當前第一隊列中有數據幀指針,則再檢測其是否已滿,(3-1)如果第一隊列未滿,則直接將當前數據幀指針送入第一隊列;(3-2)如果第一隊列已滿,則將第一、第二隊列的長度增加一個數據幀,再插入一個補償數據幀并將其指針發送到第二隊列,然后再將當前數據幀指針送入第一隊列;(3-3)再判斷第一隊列中的所有數據幀是否連續,如果連續則將第一隊列中的所有數據幀指針一次性傳送到第二隊列,如果不連續則等待下一個數據幀;
(4)對每一幀數據執行上述步驟,并根據第二隊列中緩存的數據幀指針,將相應的數據幀勻速輸出到下一接口。
在本發明方法的所述步驟(4)之前,還包括以下步驟(A)將所測得的實際時間抖動與抖動緩存的當前處理時延進行比較,判斷實際時間抖動是否在一段預定長的時間內一直小于抖動緩存的當前處理時延;(B)如果是則從第二隊列中刪除一個適當的數據幀指針,并將第一隊列的長度減小一個數據幀。
在本發明所述方法的所述步驟(3-2)中,先要檢測抖動緩存的當前處理時延是否已達到最大值,(3-2-1)只有在其未達到最大值時,則才將第一、第二隊列的長度增加一個數據幀,再插入一個補償數據幀并將其指針發送到第二隊列,然后再將當前數據幀指針送入第一隊列;(3-2-2)如果其已達到最大值,則插入適當的補償數據幀并將其指針發送到第一隊列,然后將第一隊列中的所有數據幀指針一次性傳送到第二隊列,再將當前數據幀指針送入第二隊列,然后跳過步驟(3-3),執行后續步驟。
通過上述方案,可根據每一數據幀的時間抖動的變化或丟包情況的發生,對抖動緩存的處理時延進行動態的自適應調整,將抖動緩存的處理延時合理化,從而減小IP網絡語音數據的抖動對語音數據回放質量的不利影響。另外,丟包的檢測和處理操作都被嵌入到了抖動緩存的處理過程中,可進一步提高語音數據的回放質量。
下面將結合附圖及實施例對本發明作進一步說明,附圖中圖1是在特定的網絡資源情況下,抖動緩存的處理時延與對應的丟包率之間的關系示意圖;圖2是本發明中用兩級指針隊列來調整抖動緩存的處理時延的工作流程圖;圖3是本發明中數據幀指針正常傳送時的示意圖;
圖4是本發明中在第一隊列內調整數據幀順序的示意圖;圖5是本發明中增大第一、第二隊列的長度時的示意圖。
具體實施例方式
一、JitterBuffer的數據結構本發明中,JitterBuffer的數據結構采用兩級隊列實現。隊列的結構為指針隊列,每一級隊列中緩存有IP分組語音數據的當前地址指針,采用指針隊列的目的是在數據搬運的過程中只需傳送指針而不是每一步都傳送IP分組語音數據,從而可避免數據的拷貝。采用兩級隊列的目的是為了簡化JitterBuffer操作控制的復雜度,將數據的輸出與輸入操作進行分開管理。其中的第一隊列負責數據的輸入操作,可實現對接收數據的順序調整、丟包補償;第二隊列負責數據的輸出操作,是JitterBuffer處理的對外數據輸出接口,可實現數據包之間的時間間隔調整,保證數據的勻速輸出。第一隊列與第二隊列的最大長度也就是JitterBuffer的最大處理時延。
二、JitterBuffer處理時延的動態調整本發明方法中,對處理時延進行動態調整的基本流程如圖2所示。其中JitterBuffer的初始處理時延可設置為3個數據幀的時間長度,以G.729編碼數據為例,則其初始處理時延為30ms;本發明的抖動緩存在接收數據幀時,將實時檢測并保存其接收到的每一個數據幀的時間抖動。
1、正常接收處理從圖2中可以看出,正常接收時的流程為步驟1、2、3、4、5、17、以及步驟21,其中由步驟3到步驟4,此時第一隊列中沒有數據幀指針,表示前面的接收一直正常;由步驟4到步驟5,當前數據幀與上一數據幀連續,表示沒有丟包;由步驟17到步驟21,說明實際時間抖動在一段預定長的時間內為正常,沒有一直小于抖動緩存的當前處理時延,不需要減小隊列的長度。
如圖3所示,正常接收時,所有的數據幀指針會跳過第一隊列,直接送到第二隊列,再由第二隊列勻速輸出到下一接口。
2、實際抖動較大或有丟包從圖2中可以看出,由步驟4到步驟6,說明由于抖動較大或丟包的原因,收到了與前一數據幀不連續的數據幀,漏收了其前面的一個或多個數據幀,此時將該數據幀指針送入第一隊列,當收到下一幀數據時,第一隊列不再為空,將由步驟3跳到步驟7。如圖4、5的最左邊所示,第1個數據幀為正常接收,其指針放到第一隊列中;之后本應收到第2個數據幀,卻收到了第3個數據幀,所以將第3個數據幀指針放到第二隊列中。
3、第一隊列未滿但不需要增加隊列長度從圖2中可以看出,此時的流程是由步驟7、11、12到步驟13。
由步驟7到步驟11,表示由于前面的抖動較大或丟包的原因,至少有一個與前面不連續的數據幀已被放到第一隊列中,且第一隊列未滿,此時將當前數據幀指針也放入第一隊列。如圖4、5的第二排所示,當收到第4個數據幀時,其指針也放到第一隊列中。
由步驟12到步驟13,表示當前放入第一隊列的數據幀指針正好是前面漏收的數據幀,使第一隊列中的各個數據幀指針成為連續狀態,此時將第一隊列中的所有數據幀指針一次性傳送到第二隊列。如圖4的第三、第四排所示,在第4個數據幀之后又收到了第2個數據幀,與第3、第4構成三個連續的數據幀,此時將這三個數據幀指針一次性傳送到第二隊列。
4、第一隊列已滿且其長度未達最大值從圖2中可以看出,此時的流程是由步驟7、8、9、10到步驟11。
由步驟7到步驟8,表示由于前面的抖動較大或丟包的原因,至少有一個與前面不連續的數據幀已被放到第一隊列中,且第一隊列已滿。如圖5的第二排所示,原來的隊列長度為4個數據幀,當收到第5個數據幀時,第一隊列已滿。
由步驟8到步驟9、10、11,表示第一隊列雖然已滿,但其長度未達到最大值(本實施例中為200ms),如圖5的第三排所示,此時需將第一、第二隊列的長度增加一個數據幀,隊列長度變為5個數據幀,然后再插入一個補償數據幀A并將其指針發送到第二隊列,再將第5個數據幀指針送入第一隊列。
其中,由于未收到第2個數據幀,所以插入的補償數據幀A用于代替第2個數據幀,該補償數據幀A是根據第1幀數據進行線性預測所得的結果。如果有多個數據幀丟包時,為了避免在補償的過程中產生啞音,插入補償數據幀的總時間長度不應大于60ms,對于大于60ms的JitterBuffer增量,在插入總時間長度為60ms的補償數據幀后,剩余部分將插入舒適噪音。
在上述過程中,JitterBuffer的處理時延的增加是實時的,從而可以針對IP網絡側突發的數據抖動情況進行處理,以消除其不利影響。
5、第一隊列已滿且其長度已達最大值,不能增加隊列長度由步驟8到步驟14、15、16,表示第一隊列已滿,并且其長度已達到最大值,此時不能再增加隊列長度。假設未收到第2個數據幀,則在第一隊列中第2個數據幀的位置處插入一個補償數據幀,然后將第一隊列中的所有數據幀指針一次性傳送到第二隊列,再將當前數據幀指針送入第二隊列。
6減小JitterBuffer的處理時延從圖2中可以看出,本發明中,每收到一個數據幀,都要用所測得的時間抖動與JitterBuffer的當前處理時延進行比較,同時參考RTCP(RealtimeTransport Control Protocol,實時傳輸控制協議)數據的參數計算結果,如果發現網絡的抖動在預定長的時間段(例如100個數據幀的總時間長度)內一直小于JitterBuffer的當前處理時延,則需要減小JitterBuffer的處理時延,具體方式是先從第二隊列中刪除一個適當的數據幀指針,再將第一隊列的長度減小一個數據幀。
為了保證一定的隊列長度,先要檢測抖動緩存的當前處理時延是否已達到最小值(本實施例中設為30ms),即3個數據幀的時間長度,只有在其長度未達最小值時,才從第二隊列中刪除一個適當的數據幀指針,并將第一隊列的長度減小一個數據幀。
具體的減小操作應在靜音期間對第一隊列中的非傳輸數據幀進行刪除來實現,這樣做的目的是為了避免刪除正常的語音數據對語音質量造成額外的影響,從而可保證不影響正常的語音數據。
本發明中,對每一個數據幀都將執行圖2所示的流程,并按其判斷結果執行相應的步驟。其中第一隊列與第二隊列之間的數據幀指針傳遞是實時的,無時間間隔,即在第一隊列處理完畢以后立刻將所以處理完畢的數據幀指針一次性的傳遞給第二隊列。因此,雖然動態調整時接收的數據幀指針將經過兩級隊列的處理,但是在正常的時候數據幀指針的總體延時只是一個隊列的延時。
權利要求
1.一種用于消除IP語音數據抖動的自適應抖動緩存實現方法,其特征在于,采用具有兩級指針隊列的抖動緩存,每次從IP網絡中接收一幀IP分組語音數據,并按以下步驟進行動態調整(1)根據所收到的每一幀IP數據所攜帶的參數,實時檢測并保存當前的時間抖動數值,再檢測當前第一隊列中是否有數據幀指針;(2)如果當前第一隊列中沒有數據幀指針,則再判斷當前數據幀與上一數據幀是否連續;(2-1)如果不連續則將當前數據幀的指針送入第一隊列,等待后續處理;(2-2)如果連續則直接將該數據幀的指針送入第二隊列;(3)如果當前第一隊列中有數據幀指針,則再檢測其是否已滿,(3-1)如果第一隊列未滿,則直接將當前數據幀指針送入第一隊列;(3-2)如果第一隊列已滿,則將第一、第二隊列的長度增加一個數據幀,再插入一個補償數據幀并將其指針發送到第二隊列,然后再將當前數據幀指針送入第一隊列;(3-3)再判斷第一隊列中的所有數據幀是否連續,如果連續則將第一隊列中的所有數據幀指針一次性傳送到第二隊列,如果不連續則等待下一個數據幀;(4)對每一幀數據執行上述步驟,并根據第二隊列中緩存的數據幀指針,將相應的數據幀勻速輸出到下一接口。
2.根據權利要求1所述的方法,其特征在于,在所述步驟(4)之前,還包括以下步驟(A)將所測得的實際時間抖動與抖動緩存的當前處理時延進行比較,判斷實際時間抖動是否在一段預定長的時間內一直小于抖動緩存的當前處理時延;(B)如果是則從第二隊列中刪除一個適當的數據幀指針,并將第一隊列的長度減小一個數據幀。
3.根據權利要求2所述的方法,其特征在于,在所述步驟(B)中,對第二隊列中的數據幀指針進行刪除的操作僅在靜音期間內對非傳輸數據幀指針進行。
4.根據權利要求3所述的方法,其特征在于,在所述步驟(B)中,先要檢測抖動緩存的當前處理時延是否已達到最小值,只有在未達最小值時,才從第二隊列中刪除一個適當的數據幀指針,并將第一隊列的長度減小一個數據幀。
5.根據權利要求2-4中任一項所述的方法,其特征在于,所述預定長的時間為100個數據幀的總時間長度。
6.根據權利要求1-4中任一項所述的方法,其特征在于,在所述步驟(3-2)中,先要檢測抖動緩存的當前處理時延是否已達到最大值,(3-2-1)只有在其未達到最大值時,則才將第一、第二隊列的長度增加一個數據幀,再插入一個補償數據幀并將其指針發送到第二隊列,然后再將當前數據幀指針送入第一隊列;(3-2-2)如果其已達到最大值,則插入適當的補償數據幀并將其指針發送到第一隊列,然后將第一隊列中的所有數據幀指針一次性傳送到第二隊列,再將當前數據幀指針送入第二隊列,然后跳過步驟(3-3),執行后續步驟。
7.根據權利要求6所述的方法,其特征在于,在所述步驟(3-2-2)中,所插入的補償數據幀用于代替其中不連續位置處被漏收的數據幀,每一個補償數據幀是根據其前一幀數據進行線性預測所得的結果。
8.根據權利要求7所述的方法,其特征在于,在所述步驟(3-2-2)中,如果需要插入的數據幀的總時間長度大于60ms,則先插入總時間長度為60ms的補償數據幀指針,剩余部分插入舒適噪音。
9.根據權利要求1-4中任一項所述的方法,其特征在于,所述抖動緩存的初始處理時延為3個數據幀的時間長度。
全文摘要
本發明涉及一種用于消除IP語音數據抖動的自適應抖動緩存實現方法,其中采用具有兩級指針隊列的抖動緩存,先實時檢測每一幀IP數據的時間抖動數值,對于正常接收的數據幀,直接送入第二隊列;如果時間抖動過大或有丟包,則將該數據幀送入第一隊列,然后在第一隊列中進行順序調整、增加隊列長度、或丟包補償等處理,然后再將第一隊列中的數據幀一次性傳送到第二隊列;如果實際時間抖動在一段時間內一直小于當前處理時延,則每次將第一隊列的長度減小一個數據幀;最后將第二隊列中的數據勻速輸出到下一接口。通過上述步驟,可根據時間抖動的變化對抖動緩存的處理時延進行動態的調整,從而減小時間抖動的不利影響,并可根據丟包情況進行動態調整。
文檔編號H04L27/01GK1531276SQ0310719
公開日2004年9月22日 申請日期2003年3月13日 優先權日2003年3月13日
發明者樊榮, 陳久松, 方衛華, 段鐸, 樊 榮 申請人:華為技術有限公司