抖動(dòng)緩存調(diào)節(jié)方法及其系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種抖動(dòng)緩存調(diào)節(jié)方法及其系統(tǒng)。所述抖動(dòng)緩存調(diào)節(jié)方法,包括:獲取數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí);根據(jù)所述丟包率和延時(shí),按預(yù)設(shè)周期調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。本發(fā)明能夠針對(duì)網(wǎng)絡(luò)情況進(jìn)行抖動(dòng)緩存自適應(yīng),解決網(wǎng)絡(luò)延遲抖動(dòng)的同時(shí)又可保證數(shù)據(jù)傳輸質(zhì)量,尤其適用于網(wǎng)絡(luò)視頻數(shù)據(jù)的傳輸。
【專利說明】抖動(dòng)緩存調(diào)節(jié)方法及其系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)傳輸?shù)摹炯夹g(shù)領(lǐng)域】,特別是涉及一種抖動(dòng)緩存調(diào)節(jié)方法,以及一種抖動(dòng)緩存調(diào)節(jié)系統(tǒng)。
【背景技術(shù)】
[0002]網(wǎng)絡(luò)多媒體實(shí)時(shí)通信的發(fā)展使得很多視頻交互產(chǎn)品層出不窮,視頻傳輸和編解碼技術(shù)在實(shí)時(shí)網(wǎng)絡(luò)通信中也廣泛使用。然而不管在單人網(wǎng)絡(luò)視頻技術(shù),還是多人網(wǎng)絡(luò)視頻技術(shù)中,網(wǎng)絡(luò)抖動(dòng)延遲是一個(gè)不可避免的問題。抖動(dòng)是QOS (服務(wù)質(zhì)量)里面常用的一個(gè)概念,其意思是指分組延遲的變化程度。如果網(wǎng)絡(luò)發(fā)生擁塞,排隊(duì)延遲將影響端到端的延遲,并導(dǎo)致通過同一連接傳輸?shù)姆纸M延遲各不相同,而抖動(dòng),就是用來描述這樣一延遲變化的程度。因此,抖動(dòng)對(duì)于實(shí)時(shí)性的傳輸將會(huì)是一個(gè)重要參數(shù),很多網(wǎng)絡(luò)應(yīng)用產(chǎn)品對(duì)網(wǎng)絡(luò)抖動(dòng)和延遲的要求都比較高,特別是實(shí)時(shí)通信領(lǐng)域。
[0003]網(wǎng)絡(luò)抖動(dòng)給數(shù)據(jù)的傳輸造成不均勻。數(shù)據(jù)包離開發(fā)送端時(shí),按照規(guī)則的間隔均勻排列,在通過網(wǎng)絡(luò)之后,這一均勻的間隔因數(shù)據(jù)包經(jīng)歷不同的延遲大小而遭到破壞。例如視頻數(shù)據(jù)傳送不均勻,會(huì)造成視頻卡,畫面顫抖等不良體驗(yàn)。抖動(dòng)的大小取決于數(shù)據(jù)包的延遲時(shí)間的差異程度,差異程度越大,則抖動(dòng)越大。
[0004]常用的解決網(wǎng)絡(luò)抖動(dòng)延遲的方法主要有兩個(gè):
[0005]一個(gè)是優(yōu)化網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)。數(shù)據(jù)傳輸依靠于網(wǎng)絡(luò)的通路,如果各條通路的結(jié)構(gòu)不合理,將會(huì)造成傳輸路徑變長,經(jīng)過的路由器或其他設(shè)備變多,大大增加了傳輸延遲。另一方面,在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)也會(huì)隨著路徑的變長而增加,使得網(wǎng)絡(luò)變得更加擁塞和忙碌。優(yōu)化網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的方案包括增加有效網(wǎng)絡(luò)帶寬,提高主干網(wǎng)絡(luò)速度,提高服務(wù)器處理性能
坐寸ο
[0006]然而,對(duì)于網(wǎng)絡(luò)拓?fù)涞膬?yōu)化缺乏一定的可控性,客觀因素影響比較大,可操作性差,其優(yōu)化的成本也不可估算。
[0007]另一個(gè)是靜態(tài)緩沖算法。即數(shù)據(jù)包的接收端創(chuàng)建固定大小的的抖動(dòng)緩存指針隊(duì)列的入隊(duì)線程接收數(shù)據(jù)包,對(duì)接收到的數(shù)據(jù)包進(jìn)行排序后將接收到的數(shù)據(jù)包插入抖動(dòng)緩存指針隊(duì)列的相應(yīng)位置,然后根據(jù)出隊(duì)線程定時(shí)器以一定時(shí)間間隔觸發(fā)出隊(duì)線程。該方法容易實(shí)現(xiàn),穩(wěn)定性好。
[0008]但是,固定的抖動(dòng)緩存深度無法適應(yīng)網(wǎng)絡(luò)的變化和各種視頻應(yīng)用場景的要求,對(duì)于抖動(dòng)延遲較大的應(yīng)用場景,如果設(shè)置較小的抖動(dòng)緩存,則可能影響數(shù)據(jù)傳輸質(zhì)量,而如果設(shè)置較大的抖動(dòng)緩存,則可能導(dǎo)致網(wǎng)絡(luò)延遲過大,影響數(shù)據(jù)的正常傳輸。
【發(fā)明內(nèi)容】
[0009]針對(duì)上述設(shè)置固定的抖動(dòng)緩存無法兼顧解決網(wǎng)絡(luò)延遲抖動(dòng)和數(shù)據(jù)傳輸質(zhì)量的問題,本發(fā)明提出一種能夠針對(duì)網(wǎng)絡(luò)情況進(jìn)行抖動(dòng)緩存自適應(yīng)的抖動(dòng)緩存調(diào)節(jié)方法及其系統(tǒng),解決網(wǎng)絡(luò)延遲抖動(dòng)的同時(shí)又可保證數(shù)據(jù)傳輸質(zhì)量,尤其適用于網(wǎng)絡(luò)視頻數(shù)據(jù)的傳輸。[0010]一種抖動(dòng)緩存調(diào)節(jié)方法,包括以下步驟:
[0011]獲取數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí);
[0012]根據(jù)所述丟包率和延時(shí),按預(yù)設(shè)周期調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。
[0013]本發(fā)明的抖動(dòng)緩存調(diào)節(jié)方法中,根據(jù)數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí),自適應(yīng)調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。因此抖動(dòng)緩存的大小是自適應(yīng)變化的,能夠解決抖動(dòng)緩存太小,無法處理網(wǎng)絡(luò)抖動(dòng)延遲導(dǎo)致的丟包率過大的問題,也能夠解決抖動(dòng)緩存過大而導(dǎo)致的網(wǎng)絡(luò)延時(shí)過大,影響數(shù)據(jù)傳輸質(zhì)量的問題,解決網(wǎng)絡(luò)延遲抖動(dòng)的同時(shí)又可保證數(shù)據(jù)傳輸質(zhì)量,尤其適用于網(wǎng)絡(luò)視頻數(shù)據(jù)的傳輸。
[0014]—種抖動(dòng)緩存調(diào)節(jié)系統(tǒng),包括:
[0015]參數(shù)獲取模塊,用于獲取數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí);
[0016]第一調(diào)節(jié)模塊,用于根據(jù)所述丟包率和延時(shí),按預(yù)設(shè)周期調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。
[0017]本發(fā)明的抖動(dòng)緩存調(diào)節(jié)系統(tǒng),根據(jù)數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí),自適應(yīng)調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。因此抖動(dòng)緩存的大小是自適應(yīng)變化的,能夠解決抖動(dòng)緩存太小,無法處理網(wǎng)絡(luò)抖動(dòng)延遲導(dǎo)致的丟包率過大的問題,也能夠解決抖動(dòng)緩存過大而導(dǎo)致的網(wǎng)絡(luò)延時(shí)過大,影響數(shù)據(jù)傳輸質(zhì)量的問題,解決網(wǎng)絡(luò)延遲抖動(dòng)的同時(shí)又可保證數(shù)據(jù)傳輸質(zhì)量,尤其適用于網(wǎng)絡(luò)視頻數(shù)據(jù)的傳輸。
【專利附圖】
【附圖說明】
[0018]圖1是本發(fā)明抖動(dòng)緩存調(diào)節(jié)方法第一實(shí)施方式的流程示意圖;
[0019]圖2是本發(fā)明抖動(dòng)緩存調(diào)節(jié)方法第二實(shí)施方式的流程示意圖;
[0020]圖3是本發(fā)明抖動(dòng)緩存調(diào)節(jié)方法中測試數(shù)據(jù)包的發(fā)送時(shí)刻、到達(dá)時(shí)刻和播放時(shí)間的不意圖;
[0021]圖4是本發(fā)明抖動(dòng)緩存調(diào)節(jié)方法第三實(shí)施方式的流程示意圖;
[0022]圖5是本發(fā)明抖動(dòng)緩存調(diào)節(jié)系統(tǒng)第一實(shí)施方式的結(jié)構(gòu)示意圖;
[0023]圖6是本發(fā)明抖動(dòng)緩存調(diào)節(jié)系統(tǒng)第二實(shí)施方式的結(jié)構(gòu)示意圖;
[0024]圖7是本發(fā)明抖動(dòng)緩存調(diào)節(jié)系統(tǒng)第三實(shí)施方式的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0025]請(qǐng)參閱圖1,圖1是本發(fā)明抖動(dòng)緩存調(diào)節(jié)方法第一實(shí)施方式的流程示意圖。
[0026]所述抖動(dòng)緩存調(diào)節(jié)方法,包括以下步驟:
[0027]S102,獲取數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí);
[0028]S104,根據(jù)所述丟包率和延時(shí),按預(yù)設(shè)周期調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。
[0029]本發(fā)明的抖動(dòng)緩存調(diào)節(jié)方法,根據(jù)數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí),自適應(yīng)調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。因此抖動(dòng)緩存的大小是自適應(yīng)變化的,能夠解決抖動(dòng)緩存太小,無法處理網(wǎng)絡(luò)抖動(dòng)延遲導(dǎo)致的丟包率過大的問題,也能夠解決抖動(dòng)緩存過大而導(dǎo)致的網(wǎng)絡(luò)延時(shí)過大,影響數(shù)據(jù)傳輸質(zhì)量的問題,解決網(wǎng)絡(luò)延遲抖動(dòng)的同時(shí)又可保證數(shù)據(jù)傳輸質(zhì)量,尤其適用于網(wǎng)絡(luò)視頻數(shù)據(jù)的傳輸。
[0030]其中,對(duì)于步驟S102,可以在接收端通過對(duì)所接收的數(shù)據(jù)包進(jìn)行丟包率和延時(shí)統(tǒng)計(jì)的方式獲得,或者通過發(fā)送測試包,檢測所述測試包的丟包率和延時(shí)的方式獲得,又或者通過本領(lǐng)域習(xí)知的其他技術(shù)手段獲取所述接收端的丟包率和延時(shí)。
[0031]在一個(gè)優(yōu)選實(shí)施方式中,按預(yù)設(shè)周期統(tǒng)計(jì)接收端的丟包率和延時(shí);然后計(jì)算在每一所述預(yù)設(shè)周期內(nèi)的丟包率的平均值和延時(shí)的平均值,獲取所述預(yù)設(shè)周期內(nèi)的接收端的丟包率和延時(shí)。因?yàn)樵诒景l(fā)明中,抖動(dòng)緩存的大小是變化的,因此丟包率和延時(shí)可能隨著抖動(dòng)緩存的變化而有所變化,另外丟包率和延時(shí)還可能受到實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài)而有所改變,因此,按預(yù)設(shè)周期對(duì)所述丟包率和延時(shí)進(jìn)行統(tǒng)計(jì),計(jì)算每一所述預(yù)設(shè)周期內(nèi)的丟包率和延時(shí)的平均值,作為該周期內(nèi)的丟包率和時(shí)延值,能夠提高丟包率和時(shí)延統(tǒng)計(jì)的準(zhǔn)確性。所述預(yù)設(shè)周期可以與抖動(dòng)緩存的調(diào)節(jié)周期相對(duì)應(yīng),也可以不對(duì)應(yīng)。
[0032]對(duì)于S104,在調(diào)節(jié)所述接收端的抖動(dòng)緩存時(shí),基本原則是:在丟包率過大時(shí)增大接收端的抖動(dòng)緩存,以提高對(duì)數(shù)據(jù)包的緩存接收時(shí)間,減小丟包率;在延時(shí)過大時(shí),減小接收端的抖動(dòng)緩存,以減少對(duì)數(shù)據(jù)包的緩存接收時(shí)間,提高效率。
[0033]在一個(gè)實(shí)施方式中,對(duì)所述丟包率和延時(shí)分別預(yù)設(shè)一個(gè)丟包率閾值和延時(shí)閾值,通過以下方式執(zhí)行抖動(dòng)緩存的調(diào)節(jié):
[0034]如果所述延時(shí)大于預(yù)設(shè)的延時(shí)閾值,則減少所述抖動(dòng)緩存;
[0035]如果所述丟包率大于預(yù)設(shè)的丟包率閾值,并且所述延時(shí)小于所述延時(shí)閾值,則增大所述抖動(dòng)緩存;
[0036]如果所述丟包率小于所述丟包率閾值,并且所述延時(shí)小于所述延時(shí)閾值,則維持所述抖動(dòng)緩存的大小不變。
[0037]例如,假設(shè)允許的預(yù)設(shè)丟包率閾值P為3%,而允許的預(yù)設(shè)延時(shí)閾值T為400ms。而調(diào)節(jié)的周期設(shè)置為5秒,以保證實(shí)時(shí)為優(yōu)先條件,即盡量保證延時(shí)不超過閥值400ms。則根據(jù)統(tǒng)計(jì)該周期內(nèi)的平均丟包率P和延時(shí)t,做以下處理:
[0038]若t>T時(shí),為保證實(shí)時(shí)性,就要減少抖動(dòng)緩存,把t降低到T左右,允許丟包率P適
當(dāng)提聞一些。
[0039]若p>P而t〈T時(shí),適當(dāng)增大緩沖區(qū),使P降下來。若此時(shí)導(dǎo)致t>T,則進(jìn)入上述步驟,減少抖動(dòng)緩存。
[0040]若達(dá)到t〈T,且p〈P,則不改變所述抖動(dòng)緩存的大小,進(jìn)行下一輪調(diào)節(jié)。
[0041]通過上述方法,可以在保證實(shí)時(shí)性的基礎(chǔ)上盡量減小丟包率,提高數(shù)據(jù)傳輸指令。
[0042]上述減小或者增大所述抖動(dòng)緩存的步驟中,減小和增大的幅度可以根據(jù)實(shí)際的網(wǎng)絡(luò)情況自行設(shè)置。在一個(gè)優(yōu)選實(shí)施方式中,減小所述抖動(dòng)緩存時(shí),減小的幅度等于所述延時(shí)與所述延時(shí)閾值的差值。而增大所述抖動(dòng)緩存則可以通過以下方式:計(jì)算所述丟包率與所述丟包率閾值的差值;將所述差值乘以當(dāng)前抖動(dòng)緩存,獲得調(diào)節(jié)值;增大所述抖動(dòng)緩存,增大的幅度等于所述調(diào)節(jié)值。
[0043]進(jìn)一步地,在減小所述抖動(dòng)緩存之前,進(jìn)一步判斷減小后的抖動(dòng)緩存是否小于預(yù)設(shè)的抖動(dòng)緩存最小值,是則放棄本次調(diào)節(jié),否則減小所述抖動(dòng)緩存。
[0044]增大所述抖動(dòng)緩存之前,也可進(jìn)一步判斷增大后的抖動(dòng)緩存是否大于預(yù)設(shè)的抖動(dòng)緩存最大值,是則放棄本次調(diào)節(jié),否則增大所述抖動(dòng)緩存。
[0045]例如,為保證一定的實(shí)時(shí)性,設(shè)置抖動(dòng)緩存最大值Max為3s,為了保證數(shù)據(jù)的完整性,設(shè)置抖動(dòng)緩存最小值Min為200ms。在調(diào)節(jié)的周期內(nèi),增大抖動(dòng)緩存按|p_P|比例來調(diào)整,如抖動(dòng)緩存的當(dāng)前值jitterBuffer為ls,平均丟包率為8%,丟包率閾值P為3%,則調(diào)節(jié)后的 jitterBuffer 為 1000+1000* (8%_3%) =1050ms。若 jitterBuffer 大于預(yù)先設(shè)置的抖動(dòng)緩存最大值Max,則不調(diào)節(jié)。
[0046]減小抖動(dòng)緩存則按|t_T|的幅度來調(diào)整,例如抖動(dòng)緩存的當(dāng)前值jitterBuffer為ls,平均延時(shí)t是500ms,延時(shí)閾值T為400ms,則調(diào)節(jié)后的jitterBuffer為1000ms-(500ms-400ms)=900ms。為保證數(shù)據(jù)的完整性,當(dāng)jitterBuffer低于預(yù)先設(shè)置的抖動(dòng)緩存最小值Min,則不做調(diào)整。
[0047]通過上述方式,在增大和減小所述抖動(dòng)緩存時(shí),以所述丟包率和延時(shí)作為調(diào)節(jié)參數(shù),因此調(diào)節(jié)的幅度與所述丟包率和延時(shí)相關(guān),更加符合丟包率和時(shí)延的要求。而設(shè)定所述抖動(dòng)緩存最大值和最小值對(duì)抖動(dòng)緩存的調(diào)節(jié)進(jìn)行限制,防止調(diào)節(jié)過度影響通信質(zhì)量。
[0048]請(qǐng)參閱圖2,圖2是本發(fā)明抖動(dòng)緩存調(diào)節(jié)方法第二實(shí)施方式的流程示意圖。
[0049]本實(shí)施方式的抖動(dòng)緩存調(diào)節(jié)方法與所述第一實(shí)施方式的區(qū)別主要在于,在獲取數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí)之前,還包括設(shè)置所述接收端的抖動(dòng)緩存的初始值的步驟。
[0050]所述設(shè)置所述接收端的抖動(dòng)緩存的初始值的步驟包括:
[0051]S202,發(fā)送測試數(shù)據(jù)包,并在每個(gè)測試數(shù)據(jù)包中添加序列號(hào)和時(shí)間標(biāo)記;
[0052]S204,在接收端接收測試數(shù)據(jù)包,并根據(jù)所述測試數(shù)據(jù)包的序列號(hào)和時(shí)間標(biāo)記獲取各個(gè)所述測試數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間;
[0053]S206,根據(jù)各個(gè)所述測試數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間按照下式計(jì)算所述抖動(dòng)緩存的理論最佳值:
[0054]jns=max { (Rj—Sj) 一 (Ri—Si) };
[0055]其中,jns為抖動(dòng)緩存的理論最佳值,Rj表示序列號(hào)為第j個(gè)的測試數(shù)據(jù)包的接收時(shí)間,Sj表示序列號(hào)為第j個(gè)的測試數(shù)據(jù)包的發(fā)送時(shí)間,j和i是兩個(gè)相鄰的序列號(hào);
[0056]S208,將所述抖動(dòng)緩存的理論最佳值設(shè)為所述抖動(dòng)緩存的初始值。
[0057]抖動(dòng)緩存的初始值至少要解決一個(gè)隊(duì)列中所有數(shù)據(jù)包能正常播放,即不丟包。因此,對(duì)于抖動(dòng)緩存的初始化可以通過發(fā)送一組測試數(shù)據(jù)包來確定。在所述測試數(shù)據(jù)包的序列中會(huì)打上序列號(hào)和時(shí)間戳,這樣在接收端可以知道原始包發(fā)送前的播放時(shí)間間隔。根據(jù)包的播放時(shí)間間隔,結(jié)合實(shí)際包的達(dá)到時(shí)間,按差值計(jì)算出最佳的緩存時(shí)間(緩存深度),可從最少的緩存深度來實(shí)現(xiàn)視頻數(shù)據(jù)包的順暢播放。
[0058]例如,對(duì)于一組測試數(shù)據(jù)包,i e (1,n), j e (1,n),j是i之后的一個(gè)序列號(hào),η是數(shù)據(jù)包的總數(shù)量。則最佳緩沖時(shí)間jns=maX{| (Rj-Sj) 一(Ri—Si) |},Rj表示測試數(shù)據(jù)包接收的時(shí)間,Sj表示測試數(shù)據(jù)包發(fā)送的時(shí)間,只要接收端的抖動(dòng)緩沖區(qū)大小超過jns則不存在丟包情況,因此將jns設(shè)置為默認(rèn)緩存深度。
[0059]假如有3個(gè)測試數(shù)據(jù)包ABC,發(fā)送時(shí)刻分別為10,20,30ms,通過網(wǎng)絡(luò)的各種延遲后,到達(dá)時(shí)刻為20,50,40ms,由此可算出jns為20ms。數(shù)據(jù)包的實(shí)際播放時(shí)間為40,50,60ms,如圖3所示。則,其中數(shù)據(jù)包A跟C在到達(dá)接收端后緩存了 20ms,數(shù)據(jù)包B則剛好不用緩存。3個(gè)數(shù)據(jù)包在播放時(shí)間都已經(jīng)到達(dá),沒有丟包。
[0060]本實(shí)施方式中,通過發(fā)送所述測試數(shù)據(jù)包,并記錄各個(gè)所述測試數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間,可以計(jì)算出計(jì)算所述抖動(dòng)緩存的理論最佳值,將所述理論最佳值作為抖動(dòng)緩存的初始值,可以使所述抖動(dòng)緩存的設(shè)置更加合理,避免或者減少丟包,也能提高抖動(dòng)緩存調(diào)節(jié)的效率。
[0061]請(qǐng)參閱圖4,圖4是本發(fā)明抖動(dòng)緩存調(diào)節(jié)方法第三實(shí)施方式的流程示意圖。
[0062]本實(shí)施方式的抖動(dòng)緩存調(diào)節(jié)方法與所述第一、第二實(shí)施方式的抖動(dòng)緩存調(diào)節(jié)方法的區(qū)別主要在于,根據(jù)所述丟包率和延時(shí),按預(yù)設(shè)周期調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小之前,還包括以下步驟:
[0063]S302,按預(yù)設(shè)周期計(jì)算接收端的抖動(dòng)緩存的理論最佳值;
[0064]S304,根據(jù)所述理論值調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。
[0065]在本實(shí)施方式中,在根據(jù)所述丟包率和延時(shí)調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小之前,先根據(jù)計(jì)算的理論最佳值對(duì)所述接收端的抖動(dòng)緩存進(jìn)行粗調(diào),然后再進(jìn)入根據(jù)丟包率和延時(shí)的微調(diào),使調(diào)節(jié)效果更好,調(diào)節(jié)效率更高。
[0066]系統(tǒng)初始化時(shí)候,可以設(shè)置抖動(dòng)緩存的深度為ls,然后根據(jù)實(shí)際丟包率和延時(shí)情況不斷調(diào)整。初始化的緩存深度除了采用第二實(shí)施方式的方法設(shè)置之外,也可以根據(jù)系統(tǒng)歷史記錄的緩存深度做一個(gè)平均值,通常可設(shè)置為ls,是比較接近大多數(shù)系統(tǒng)的平均緩存深度。從數(shù)據(jù)傳輸開始便可按一定的周期進(jìn)行抖動(dòng)緩存的調(diào)節(jié)。
[0067]由于網(wǎng)絡(luò)的波動(dòng)在很多時(shí)間帶有不確定性,但是每次調(diào)節(jié)抖動(dòng)緩存的深度,都會(huì)對(duì)緩存隊(duì)列的長度進(jìn)行一些增減操作和數(shù)據(jù)運(yùn)算,如果太頻繁的調(diào)節(jié)則會(huì)影響系統(tǒng)的性倉泛。
[0068]因此在本實(shí)施方式中,優(yōu)選按200幀數(shù)據(jù)為一個(gè)周期,計(jì)算接收端的抖動(dòng)緩存的理論最佳值,以所述根據(jù)所述理論值調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。
[0069]按預(yù)設(shè)周期計(jì)算接收端的抖動(dòng)緩存的理論最佳值的步驟與第二實(shí)施方式中計(jì)算的抖動(dòng)緩存的理論最佳值類似,包括:
[0070]在所述預(yù)設(shè)周期內(nèi)統(tǒng)計(jì)所述接收端接收的每個(gè)數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間;
[0071]根據(jù)各個(gè)所述數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間按照下式計(jì)算所述預(yù)設(shè)周期內(nèi)抖動(dòng)緩存的理論最佳值:
[0072]jns=max { (Rj—Sj) 一 (Ri—Si) };
[0073]其中,jns為抖動(dòng)緩存的理論最佳值,Rj表示序列號(hào)為第j個(gè)的測試數(shù)據(jù)包的接收時(shí)間,Sj表示序列號(hào)為第j個(gè)的測試數(shù)據(jù)包的發(fā)送時(shí)間,j和i是兩個(gè)相鄰的序列號(hào)。
[0074]通過200巾貞數(shù)據(jù)按前面的算法算出最佳jns。每次輪詢的開始將jitterBuffer根據(jù)上一次200幀周期計(jì)算出的jns先做調(diào)整(第一次除外)。
[0075]優(yōu)選地,為了不讓每次調(diào)整的jitterBuffer波動(dòng)比較大,而且新的jns也未必適應(yīng)具體的網(wǎng)絡(luò)環(huán)境,因此我們不按新的jns做新的jitterBuffer值,而是允許一定的波動(dòng)范圍。即,根據(jù)所述理論值調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小的步驟包括:
[0076]如果所述抖動(dòng)緩存的理論最佳值與其當(dāng)前值的差值在預(yù)設(shè)范圍內(nèi),則不改變所述抖動(dòng)緩存的當(dāng)前值;
[0077]如果所述抖動(dòng)緩存的理論最佳值小于其當(dāng)前值,則按照下式調(diào)節(jié)所述抖動(dòng)緩存的當(dāng)前值:
[0078]jitterBuffer=jns+(jitterBuffer-jns)/2 ;
[0079]如果所述抖動(dòng)緩存的理論最佳值大于其當(dāng)前值,則按照下式調(diào)節(jié)所述抖動(dòng)緩存的當(dāng)前值:
[0080]jitterBuffer=jns-(jns-jitterBuffer)/2 ;
[0081]其中,jitterBuffer為所述抖動(dòng)緩存的當(dāng)前值,jns為所述抖動(dòng)緩存的理論最佳值。
[0082]所述抖動(dòng)緩存的理論最佳值與其當(dāng)前值的差值的預(yù)設(shè)范圍可設(shè)置為20%,則:
[0083]若jns> jitterBuffer*。.8 且 jns〈jitterBuffer*l.2,則 jitterBuffer 不變;
[0084]若jns〈jitterBuffer*0.8,則目前的緩存深度比理論最佳值偏大,貝U令jitterBuffer=jns+(jitterBuffer-jns)/2 ;
[0085]若jns>jitterBuffer*l.2,則目前的緩存深度比理論最佳值偏小,貝U令jitterBuffer=jns-(jns-jitterBuffer)/2。
[0086]本發(fā)明對(duì)網(wǎng)絡(luò)抖動(dòng)延遲提出了一種自適應(yīng)網(wǎng)絡(luò)變化的抖動(dòng)緩存調(diào)節(jié)方法,從延時(shí)和丟包率做了一個(gè)較好的均衡,使得數(shù)據(jù)傳輸在網(wǎng)絡(luò)波動(dòng)情況下能得到一個(gè)最低延遲而又少頓卡的體驗(yàn)。特別是在視頻實(shí)時(shí)傳輸中的根據(jù)網(wǎng)絡(luò)抖動(dòng)延時(shí)的變化,對(duì)接收端的緩沖隊(duì)列進(jìn)行實(shí)時(shí)動(dòng)態(tài)調(diào)整,可以兼顧低延時(shí)和低丟包率問題。
[0087]請(qǐng)參閱圖5,圖5是本發(fā)明抖動(dòng)緩存調(diào)節(jié)系統(tǒng)第一實(shí)施方式的結(jié)構(gòu)示意圖。
[0088]所述抖動(dòng)緩存調(diào)節(jié)系統(tǒng),包括:
[0089]參數(shù)獲取模塊10,用于獲取數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí);
[0090]第一調(diào)節(jié)模塊20,用于根據(jù)所述丟包率和延時(shí),按預(yù)設(shè)周期調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。
[0091]本發(fā)明的抖動(dòng)緩存調(diào)節(jié)系統(tǒng),根據(jù)數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí),自適應(yīng)調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。因此抖動(dòng)緩存的大小是自適應(yīng)變化的,能夠解決抖動(dòng)緩存太小,無法處理網(wǎng)絡(luò)抖動(dòng)延遲導(dǎo)致的丟包率過大的問題,也能夠解決抖動(dòng)緩存過大而導(dǎo)致的網(wǎng)絡(luò)延時(shí)過大,影響數(shù)據(jù)傳輸質(zhì)量的問題,尤其適用于網(wǎng)絡(luò)視頻數(shù)據(jù)的傳輸。
[0092]其中,所述參數(shù)獲取模塊10可以在接收端通過對(duì)所接收的數(shù)據(jù)包進(jìn)行丟包率和延時(shí)統(tǒng)計(jì)的方式獲得,或者通過發(fā)送測試包,檢測所述測試包的丟包率和延時(shí)的方式獲得,又或者通過本領(lǐng)域習(xí)知的其他技術(shù)手段獲取所述接收端的丟包率和延時(shí)。
[0093]在一個(gè)優(yōu)選實(shí)施方式中,所述參數(shù)獲取模塊10包括:
[0094]用于按預(yù)設(shè)周期統(tǒng)計(jì)接收端的丟包率和延時(shí)的模塊;
[0095]以及,用于計(jì)算在每一所述預(yù)設(shè)周期內(nèi)的丟包率的平均值和延時(shí)的平均值,獲取所述預(yù)設(shè)周期內(nèi)的接收端的丟包率和延時(shí)的模塊。
[0096]因?yàn)樵诒景l(fā)明中,抖動(dòng)緩存的大小是變化的,因此丟包率和延時(shí)可能隨著抖動(dòng)緩存的變化而有所變化,另外丟包率和延時(shí)還可能受到實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài)而有所改變,因此,按預(yù)設(shè)周期對(duì)所述丟包率和延時(shí)進(jìn)行統(tǒng)計(jì),計(jì)算每一所述預(yù)設(shè)周期內(nèi)的丟包率和延時(shí)的平均值,作為該周期內(nèi)的丟包率和時(shí)延值,能夠提高丟包率和時(shí)延統(tǒng)計(jì)的準(zhǔn)確性。所述預(yù)設(shè)周期可以與抖動(dòng)緩存的調(diào)節(jié)周期相對(duì)應(yīng),也可以不對(duì)應(yīng)。
[0097]所述第一調(diào)節(jié)模塊20在調(diào)節(jié)所述接收端的抖動(dòng)緩存時(shí),基本原則是:在丟包率過大時(shí)增大接收端的抖動(dòng)緩存,以提高對(duì)數(shù)據(jù)包的緩存接收時(shí)間,減小丟包率;在延時(shí)過大時(shí),減小接收端的抖動(dòng)緩存,以減少對(duì)數(shù)據(jù)包的緩存接收時(shí)間,提高效率。
[0098]在一個(gè)實(shí)施方式中,所述第一調(diào)節(jié)模塊20對(duì)所述丟包率和延時(shí)分別預(yù)設(shè)一個(gè)丟包率閾值和延時(shí)閾值,所述第一調(diào)節(jié)模塊20包括:
[0099]用于如果所述延時(shí)大于預(yù)設(shè)的延時(shí)閾值,則減少所述抖動(dòng)緩存的模塊;
[0100]用于如果所述丟包率大于預(yù)設(shè)的丟包率閾值,并且所述延時(shí)小于所述延時(shí)閾值,則增大所述抖動(dòng)緩存的模塊;
[0101]用于如果所述丟包率小于所述丟包率閾值,并且所述延時(shí)小于所述延時(shí)閾值,則維持所述抖動(dòng)緩存的大小不變的模塊。
[0102]例如,假設(shè)允許的預(yù)設(shè)丟包率閾值P為3%,而允許的預(yù)設(shè)延時(shí)閾值T為400ms。而調(diào)節(jié)的周期設(shè)置為5秒,以保證實(shí)時(shí)為優(yōu)先條件,即盡量保證延時(shí)不超過閥值400ms。則根據(jù)統(tǒng)計(jì)該周期內(nèi)的平均丟包率P和延時(shí)t,做以下處理:
[0103]若t>T時(shí),為保證實(shí)時(shí)性,就要減少抖動(dòng)緩存,把t降低到T左右,允許丟包率P適
當(dāng)提聞一些。
[0104]若p>P而t〈T時(shí),適當(dāng)增大緩沖區(qū),使P降下來。若此時(shí)導(dǎo)致t>T,則進(jìn)入上述步驟,減少抖動(dòng)緩存。
[0105]若達(dá)到t〈T,且p〈P,則不改變所述抖動(dòng)緩存的大小,進(jìn)行下一輪調(diào)節(jié)。
[0106]通過上述方法,可以在保證實(shí)時(shí)性的基礎(chǔ)上盡量減小丟包率,提高數(shù)據(jù)傳輸指令。
[0107]上述減小或者增大所述抖動(dòng)緩存時(shí),減小和增大的幅度可以根據(jù)實(shí)際的網(wǎng)絡(luò)情況自行設(shè)置。在一個(gè)優(yōu)選實(shí)施方式中,所述第一調(diào)節(jié)模塊20減小所述抖動(dòng)緩存時(shí),減小的幅度等于所述延時(shí)與所述延時(shí)閾值的差值。而對(duì)于增大所述抖動(dòng)緩存,所述第一調(diào)節(jié)模塊20包括:
[0108]用于在增大所述抖動(dòng)緩存時(shí),計(jì)算所述丟包率與所述丟包率閾值的差值的模塊;
[0109]以及,用于將所述差值乘以當(dāng)前抖動(dòng)緩存,獲得調(diào)節(jié)值,令增大所述抖動(dòng)緩存的幅度等于所述調(diào)節(jié)值的模塊。
[0110]進(jìn)一步地,所述第一調(diào)節(jié)模塊20還包括用于在減小所述抖動(dòng)緩存之前,進(jìn)一步判斷減小后的抖動(dòng)緩存是否小于預(yù)設(shè)的抖動(dòng)緩存最小值,是則放棄本次調(diào)節(jié),否則減小所述抖動(dòng)緩存的模塊。
[0111]以及,用于增大所述抖動(dòng)緩存之前,判斷增大后的抖動(dòng)緩存是否大于預(yù)設(shè)的抖動(dòng)緩存最大值,是則放棄本次調(diào)節(jié),否則增大所述抖動(dòng)緩存的模塊。
[0112]例如,為保證一定的實(shí)時(shí)性,設(shè)置抖動(dòng)緩存最大值Max為3s,為了保證數(shù)據(jù)的完整性,設(shè)置抖動(dòng)緩存最小值Min為200ms。在調(diào)節(jié)的周期內(nèi),增大抖動(dòng)緩存按|p_P|比例來調(diào)整,如抖動(dòng)緩存的當(dāng)前值jitterBuffer為ls,平均丟包率為8%,丟包率閾值P為3%,則調(diào)節(jié)后的 jitterBuffer 為 1000+1000* (8%_3%) =1050ms。若 jitterBuffer 大于預(yù)先設(shè)置的抖動(dòng)緩存最大值Max,則不調(diào)節(jié)。
[0113]減小抖動(dòng)緩存則按|t-T|的幅度來調(diào)整,例如抖動(dòng)緩存的當(dāng)前值jitterBuffer為ls,平均延時(shí)t是500ms,延時(shí)閾值T為400ms,則調(diào)節(jié)后的jitterBuffer為1000ms-(500ms-400ms)=900ms。為保證數(shù)據(jù)的完整性,當(dāng)jitterBuffer低于預(yù)先設(shè)置的抖動(dòng)緩存最小值Min,則不做調(diào)整。
[0114]通過上述方式,在增大和減小所述抖動(dòng)緩存時(shí),以所述丟包率和延時(shí)作為調(diào)節(jié)參數(shù),因此調(diào)節(jié)的幅度與所述丟包率和延時(shí)相關(guān),更加符合丟包率和時(shí)延的要求。而設(shè)定所述抖動(dòng)緩存最大值和最小值對(duì)抖動(dòng)緩存的調(diào)節(jié)進(jìn)行限制,防止調(diào)節(jié)過度影響通信質(zhì)量。[0115]請(qǐng)參閱圖6,圖6是本發(fā)明抖動(dòng)緩存調(diào)節(jié)系統(tǒng)第二實(shí)施方式的結(jié)構(gòu)示意圖。
[0116]本實(shí)施方式的抖動(dòng)緩存調(diào)節(jié)系統(tǒng)與所述第一實(shí)施方式的區(qū)別主要在于,還包括初始值設(shè)置模塊30,所述初始值設(shè)置模塊30包括:
[0117]用于發(fā)送測試數(shù)據(jù)包,并在每個(gè)測試數(shù)據(jù)包中添加序列號(hào)和時(shí)間標(biāo)記的模塊;
[0118]用于在接收端接收測試數(shù)據(jù)包,并根據(jù)所述測試數(shù)據(jù)包的序列號(hào)和時(shí)間標(biāo)記獲取各個(gè)所述測試數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間的模塊;
[0119]用于根據(jù)各個(gè)所述測試數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間按照下式計(jì)算所述抖動(dòng)緩存的理論最佳值的模塊:
【權(quán)利要求】
1.一種抖動(dòng)緩存調(diào)節(jié)方法,其特征在于,包括以下步驟: 獲取數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí); 根據(jù)所述丟包率和延時(shí),按預(yù)設(shè)周期調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。
2. 如權(quán)利要求1所述的抖動(dòng)緩存調(diào)節(jié)方法,其特征在于,獲取數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí)的步驟包括: 按預(yù)設(shè)周期統(tǒng)計(jì)接收端的丟包率和延時(shí); 計(jì)算在每一所述預(yù)設(shè)周期內(nèi)的丟包率的平均值和延時(shí)的平均值,獲取所述預(yù)設(shè)周期內(nèi)的接收端的丟包率和延時(shí)。
3.如權(quán)利要求1所述的抖動(dòng)緩存調(diào)節(jié)方法,其特征在于,根據(jù)所述丟包率和延時(shí),按預(yù)設(shè)周期調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小的步驟包括: 如果所述延時(shí)大于預(yù)設(shè)的延時(shí)閾值,則減少所述抖動(dòng)緩存; 如果所述丟包率大于預(yù)設(shè)的丟包率閾值,并且所述延時(shí)小于所述延時(shí)閾值,則增大所述抖動(dòng)緩存; 如果所述丟包率小于所述丟包率閾值,并且所述延時(shí)小于所述延時(shí)閾值,則維持所述抖動(dòng)緩存的大小不變。
4.如權(quán)利要求3所述的抖動(dòng)緩存調(diào)節(jié)方法,其特征在于,減小所述抖動(dòng)緩存的步驟中,減小的幅度等于所述延時(shí)與所述延時(shí)閾值的差值。
5.如權(quán)利要求3所述的抖動(dòng)緩存調(diào)節(jié)方法,其特征在于,減小所述抖動(dòng)緩存之前,進(jìn)一步判斷減小后的抖動(dòng)緩存是否小于預(yù)設(shè)的抖動(dòng)緩存最小值,是則放棄本次調(diào)節(jié),否則減小所述抖動(dòng)緩存。
6.如權(quán)利要求3所述的抖動(dòng)緩存調(diào)節(jié)方法,其特征在于,增大所述抖動(dòng)緩存的步驟包括: 計(jì)算所述丟包率與所述丟包率閾值的差值; 將所述差值乘以當(dāng)前抖動(dòng)緩存,獲得調(diào)節(jié)值; 增大所述抖動(dòng)緩存,增大的幅度等于所述調(diào)節(jié)值。
7.如權(quán)利要求3所述的抖動(dòng)緩存調(diào)節(jié)方法,其特征在于,增大所述抖動(dòng)緩存之前,進(jìn)一步判斷增大后的抖動(dòng)緩存是否大于預(yù)設(shè)的抖動(dòng)緩存最大值,是則放棄本次調(diào)節(jié),否則增大所述抖動(dòng)緩存。
8.如權(quán)利要求1至7任意一項(xiàng)所述的抖動(dòng)緩存調(diào)節(jié)方法,其特征在于,在獲取數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí)之前,還包括設(shè)置所述接收端的抖動(dòng)緩存的初始值的步驟: 發(fā)送測試數(shù)據(jù)包,并在每個(gè)測試數(shù)據(jù)包中添加序列號(hào)和時(shí)間標(biāo)記; 在接收端接收測試數(shù)據(jù)包,并根據(jù)所述測試數(shù)據(jù)包的序列號(hào)和時(shí)間標(biāo)記獲取各個(gè)所述測試數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間; 根據(jù)各個(gè)所述測試數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間按照下式計(jì)算所述抖動(dòng)緩存的理論最佳值:
9.如權(quán)利要求1至7任意一項(xiàng)所述的抖動(dòng)緩存調(diào)節(jié)方法,其特征在于,根據(jù)所述丟包率和延時(shí),按預(yù)設(shè)周期調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小之前,還包括以下步驟: 按預(yù)設(shè)周期計(jì)算接收端的抖動(dòng)緩存的理論最佳值; 根據(jù)所述理論值調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。
10.如權(quán)利要求9所述的抖動(dòng)緩存調(diào)節(jié)方法,其特征在于,按預(yù)設(shè)周期計(jì)算接收端的抖動(dòng)緩存的理論最佳值的步驟包括: 在所述預(yù)設(shè)周期內(nèi)統(tǒng)計(jì)所述接收端接收的每個(gè)數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間; 根據(jù)各個(gè)所述數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間按照下式計(jì)算所述預(yù)設(shè)周期內(nèi)抖動(dòng)緩存的理論最佳值: jns=max{ (Rj—Sj) 一 (Ri—Si) }; 其中,jns為抖動(dòng)緩存的理論最佳值,Rj表示序列號(hào)為第j個(gè)的測試數(shù)據(jù)包的接收時(shí)間,Sj表示序列號(hào)為第j個(gè)的測試數(shù)據(jù)包的發(fā)送時(shí)間,j和i是兩個(gè)相鄰的序列號(hào)。
11.如權(quán)利要求9 所述的抖動(dòng)緩存調(diào)節(jié)方法,其特征在于,根據(jù)所述理論值調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小的步驟包括: 如果所述抖動(dòng)緩存的理論最佳值與其當(dāng)前值的差值在預(yù)設(shè)范圍內(nèi),則不改變所述抖動(dòng)緩存的當(dāng)前值; 如果所述抖動(dòng)緩存的理論最佳值小于其當(dāng)前值,則按照下式調(diào)節(jié)所述抖動(dòng)緩存的當(dāng)前值:
jitterBuffer=jns+(jitterBuffer-jns)/2 ; 如果所述抖動(dòng)緩存的理論最佳值大于其當(dāng)前值,則按照下式調(diào)節(jié)所述抖動(dòng)緩存的當(dāng)前值:
jitterBuffer=jns-(jns-jitterBuffer)/2 ; 其中,jitterBuffer為所述抖動(dòng)緩存的當(dāng)前值,jns為所述抖動(dòng)緩存的理論最佳值。
12.—種抖動(dòng)緩存調(diào)節(jié)系統(tǒng),其特征在于,包括: 參數(shù)獲取模塊,用于獲取數(shù)據(jù)傳輸?shù)慕邮斩说膩G包率和延時(shí); 第一調(diào)節(jié)模塊,用于根據(jù)所述丟包率和延時(shí),按預(yù)設(shè)周期調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。
13.如權(quán)利要求12所述的抖動(dòng)緩存調(diào)節(jié)系統(tǒng),其特征在于,所述參數(shù)獲取模塊包括: 用于按預(yù)設(shè)周期統(tǒng)計(jì)接收端的丟包率和延時(shí)的模塊; 用于計(jì)算在每一所述預(yù)設(shè)周期內(nèi)的丟包率的平均值和延時(shí)的平均值,獲取所述預(yù)設(shè)周期內(nèi)的接收端的丟包率和延時(shí)的模塊。
14.如權(quán)利要求12所述的抖動(dòng)緩存調(diào)節(jié)系統(tǒng),其特征在于,所述第一調(diào)節(jié)模塊包括: 用于如果所述延時(shí)大于預(yù)設(shè)的延時(shí)閾值,則減少所述抖動(dòng)緩存的模塊; 用于如果所述丟包率大于預(yù)設(shè)的丟包率閾值,并且所述延時(shí)小于所述延時(shí)閾值,則增大所述抖動(dòng)緩存的模塊; 以及,用于如果所述丟包率小于所述丟包率閾值,并且所述延時(shí)小于所述延時(shí)閾值,則維持所述抖動(dòng)緩存的大小不變的模塊。
15.如權(quán)利要求14所述的抖動(dòng)緩存調(diào)節(jié)系統(tǒng),其特征在于,所述第一調(diào)節(jié)模塊在減小所述抖動(dòng)緩存時(shí),減小的幅度等于所述延時(shí)與所述延時(shí)閾值的差值。
16.如權(quán)利要求14所述的抖動(dòng)緩存調(diào)節(jié)系統(tǒng),其特征在于,所述第一調(diào)節(jié)模塊還包括: 用于在增大所述抖動(dòng)緩存時(shí),計(jì)算所述丟包率與所述丟包率閾值的差值的模塊; 以及,用于將所述差值乘以當(dāng)前抖動(dòng)緩存,獲得調(diào)節(jié)值,令增大所述抖動(dòng)緩存的幅度等于所述調(diào)節(jié)值的模塊。
17.如權(quán)利要求12至16任意一項(xiàng)所述的抖動(dòng)緩存調(diào)節(jié)系統(tǒng),其特征在于,還包括初始值設(shè)置模塊,所述初始值設(shè)置模塊包括: 用于發(fā)送測試數(shù)據(jù)包,并在每個(gè)測試數(shù)據(jù)包中添加序列號(hào)和時(shí)間標(biāo)記的模塊; 用于在接收端接收測試數(shù)據(jù)包,并根據(jù)所述測試數(shù)據(jù)包的序列號(hào)和時(shí)間標(biāo)記獲取各個(gè)所述測試數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間的模塊; 用于根據(jù)各個(gè)所述測試數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間按照下式計(jì)算所述抖動(dòng)緩存的理論最佳值的模塊: jns=max{| (Rj—Sj) - (Ri—Si) |}; 其中,jns為抖動(dòng)緩存的理論最佳值,Rj表示序列號(hào)為第j個(gè)的測試數(shù)據(jù)包的接收時(shí)間,Sj表示序列號(hào)為第j個(gè)的測試數(shù)據(jù)包的發(fā)送時(shí)間,j和i是兩個(gè)相鄰的序列號(hào); 以及,用于將所述抖動(dòng)緩存的理論最佳值設(shè)為所述抖動(dòng)緩存的初始值的模塊。
18.如權(quán)利要求12至16任意一項(xiàng)所述的抖動(dòng)緩存調(diào)節(jié)系統(tǒng),其特征在于,還包括--第二調(diào)節(jié)模塊,所述第二調(diào)節(jié)模塊用于按預(yù)設(shè)周期計(jì)算接收端的抖動(dòng)緩存的理論最佳值,根據(jù)所述理論值調(diào)節(jié)所述接收端的抖動(dòng)緩存的大小。
19.如權(quán)利要求18所述的抖動(dòng)緩存調(diào)節(jié)系統(tǒng),其特征在于,所述第二調(diào)節(jié)模塊包括: 用于在所述預(yù)設(shè)周期內(nèi)統(tǒng)計(jì)所述接收端接收的每個(gè)數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間的模塊; 根據(jù)各個(gè)所述數(shù)據(jù)包的發(fā)送時(shí)間和接收時(shí)間按照下式計(jì)算所述預(yù)設(shè)周期內(nèi)抖動(dòng)緩存的理論最佳值的模塊: jns=max{ (Rj—Sj) 一 (Ri—Si) }; 其中,jns為抖動(dòng)緩存的理論最佳值,Rj表示序列號(hào)為第j個(gè)的測試數(shù)據(jù)包的接收時(shí)間,Sj表示序列號(hào)為第j個(gè)的測試數(shù)據(jù)包的發(fā)送時(shí)間,j和i是兩個(gè)相鄰的序列號(hào)。
20.如權(quán)利要求18所述的抖動(dòng)緩存調(diào)節(jié)系統(tǒng),其特征在于,所述第二調(diào)節(jié)模塊還包括: 用于如果所述抖動(dòng)緩存的理論最佳值與其當(dāng)前值的差值在預(yù)設(shè)范圍內(nèi),則不改變所述抖動(dòng)緩存的當(dāng)前值的模塊; 用于如果所述抖動(dòng)緩存的理論最佳值小于其當(dāng)前值,則按照下式調(diào)節(jié)所述抖動(dòng)緩存的當(dāng)前值的模塊:
jitterBuffer=jns+ (jitterBuffer-jns)/2 ; 用于如果所述抖動(dòng)緩存的理論最佳值大于其當(dāng)前值,則按照下式調(diào)節(jié)所述抖動(dòng)緩存的當(dāng)前值的模塊:
jitterBuffer=jns-(jns-jitterBuffer)/2 ; 其中,jitterBuffer為所述抖動(dòng)緩存的當(dāng)前值,jns為所述抖動(dòng)緩存的理論最佳值。
【文檔編號(hào)】H04N21/647GK103533451SQ201310462271
【公開日】2014年1月22日 申請(qǐng)日期:2013年9月30日 優(yōu)先權(quán)日:2013年9月30日
【發(fā)明者】林壽澤 申請(qǐng)人:廣州華多網(wǎng)絡(luò)科技有限公司