国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法

      文檔序號:7937723閱讀:320來源:國知局
      專利名稱:一種自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法。
      背景技術(shù)
      目前,RTP是流媒體傳輸常用的協(xié)議,但是由于RTP是建立在不進行任何擁塞控制的UDP協(xié)議基礎(chǔ)上,需要在應(yīng)用層上加入擁塞控制方法,因此不能直接應(yīng)用于窄變帶寬網(wǎng)絡(luò)環(huán)境下實時視頻監(jiān)視。為了克服上述問題,許多文獻提出了不同的方法。在已有的傳輸控制方法中,解決方法主要分兩種視頻流碼率控制與網(wǎng)絡(luò)傳輸控制。前者根據(jù)網(wǎng)絡(luò)傳輸信道的情況來調(diào)整編碼參數(shù),以生成適合當(dāng)前網(wǎng)絡(luò)傳輸?shù)囊曨l流,從而使視頻傳輸需要的帶寬盡可能小并能充分利用動態(tài)變化的帶寬;后者根據(jù)網(wǎng)絡(luò)傳輸帶寬自適應(yīng)地調(diào)節(jié)視頻數(shù)據(jù)的發(fā)送量,當(dāng)網(wǎng)絡(luò)帶寬良好時,減小視頻數(shù)據(jù)丟棄率,增加數(shù)據(jù)發(fā)送速率。反之,增加視頻數(shù)據(jù)丟棄率,減小數(shù)據(jù)發(fā)送速率。此類控制方法的關(guān)鍵是如何計算網(wǎng)絡(luò)速率變化情況以及視頻數(shù)據(jù)丟棄策略,以減少視頻流的抖動,提高播放的平穩(wěn)特性。但這些控制方法均未將視頻流特點與網(wǎng)絡(luò)傳輸控制方法進行結(jié)合,前者重點闡述視頻碼率的控制方法,而對視頻傳輸過程中如何觸發(fā)碼率調(diào)整以及碼率切換過程中視頻數(shù)據(jù)如何平滑傳輸未作分析;后者重點闡述根據(jù)網(wǎng)絡(luò)帶寬變化調(diào)節(jié)視頻數(shù)據(jù)發(fā)送與丟棄的策略,而對如何利用視頻流碼率調(diào)整實現(xiàn)視頻流隨網(wǎng)絡(luò)帶寬變化自適應(yīng)傳輸均未探討。因此,這些方法還不能直接應(yīng)用于實際網(wǎng)絡(luò)中傳輸視頻流,上述視頻流適用于H. 264、MPEG4。在發(fā)明專利“一種自適應(yīng)網(wǎng)絡(luò)帶寬實時視頻傳輸方法”(專利申請?zhí)?201010103951. 3)中,本發(fā)明依據(jù)網(wǎng)絡(luò)傳輸過程中獲取的時延和丟包率統(tǒng)計信息,并設(shè)定了一個時延與丟包臨界點,分析出當(dāng)前網(wǎng)絡(luò)傳輸帶寬,從而依據(jù)網(wǎng)絡(luò)傳輸帶寬調(diào)整視頻編碼器編碼輸出大小。在該發(fā)明中需要視頻接收方提供時延和丟包率,當(dāng)網(wǎng)絡(luò)帶寬變小時,發(fā)送方得到這些信息的延遲較大。發(fā)送方利用這些較早的信息調(diào)整視頻編碼器編碼參數(shù),可能與當(dāng)前網(wǎng)絡(luò)狀況不符合,甚至相反。因此,該發(fā)明提供的方法在實際動態(tài)帶寬網(wǎng)絡(luò)中傳輸視頻難于達到理想效果。理想情況下,視頻編碼器輸出數(shù)據(jù)的速率與網(wǎng)絡(luò)帶寬相同,并能隨著網(wǎng)絡(luò)帶寬的變化而相應(yīng)變化,以便視頻數(shù)據(jù)能實時地傳輸給接收方。但實際情況下由于網(wǎng)絡(luò)帶寬與視頻場景隨機變化,視頻碼率不可能完全與網(wǎng)絡(luò)帶寬完全相同,視頻碼率調(diào)整總是延遲于網(wǎng)絡(luò)帶寬的變化。因此,一個有效的視頻傳輸控制方法必須解決如下問題其一,能及時發(fā)現(xiàn)網(wǎng)絡(luò)帶寬的變化,并控制視頻碼率作相應(yīng)調(diào)整,使得視頻碼率盡可能最大;其二、能處理好因網(wǎng)絡(luò)帶寬變小時在發(fā)送方積累的視頻數(shù)據(jù)。
      發(fā)明內(nèi)容
      本發(fā)明所要解決的第一個技術(shù)問題是針對上述現(xiàn)有技術(shù)提供一種具有較好視頻數(shù)據(jù)丟幀策略的自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法。
      本發(fā)明所要解決的第二個技術(shù)問題是針對上述現(xiàn)有技術(shù)提供一種具有較好視頻數(shù)據(jù)丟幀策略、同時能根據(jù)網(wǎng)絡(luò)擁堵情況及時下調(diào)視頻編碼器輸出碼率的自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法。本發(fā)明所要解決的第三個技術(shù)問題是針對上述現(xiàn)有技術(shù)提供一種具有較好視頻數(shù)據(jù)丟幀策略、同時能根據(jù)網(wǎng)絡(luò)擁堵或空閑情況及時下調(diào)或上調(diào)視頻編碼器輸出碼率的自適應(yīng)網(wǎng)絡(luò)帶 寬的視頻流傳輸控制方法。本發(fā)明解決上述第一個技術(shù)問題所采用的技術(shù)方案為該自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法,將發(fā)送方的緩存分成兩個一個為視頻數(shù)據(jù)緩存,用于存儲來自視頻編碼器的視頻幀數(shù)據(jù)Md,另一個為視頻發(fā)送緩存Ms,用于暫存來自視頻數(shù)據(jù)緩存Md的一幀視頻數(shù)據(jù),等待傳輸鏈路發(fā)送;設(shè)置兩個并行運行的線程,一個為視頻數(shù)據(jù)輸入線程,用于負(fù)責(zé)視頻數(shù)據(jù)緩存中視頻數(shù)據(jù)的輸入;另一個為視頻數(shù)據(jù)發(fā)送線程,用于負(fù)責(zé)視頻發(fā)送緩存中視頻數(shù)據(jù)的輸入與輸出;其特征在于在視頻數(shù)據(jù)緩存Md中設(shè)置一個幀計數(shù)器n,將視頻數(shù)據(jù)緩存Md中存有的η幀視頻
      數(shù)據(jù),分別記為Mp M2.....Mn,若第i幀最后一個字節(jié)在視頻數(shù)據(jù)緩存中的地址為Pi,則視
      頻數(shù)據(jù)緩存Md中的視頻數(shù)據(jù)的地址會構(gòu)成一個幀地址數(shù)組{PJ (i = 1,. . . η),且P1 < P2 <··· < Pn,每次視頻發(fā)送緩存Ms從視頻數(shù)據(jù)緩存Md獲取視頻數(shù)據(jù)時,從視頻數(shù)據(jù)緩存Md 中取得最前面一幀視頻數(shù)據(jù),同時將幀計數(shù)器減1 ;對視頻數(shù)據(jù)緩存Md設(shè)置一個最大保存數(shù)據(jù)長度警戒線長度Lh,其中Lh = HXLd,其中H = 0. 7 0. 9,Ld為所述視頻數(shù)據(jù)緩存的總字節(jié)長度;所述視頻數(shù)據(jù)輸入線程的處理方法為步驟1、獲取一幀視頻編碼器輸出的視頻數(shù)據(jù)Mf ;步驟2、如果L+Lf > Ld,則執(zhí)行步驟3 ;其中L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度,Lf為當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;Ld為所述視頻數(shù)據(jù)緩存的總字節(jié)長度;步驟3、判斷當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)仏是否為關(guān)鍵幀視頻數(shù)據(jù),如果該幀視頻數(shù)據(jù)Mf不是關(guān)鍵幀視頻數(shù)據(jù),則立即丟棄該幀視頻數(shù)據(jù),并轉(zhuǎn)回步驟1 ;如果該幀視頻數(shù)據(jù)Mf是關(guān)鍵幀視頻數(shù)據(jù),設(shè)置第一中間參數(shù)k的初值,設(shè)k = 0,并轉(zhuǎn)步驟4 ;步驟4、如果Pn_k > Ls/2,置k = k+Ι,然后返回步驟4 ;否則,將視頻數(shù)據(jù)緩存Md中后續(xù)k片視頻數(shù)據(jù)清除,即置η = n_k、L = Pn+1,并將當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf轉(zhuǎn)存至視頻數(shù)據(jù)緩存Md,然后轉(zhuǎn)回步驟1 ;其中Pn_k為視頻數(shù)據(jù)緩存Md中第n-k幀視頻數(shù)據(jù)的地址,Lh為視頻數(shù)據(jù)緩存Md的最大保存數(shù)據(jù)長度警戒線長度,η為視頻數(shù)據(jù)緩存 Md中設(shè)置的幀計數(shù)器所記錄的數(shù)字;L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度;Ρη為視頻數(shù)據(jù)緩存Md中第η幀視頻數(shù)據(jù)的地址;k表示第一中間參數(shù);所述視頻數(shù)據(jù)發(fā)送線程的處理方法為所述視頻數(shù)據(jù)發(fā)送線程將視頻數(shù)據(jù)流按幀為單位進行發(fā)送,具體如下視頻數(shù)據(jù)發(fā)送線程將保存在視頻發(fā)送緩存中的一幀視頻數(shù)據(jù)發(fā)送至接收方,待視頻發(fā)送緩存中視頻數(shù)據(jù)發(fā)送完后,再從視頻數(shù)據(jù)緩存中取得一幀保存時間最久的視頻數(shù)據(jù)存入視頻發(fā)送緩存,然后再次發(fā)送,即重復(fù)上述過程。本發(fā)明解決上述第二個技術(shù)問題所采用的技術(shù)方案為在第一技術(shù)問題所采用的技術(shù)方案基礎(chǔ)上,增加如下技術(shù)方案在所述步驟2中,首先設(shè)置第二中間參數(shù)Fd為“假”,設(shè)置第三中間參數(shù)a、第四中間參數(shù)Mih,第五中間參數(shù)Sih,其中第二中間參數(shù)Fd用作視頻碼率處于下調(diào)過程的標(biāo)志位, 第三中間參數(shù)a為大于等于1的整數(shù),一般取a = 4 8,第四中間參數(shù)Mih用來調(diào)整觸發(fā)視頻編碼器下調(diào)輸出碼率的敏感度,一般取Mih = 0. 1 0. 3之間;第五中間參數(shù)Sih為第三中間參數(shù)a乘以視頻數(shù)據(jù)流中關(guān)鍵幀出現(xiàn)的周期幀數(shù);然后再判斷L+Lf與Ld之間的關(guān)系,如果L+Lf > Ld,則執(zhí)行步驟3 ;如果L+Lf ( Ld, 則執(zhí)行步驟2. 1 ;其中,L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度; Lf為當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;Ld為所述視頻數(shù)據(jù)緩存的總字節(jié)長度;步驟2. 1、判斷第二中間參數(shù)Fd是否為“真”,如果第二中間參數(shù)Fd為“假”,則置第二中間參數(shù)Fd為“真”,然后執(zhí)行步驟2. 2 ;如果第二中間參數(shù)Fd為“真”,則執(zhí)行步驟2. 3 ;步驟2. 2、命令視頻編碼器下調(diào)輸出碼率,同時設(shè)置第六中間參數(shù)Lt、第七中間參數(shù)N1、第八中間參數(shù)S1,且置Lt = L+Lf,N1 = 0、S1 = 0,并轉(zhuǎn)步驟2. 4 ;其中,第六中間參數(shù) Lt用作觀察視頻數(shù)據(jù)緩存Md中數(shù)據(jù)長度變化趨勢時的對比標(biāo)準(zhǔn),第七中間參數(shù)N1表示在視頻編碼器輸出Sih幀視頻數(shù)據(jù)這段時間內(nèi)出現(xiàn)L+Lf > Lt的次數(shù);第八中間參數(shù)S1為計算第七中間參數(shù)N1值的加權(quán)系數(shù);步驟2. 3、判斷L+Lf與第六中間參數(shù)Lt之間的關(guān)系,如果L+Lf > LT,置N1 = N^S1, 然后轉(zhuǎn)步驟2. 5 ;如果L+Lf ( Lt,直接轉(zhuǎn)步驟2. 5 ;步驟2. 4、將當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf轉(zhuǎn)存至視頻數(shù)據(jù)緩存Md,并置Pn+1 = Pn+Lf、L = L+Lf、n = η+l,然后轉(zhuǎn)回步驟1 ;其中Pn為視頻數(shù)據(jù)緩存Md中第η幀視頻數(shù)據(jù)的地址;Ρη+1為視頻數(shù)據(jù)緩存Md中第η+1幀視頻數(shù)據(jù)的地址,Lf為當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度;η為視頻數(shù)據(jù)緩存Md中設(shè)置的幀計數(shù)器的讀數(shù);步驟2. 5、計算第八中間參數(shù)S1 = Si+Ι,如果第八中間參數(shù)S1等于第五中間參數(shù) S1H,轉(zhuǎn)步驟2.6 ;否則,轉(zhuǎn)步驟2.4 ;步驟2. 6、如果第七中間參數(shù)N1值大于MihX SihX (S1H+1)/2,轉(zhuǎn)步驟2. 2 ;否貝U,置第七中間參數(shù)N1 = 0、第八中間參數(shù)S1 = 0,然后轉(zhuǎn)步驟2. 4。本發(fā)明解決上述第三技術(shù)問題所采用的技術(shù)方案為在所述第二技術(shù)問題所采用的技術(shù)方案基礎(chǔ)上,增加如下技術(shù)方案在所述步驟1執(zhí)行完后,先執(zhí)行以下步驟步驟1. 1、如果L+Lf > Lh,先設(shè)置第九中間參數(shù)Fu為“假”,設(shè)置第十中間參數(shù)b、第十一中間參數(shù)M2h,第十二中間參數(shù)S2h,再執(zhí)行步驟2 ;如果L+Lf ^ Lh,則執(zhí)行步驟1. 2 ;其中第九中間參數(shù)Fu用作視頻碼率處于上調(diào)過程的標(biāo)志位;第十中間參數(shù)b為大于第三中間參數(shù)a的整數(shù),一般取b = 12 24,第十一中間參數(shù)M2h用來調(diào)整觸發(fā)視頻編碼器上調(diào)輸出碼率的敏感度,一般取M2h = 0. 1 0. 3之間;第十二中間參數(shù)S2h為第十中間參數(shù)b乘以視頻數(shù)據(jù)流中關(guān)鍵幀出現(xiàn)的周期幀數(shù);
      步驟1. 2、設(shè)置第二中間參數(shù)Fd為“假”;步驟1. 3、判斷第九中間參數(shù)Fu是否為“真”,如果第九中間參數(shù)Fu為“假”,轉(zhuǎn)步驟 1.4,否則轉(zhuǎn)步驟1.5 ;步驟1. 4、如果視頻數(shù)據(jù)緩存Md中幀計數(shù)器η為0,置第九中間參數(shù)Fu為“真”,同時設(shè)置第十三中間參數(shù)N2、第十四中間參數(shù)S2,且置N2 = 0、S2 = 0 ;然后轉(zhuǎn)步驟1.9,否則直接轉(zhuǎn)步驟1. 9 ;其中第十三中間參數(shù)N2表示在視頻編碼器輸出S2h幀視頻數(shù)據(jù)這段時間內(nèi)出現(xiàn)L等于0的次數(shù)、第十四中間參數(shù)S2為計算第十三中間參數(shù)N2值的加權(quán)系數(shù);步驟1. 5、如果視頻數(shù)據(jù)緩存Md中幀計數(shù)器η為0,置第十三中間參數(shù)N2 = N2+S2, 然后轉(zhuǎn)步驟1. 6,否則直接轉(zhuǎn)步驟1. 6 ;步驟1. 6、置第十四中間參數(shù)S2 = S2+l ;步驟1. 7、如果S2 = S2h,置第九中間參數(shù)Fu為“假”,然后轉(zhuǎn)步驟1. 8,否則轉(zhuǎn)步驟 1. 9 ;步驟1. 8、如果第十三中間參數(shù)N2 > M2hXS2hX (S2H+1)/2,通知視頻編碼器將視頻碼率上調(diào),然后轉(zhuǎn)步驟1. 9 ;否則,直接轉(zhuǎn)步驟1. 9 ;步驟丨-^將吣轉(zhuǎn)存至禮中,并置?㈣?,!^!^!^!^?。?!^,然后轉(zhuǎn)步驟丄; 其中Pn為視頻數(shù)據(jù)緩存Md中第η幀視頻數(shù)據(jù)的地址;Ρη+1為視頻數(shù)據(jù)緩存Md中第η+1幀視頻數(shù)據(jù)的地址,Lf當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度;η為視頻數(shù)據(jù)緩存Md中設(shè)置的幀計數(shù)器的讀數(shù)。作為改進,將視頻編碼器輸出的視頻碼率設(shè)置多級,視頻編碼器每次接收到視頻碼率上調(diào)或下調(diào)命令時,只將視頻編碼器輸出的視頻碼率在當(dāng)前輸出的視頻碼率的基礎(chǔ)上上調(diào)一級或下調(diào)一級。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點在于本方法能保證視頻碼率隨網(wǎng)絡(luò)帶寬波動或在可變碼率下隨視頻場景變化而自適應(yīng)調(diào)整,可有效地應(yīng)用于動態(tài)帶寬網(wǎng)絡(luò)環(huán)境下實時視頻監(jiān)視。


      圖1為本發(fā)明實施例--中視頻 女據(jù)緩存之間的數(shù)據(jù)轉(zhuǎn)移關(guān)系圖。
      圖2為本發(fā)明實施例--中視頻 女據(jù)輸入線程的處理流程圖。
      圖3為本發(fā)明實施例--中視頻 女據(jù)發(fā)送線程的處理流程圖。
      圖4為本發(fā)明實施例二二中視頻 女據(jù)輸入線程的處理流程圖。
      圖5為本發(fā)明實施例三Ξ中視頻 女據(jù)輸入線程的處理流程圖。
      具體實施例方式以下結(jié)合附圖實施例對本發(fā)明作進一步詳細描述。實施例一本發(fā)明提供了一種自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法,其將發(fā)送方的緩存M 分成兩個一個為視頻數(shù)據(jù)緩存,記為Md,用于存儲來自視頻編碼器的視頻幀數(shù)據(jù),另一個為視頻發(fā)送緩存,記為Ms,用于暫存來自視頻數(shù)據(jù)緩存的一幀視頻數(shù)據(jù),等待傳輸鏈路發(fā)送;如果Md、Ms的總字節(jié)長度記為Ld、Ls,則發(fā)送方的緩存M的長度即為Ld+Ls。圖1為視頻傳輸時緩存之間的數(shù)據(jù)轉(zhuǎn)移關(guān)系示意圖,其中,Md為先入先出的流緩存,Mf*視頻編碼器輸出的一幀視頻數(shù)據(jù)緩存,M^為數(shù)據(jù)接收緩存,Mp為視頻播放緩存,圖中的雙線箭頭表示數(shù)據(jù)流傳遞方向,單線箭頭表示算法對視頻編碼器控制方向;參見圖1所示。在上述操作中,每次從視頻數(shù)據(jù)緩存Md中取出一幀視頻數(shù)據(jù)至視頻發(fā)送緩存軋而非取出一段視頻數(shù)據(jù),這是為了防止發(fā)送方在網(wǎng)絡(luò)擁塞時丟棄視頻數(shù)據(jù)時不會產(chǎn)生碎幀, 以致于接收方不能正確解碼,并造成不必要的網(wǎng)絡(luò)數(shù)據(jù)傳輸;為了實現(xiàn)視頻數(shù)據(jù)緩存向視頻發(fā)送緩存數(shù)據(jù)轉(zhuǎn)移按幀為單位進行,在視頻數(shù)據(jù)緩存中設(shè)置一個幀計數(shù)器,將視頻數(shù)據(jù)
      緩存中存有的η幀視頻數(shù)據(jù),分別記為Μ” M2.....Mn,若第i幀最后一個字節(jié)在視頻數(shù)據(jù)
      緩存中的地址SPi,則視頻數(shù)據(jù)緩存中的視頻數(shù)據(jù)的地址會構(gòu)成一個幀地址數(shù)組{PJ (i = 1,. . . η),且P1 < P2 < . . . < Pn,每次視頻發(fā)送緩存從視頻數(shù)據(jù)緩存獲取視頻數(shù)據(jù)時,從視頻數(shù)據(jù)緩存中取得最前面一幀視頻數(shù)據(jù),同時將幀計數(shù)器減1設(shè)置兩個并行運行的線程,一個為視頻數(shù)據(jù)輸入線程,用于負(fù)責(zé)視頻數(shù)據(jù)緩存中視頻數(shù)據(jù)的輸入;另一個為視頻數(shù)據(jù)發(fā)送線程,用于負(fù)責(zé)視頻發(fā)送緩存中視頻數(shù)據(jù)的輸入與輸出;為了盡快發(fā)現(xiàn)網(wǎng)絡(luò)帶寬比視頻碼率小,避免視頻數(shù)據(jù)在發(fā)送方積累過多而造成視頻頻繁丟幀,對視頻數(shù)據(jù)緩存Md設(shè)置一個最大保存數(shù)據(jù)長度警戒線長度Lh,其中Lh = HXLd,其中H = 0. 7 0. 9,Ld為所述視頻數(shù)據(jù)緩存的總字節(jié)長度;所述視頻數(shù)據(jù)輸入線程參見圖2所示,具體的處理方法為在視頻數(shù)據(jù)緩存Md向視頻發(fā)送緩存Ms發(fā)送視頻數(shù)據(jù)時,如果發(fā)現(xiàn)視頻發(fā)送緩存Ms中無數(shù)據(jù),立即將M1幀轉(zhuǎn)存至 Ms,然后將M2, M3, ... , Mn逐幀前移,而當(dāng)視頻編碼器Mf有數(shù)據(jù)輸入時,判斷L+Lf的大小,如果L+Lf>Ld,再根據(jù)Mf是否為關(guān)鍵幀有選擇性地丟棄部分視頻數(shù)據(jù),具體步驟如下參見圖 2所示步驟1、獲取一幀視頻編碼器輸出的視頻數(shù)據(jù)Mf ;步驟2、如果L+Lf > Ld,則執(zhí)行步驟3 ;其中L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度,Lf為當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;Ld為所述視頻數(shù)據(jù)緩存的總字節(jié)長度;步驟3、判斷當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)仏是否為關(guān)鍵幀視頻數(shù)據(jù),如果該幀視頻數(shù)據(jù)Mf不是關(guān)鍵幀視頻數(shù)據(jù),則立即丟棄該幀視頻數(shù)據(jù),并轉(zhuǎn)回步驟1 ;如果該幀視頻數(shù)據(jù)Mf是關(guān)鍵幀視頻數(shù)據(jù),設(shè)置第一中間參數(shù)k的初值,設(shè)k = 0,并轉(zhuǎn)步驟4 ;步驟4、如果Pn_k > Ls/2,置k = k+Ι,然后返回步驟4 ;否則,將視頻數(shù)據(jù)緩存Md中后續(xù)k片視頻數(shù)據(jù)清除,即置η = n_k、L = Pn+1,并將當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf轉(zhuǎn)存至視頻數(shù)據(jù)緩存Md,然后轉(zhuǎn)回步驟1 ;其中Pn_k為視頻數(shù)據(jù)緩存Md中第n-k幀視頻數(shù)據(jù)的地址,Lh為視頻數(shù)據(jù)緩存Md的最大保存數(shù)據(jù)長度警戒線長度,η為視頻數(shù)據(jù)緩存 Md中設(shè)置的幀計數(shù)器所記錄的數(shù)字;L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度;Ρη為視頻數(shù)據(jù)緩存Md中第η幀視頻數(shù)據(jù)的地址;k表示第一中間參數(shù);在上述處理步驟中,將視頻數(shù)據(jù)緩存Md中后面n-k幀丟棄而保留k幀視頻數(shù)據(jù),而不將視頻數(shù)據(jù)緩存Md中的數(shù)據(jù)全部清除,一是為了適當(dāng)減少視頻數(shù)據(jù)緩存Md中的數(shù)據(jù)量, 以免下次視頻編碼器Mf輸入時又出現(xiàn)L+Lf > Ld的情況;二是為了避免視頻碼率下調(diào)起作用后,視頻數(shù)據(jù)緩存Md中數(shù)據(jù)量快速減小而又要求視頻碼率調(diào)高;另外,只有當(dāng)Mf為關(guān)鍵幀時才開始視頻數(shù)據(jù)丟棄并將Mf保存,這是因為一個H. 264視頻編碼圖像由一個或多個片 (Slice)組成,H. 264視頻片共有5種不同的類型,即I片、P片、B片、SP片、SI片,一個I 片可以單獨解碼,而其它片需要依賴之前的視頻片才能完整解碼。在進行視頻傳輸時,如果 I片丟失后,后續(xù)接收到的非I片則無法完整解碼;但非I片丟失后,如果在后續(xù)視頻中接收到I片,可以重新開始解碼。上述指的關(guān)鍵幀為包含I片的視頻幀。在MPEG4中,也同樣存在上述特征的關(guān)鍵幀。因此,在視頻實時傳輸時,如果出現(xiàn)網(wǎng)絡(luò)擁塞,可以適當(dāng)丟棄非關(guān)鍵幀,減少數(shù)據(jù)傳輸量,同時又最大限度地減少對接收方視頻播放的影響。所述視頻數(shù)據(jù)發(fā)送線程的處理方法為所述視頻數(shù)據(jù)發(fā)送線程將視頻數(shù)據(jù)流按幀為單位進行發(fā)送,具體如下視頻數(shù)據(jù)發(fā)送線程將保存在視頻發(fā)送緩存中的一幀視頻數(shù)據(jù)發(fā)送至接收方,并將發(fā)送成功的數(shù)據(jù)清除,待視頻發(fā)送緩存中視頻數(shù)據(jù)發(fā)送完后,再從視頻數(shù)據(jù)緩存中取得一幀保存時間最久的視頻數(shù)據(jù)存入視頻發(fā)送緩存,然后再次發(fā)送,即重復(fù)上述過程。參見圖3所示。實施例二 與實施例一不同的是將視頻編碼器輸出的視頻碼率設(shè)置多級,當(dāng)視頻編碼器有視頻數(shù)據(jù)Mf輸入給視頻數(shù)據(jù)緩存Md時,檢測視頻數(shù)據(jù)緩存Md中已有數(shù)據(jù)的長度L,如果當(dāng)L+Lf > Lh時,立即通知編碼器將視頻碼率調(diào)低一級;但在此之后的一段時間內(nèi),當(dāng)視頻數(shù)據(jù)緩存接收到視頻編碼器輸出的視頻數(shù)據(jù)Mf時,仍然會檢測到L+Lf > Lh,其可能由下面2種原因造成的①由于視頻碼率下調(diào)生效延遲,需要一段時間后L+Lf才會不超過Lh;②網(wǎng)絡(luò)帶寬過小,視頻碼率必須下調(diào)2級或以上。如果只是第1種情況,就無須再對視頻編碼的碼率作下調(diào),而對第2種情況,則必須通知視頻編碼器繼續(xù)下調(diào)視頻碼率。在通知視頻編碼器下調(diào)視頻碼率后,如果視頻數(shù)據(jù)緩存Md接收到視頻編碼器輸出的一幀新視頻數(shù)據(jù)Mf時仍然出現(xiàn)L+Lf > Lh,則對視頻數(shù)據(jù)緩存Md中實際已經(jīng)保存的數(shù)間據(jù)長度L變化趨勢進行觀察一段時間。如果變化趨勢是下降的,說明視頻數(shù)據(jù)緩存Md中緩存的數(shù)據(jù)量正在減少,則不再要求編碼器下調(diào)視頻碼率;反之,則說明視頻數(shù)據(jù)緩存Md中緩存的數(shù)據(jù)量未減少,需要再次下調(diào)一級視頻碼率,下調(diào)之后再次重復(fù)這個判斷過程,直至L+Lf <=Lh。具體步驟如下參見圖4所示所述步驟2中,首先設(shè)置第二中間參數(shù)Fd為“假”,設(shè)置第三中間參數(shù)a、第四中間參數(shù)Mih,第五中間參數(shù)Sih,其中第二中間參數(shù)Fd用作視頻碼率處于下調(diào)過程的標(biāo)志位,第三中間參數(shù)a為大于等于1的整數(shù),第四中間參數(shù)Mih用來調(diào)整觸發(fā)視頻編碼器下調(diào)輸出碼率的敏感度,一般取Mih = 0. 1 0. 3之間;第五中間參數(shù)Sih為第三中間參數(shù)a乘以視頻數(shù)據(jù)流中關(guān)鍵幀出現(xiàn)的周期幀數(shù);然后再判斷L+Lf與Ld之間的關(guān)系,如果L+Lf > Ld,則執(zhí)行步驟3 ;如果L+Lf彡Ld, 則執(zhí)行步驟2. 1 ;其中,L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度; Lf為當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;Ld為所述視頻數(shù)據(jù)緩存的總字節(jié)長度;步驟2. 1、判斷第二中間參數(shù)Fd是否為“真”,如果第二中間參數(shù)Fd為“假”,則置第二中間參數(shù)Fd為“真”,然后執(zhí)行步驟2. 2 ;如果第二中間參數(shù)Fd為“真”,則執(zhí)行步驟2. 3 ;
      步驟2. 2、命令視頻編碼器將輸出碼率下調(diào)一級,同時設(shè)置第六中間參數(shù)Lt、第七中間參數(shù)N1、第八中間參數(shù)S1,且置Lt = L+Lf,N1 = 0、S1 = 0,并轉(zhuǎn)步驟2. 4 ;其中,第六中間參數(shù)1^用作觀察視頻數(shù)據(jù)緩存Md中數(shù)據(jù)長度變化趨勢時的對比標(biāo)準(zhǔn),第七中間參數(shù)&表示在視頻編碼器輸出Sih幀視頻數(shù)據(jù)這段時間內(nèi)出現(xiàn)L+Lf > Lt的次數(shù);第八中間參數(shù)S1為計算第七中間參數(shù)N1值的加權(quán)系數(shù);步驟2. 3、判斷L+Lf與第六中間參數(shù)Lt之間的關(guān)系,如果L+Lf > LT,置N1 = N^S1, 然后轉(zhuǎn)步驟2. 5 ;如果L+Lf ( Lt,直接轉(zhuǎn)步驟2. 5 ;步驟2. 4、將當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf轉(zhuǎn)存至視頻數(shù)據(jù)緩存Md,并置Pn+1 = Pn+Lf、L = L+Lf、n = η+l,然后轉(zhuǎn)回步驟1 ;其中Pn為視頻數(shù)據(jù)緩存Md中第η幀視頻數(shù)據(jù)的地址;Ρη+1為視頻數(shù)據(jù)緩存Md中第η+l幀視頻數(shù)據(jù)的地址,Lf當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度;η為視頻數(shù)據(jù)緩存Md中設(shè)置的幀計數(shù)器的讀數(shù);步驟2. 5、計算第八中間參數(shù)S1 = Si+Ι,如果第八中間參數(shù)S1等于第五中間參數(shù) S1H,轉(zhuǎn)步驟2.6 ;否則,轉(zhuǎn)步驟2.4 ;步驟2. 6、如果第七中間參數(shù)N1值大于MihX SihX (S1H+1)/2,轉(zhuǎn)步驟2. 2 ;否貝U,置第七中間參數(shù)N1 = 0、第八中間參數(shù)S1 = 0,然后轉(zhuǎn)步驟2. 4。在上述步驟中,參數(shù)Lt是判決開始時L+Lf的值,用作觀察視頻數(shù)據(jù)緩存Md中數(shù)據(jù)長度變化趨勢時的對比標(biāo)準(zhǔn)。所取的一段時間為編碼器輸出Sih幀視頻數(shù)據(jù)的時間,即T1 =S1H/MQ,其中Sih = aXNQ、a為整數(shù),且a >= 1,N0為視頻流中關(guān)鍵幀出現(xiàn)的周期幀數(shù),Μ。 為編碼器輸出的視頻幀率。其中,設(shè)置經(jīng)過a個Ntl幀(即Sih)后再進行判決,是因為在視頻流中關(guān)鍵幀的數(shù)據(jù)量明顯比非關(guān)鍵幀數(shù)據(jù)量大,完整周期的視頻幀輸入可以提高檢測的可靠性。選取a值越大,判決的可靠性越高,但在觀察時間T內(nèi)出現(xiàn)丟幀的概率也越大,一般取a = 4 8。另外,在對視頻編碼器輸出的視頻數(shù)據(jù)Mf輸入時出現(xiàn)L+Lf > Lt的次數(shù) N1計算中,采用時間為參數(shù)的線性加權(quán)累加方法,加權(quán)系數(shù)為S1,即時間越靠后加權(quán)系數(shù)越大,對N1值的影響更大,因此,N1值的大小反映了出現(xiàn)L+Lf > Lt次數(shù)的變化趨勢。另外,N1 的最大值為SihX (S1Jl)Z^jiN1值判決時閾值采用參數(shù)MihX SihX (S1H+1)/2,其中Mih可以用來調(diào)整觸發(fā)視頻碼率下調(diào)的敏感度,一般取Mih = 0. 1 0. 3之間。實施例三與實施例二不同的是,當(dāng)網(wǎng)絡(luò)帶寬變大或在可變碼率方式下視頻場景變化趨于穩(wěn)定時,視頻碼率會變得比網(wǎng)絡(luò)帶寬小,Mf數(shù)據(jù)轉(zhuǎn)存至Md后立即發(fā)送出去,Md中無視頻數(shù)據(jù)積累現(xiàn)象。由于視頻碼率越高,視頻流總體畫面質(zhì)量越好,因此,控制方法將在網(wǎng)絡(luò)帶寬允許的范圍內(nèi)將對視頻碼率進行上調(diào)。在實施例二中,一旦出現(xiàn)L+Lf> Lh,立即就將視頻碼率下調(diào),而此處如果也一旦出現(xiàn)Md中無數(shù)據(jù)(即L = 0),就立即調(diào)高視頻碼率,很可能使得Md中積累的數(shù)據(jù)量急劇增多。 因為之前Md中無數(shù)據(jù)有可能是因為網(wǎng)絡(luò)不穩(wěn)定的短暫帶寬變大或視頻場景短暫的平穩(wěn)原因造成的,當(dāng)帶寬變成正常情況或視頻場景又開始變化時,再加上視頻碼率又進行了調(diào)高, Md中肯定會出現(xiàn)越來越多的數(shù)據(jù)積累,從而又要求編碼器下調(diào)視頻碼率。如果采取Md中無數(shù)據(jù)就立即上調(diào)視頻碼率的控制策略,那么視頻碼率“上調(diào)——下調(diào)——上調(diào)”的過程會因為網(wǎng)絡(luò)帶寬或視頻場景的變化反復(fù)出現(xiàn)。為了避免此現(xiàn)象發(fā)生,本發(fā)明采用如下處理方法考慮到即使網(wǎng)絡(luò)帶寬大于視頻碼率的情況發(fā)生,短時間內(nèi)不上調(diào)視頻碼率,不會很大程度上影響控制方法的效果,因此,本發(fā)明的方法將在比實施例二中更長的一段時間內(nèi)觀察Md中數(shù)據(jù)長度的變化趨勢。當(dāng)Mf輸入時,如果出現(xiàn)L = 0 (或η = 0)的次數(shù)越來越多,并達到一定的數(shù)量,說明網(wǎng)絡(luò)帶寬允許視頻碼率上調(diào)。同視頻碼率下調(diào)策略一樣,在通知編碼器將視頻碼率調(diào)高后,很可能也會繼續(xù)出現(xiàn)L = 0的情況,此時又需要重新觀察虬中數(shù)據(jù)長度L的變化趨勢。具體步驟如下參見圖5所示在所述步驟1執(zhí)行完后,先執(zhí)行以下步驟步驟1. 1、如果L+Lf > LH,先設(shè)置第九中間參數(shù)Fu* “假”,設(shè)置第十中間參數(shù)b、 第十一中間參數(shù)M2h,第十二中間參數(shù)S2h,再執(zhí)行步驟2 ;如果L+Lf ^ Lh,則執(zhí)行步驟1. 2 ;其中第九中間參數(shù)Fu用作視頻碼率處于上調(diào)過程的標(biāo)志位;第十中間參數(shù)b為大于第三中間參數(shù)a的整數(shù),第十一中間參數(shù)M2h用來調(diào)整觸發(fā)視頻編碼器上調(diào)輸出碼率的敏感度,一般取M2h = 0. i 0. 3之間;第十二中間參數(shù)S2h為第十中間參數(shù)b乘以視頻數(shù)據(jù)流中關(guān)鍵幀出現(xiàn)的周期幀數(shù);步驟1. 2、設(shè)置第二中間參數(shù)Fd為“假”;步驟1. 3、判斷第九中間參數(shù)Fu是否為“真”,如果第九中間參數(shù)Fu為“假”,轉(zhuǎn)步驟 1.4,否則轉(zhuǎn)步驟1.5 ;步驟1. 4、如果視頻數(shù)據(jù)緩存Md中幀計數(shù)器η為0,置第九中間參數(shù)Fu為“真”,同時設(shè)置第十三中間參數(shù)N2、第十四中間參數(shù)S2,且置N2 = 0、S2 = 0 ;然后轉(zhuǎn)步驟1.9,否則直接轉(zhuǎn)步驟1. 9 ;其中第十三中間參數(shù)N2表示在視頻編碼器輸出S2h幀視頻數(shù)據(jù)這段時間內(nèi)出現(xiàn)L等于0的次數(shù)、第十四中間參數(shù)S2為計算第十三中間參數(shù)N2值的加權(quán)系數(shù);步驟1. 5、如果視頻數(shù)據(jù)緩存Md中幀計數(shù)器η為0,置第十三中間參數(shù)N2 = N2+S2, 然后轉(zhuǎn)步驟1. 6,否則直接轉(zhuǎn)步驟1. 6 ;步驟1. 6、置第十四中間參數(shù)S2 = S2+l ;步驟1. 7、如果S2 = S2h,置第九中間參數(shù)Fu為“假”,然后轉(zhuǎn)步驟1. 8,否則轉(zhuǎn)步驟 1. 9 ;步驟1. 8、如果第十三中間參數(shù)N2 > M2hXS2hX (S2H+1)/2,通知視頻編碼器將視頻碼率上調(diào)一級,然后轉(zhuǎn)步驟1. 9 ;否則,直接轉(zhuǎn)步驟1. 9 ;步驟1. 9、將Mf轉(zhuǎn)存至Md中,并置Pn+1 = Pn+Lf、L = L+Lf、n = n+1,然后轉(zhuǎn)步驟1 ; 其中Pn為視頻數(shù)據(jù)緩存Md中第η幀視頻數(shù)據(jù)的地址;Ρη+1為視頻數(shù)據(jù)緩存Md中第n+1幀視頻數(shù)據(jù)的地址,Lf當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度;η為視頻數(shù)據(jù)緩存Md中設(shè)置的幀計數(shù)器的讀數(shù)。在上述步驟中,所取的一段時間為編碼器輸出S2h幀視頻數(shù)據(jù)的時間,即T2 = S2h/ Μ。,其中Mtl為編碼器輸出的視頻幀率,S2h = bXN。、b為整數(shù),且b>a>=l,選取b值越大,判決的可靠性越高,但網(wǎng)絡(luò)帶寬的利用率會有所降低,一般取b = 12 24,M0, N0的定義與“(2)視頻碼率下調(diào)”相同。設(shè)置經(jīng)過b個Ntl幀(即S2H)后再進行判決,是因為在視頻流中關(guān)鍵幀的數(shù)據(jù)量明顯比非關(guān)鍵幀數(shù)據(jù)量大,完整周期的視頻幀輸入可以提高檢測的可靠性。另外,在仏輸入時出現(xiàn)L = 0的次數(shù)N2計算中,采用時間為參數(shù)的線性加權(quán)累加方法,加權(quán)系數(shù)為&,即時間越靠后加權(quán)系數(shù)越大,對N2值的影響更大,因此,N2值的大小反映了出現(xiàn)L = 0次數(shù)的變化趨勢。另外,N2的最大值為‘Χ (S2H+l)/2,對隊值判決時閾值采用參數(shù)M2hX S2hX (S2H+1) /2,其中M2h可以用來調(diào)整觸發(fā)視頻碼率上調(diào)的敏感度,一般取M2h =0. 1 0. 3之間。
      權(quán)利要求
      1.一種自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法,將發(fā)送方的緩存分成兩個一個為視頻數(shù)據(jù)緩存,用于存儲來自視頻編碼器的視頻幀數(shù)據(jù)Md,另一個為視頻發(fā)送緩存Ms,用于暫存來自視頻數(shù)據(jù)緩存Md的一幀視頻數(shù)據(jù),等待傳輸鏈路發(fā)送;設(shè)置兩個并行運行的線程,一個為視頻數(shù)據(jù)輸入線程,用于負(fù)責(zé)視頻數(shù)據(jù)緩存中視頻數(shù)據(jù)的輸入;另一個為視頻數(shù)據(jù)發(fā)送線程,用于負(fù)責(zé)視頻發(fā)送緩存中視頻數(shù)據(jù)的輸入與輸出;其特征在于在視頻數(shù)據(jù)緩存Md中設(shè)置一個幀計數(shù)器n,將視頻數(shù)據(jù)緩存Md中存有的η幀視頻數(shù)據(jù),分別記為Mp M2.....Mn,若第i幀最后一個字節(jié)在視頻數(shù)據(jù)緩存中的地址為Pi,則視頻數(shù)據(jù)緩存Md中的視頻數(shù)據(jù)的地址會構(gòu)成一個幀地址數(shù)組{PJ (i = 1,. . . η),且P1 < P2 <··· < Pn,每次視頻發(fā)送緩存Ms從視頻數(shù)據(jù)緩存Md獲取視頻數(shù)據(jù)時,從視頻數(shù)據(jù)緩存Md 中取得最前面一幀視頻數(shù)據(jù),同時將幀計數(shù)器減1 ;對視頻數(shù)據(jù)緩存Md設(shè)置一個最大保存數(shù)據(jù)長度警戒線長度Lh,其中Lh = HXLd,其中H =0. 7 0. 9,Ld為所述視頻數(shù)據(jù)緩存的總字節(jié)長度;所述視頻數(shù)據(jù)輸入線程的處理方法為步驟1、獲取一幀視頻編碼器輸出的視頻數(shù)據(jù)Mf ;步驟2、如果L+Lf > Ld,則執(zhí)行步驟3 ;其中L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度,Lf為當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;Ld為所述視頻數(shù)據(jù)緩存的總字節(jié)長度;步驟3、判斷當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf是否為關(guān)鍵幀視頻數(shù)據(jù),如果該幀視頻數(shù)據(jù)Mf不是關(guān)鍵幀視頻數(shù)據(jù),則立即丟棄該幀視頻數(shù)據(jù),并轉(zhuǎn)回步驟1 ;如果該幀視頻數(shù)據(jù)Mf是關(guān)鍵幀視頻數(shù)據(jù),設(shè)置第一中間參數(shù)k的初值,Sk = 0,并轉(zhuǎn)步驟4 ;步驟4、如果Pn_k> LH/2,置k = k+1,然后返回步驟4 ;否則,將視頻數(shù)據(jù)緩存Md中后續(xù) k片視頻數(shù)據(jù)清除,即置η = n_k、L = Pn+1,并將當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf 轉(zhuǎn)存至視頻數(shù)據(jù)緩存Md,然后轉(zhuǎn)回步驟1 ;其中Pn_k為視頻數(shù)據(jù)緩存Md中第n-k幀視頻數(shù)據(jù)的地址,Lh為視頻數(shù)據(jù)緩存Md的最大保存數(shù)據(jù)長度警戒線長度,η為視頻數(shù)據(jù)緩存Md中設(shè)置的幀計數(shù)器所記錄的數(shù)字;L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度;Ρη為視頻數(shù)據(jù)緩存Md中第η幀視頻數(shù)據(jù)的地址;k表示第一中間參數(shù);所述視頻數(shù)據(jù)發(fā)送線程的處理方法為所述視頻數(shù)據(jù)發(fā)送線程將視頻數(shù)據(jù)流按幀為單位進行發(fā)送,具體如下視頻數(shù)據(jù)發(fā)送線程將保存在視頻發(fā)送緩存中的一幀視頻數(shù)據(jù)發(fā)送至接收方,待視頻發(fā)送緩存中視頻數(shù)據(jù)發(fā)送完后,再從視頻數(shù)據(jù)緩存中取得一幀保存時間最久的視頻數(shù)據(jù)存入視頻發(fā)送緩存,然后再次發(fā)送,即重復(fù)上述過程。
      2.根據(jù)權(quán)利要求1所述的自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法,其特征在于所述步驟2中,首先設(shè)置第二中間參數(shù)Fd為“假”,設(shè)置第三中間參數(shù)a、第四中間參數(shù) Mih,第五中間參數(shù)Sih,其中第二中間參數(shù)Fd用作視頻碼率處于下調(diào)過程的標(biāo)志位,第三中間參數(shù)a為大于等于1的整數(shù),第四中間參數(shù)Mih用來調(diào)整觸發(fā)視頻編碼器下調(diào)輸出碼率的敏感度,一般取Mih = 0. 1 0. 3之間;第五中間參數(shù)Sih為第三中間參數(shù)a乘以視頻數(shù)據(jù)流中關(guān)鍵幀出現(xiàn)的周期幀數(shù); 然后再判斷L+Lf與Ld之間的關(guān)系,如果L+Lf > Ld,則執(zhí)行步驟3 ;如果L+Lf ( Ld,則執(zhí)行步驟2. 1 ;其中,L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度;Lf為當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;Ld為所述視頻數(shù)據(jù)緩存的總字節(jié)長度; 步驟2. 1、判斷第二中間參數(shù)Fd是否為“真”,如果第二中間參數(shù)Fd為“假”,則置第二中間參數(shù)Fd為“真”,然后執(zhí)行步驟2. 2 ;如果第二中間參數(shù)Fd為“真”,則執(zhí)行步驟2. 3 ;步驟2. 2、命令視頻編碼器下調(diào)輸出碼率,同時設(shè)置第六中間參數(shù)Lt、第七中間參數(shù)N” 第八中間參數(shù)S1,且置Lt = L+Lf,N1 = O、S1 = 0,并轉(zhuǎn)步驟2. 4 ;其中,第六中間參數(shù)Lt用作觀察視頻數(shù)據(jù)緩存Md中數(shù)據(jù)長度變化趨勢時的對比標(biāo)準(zhǔn),第七中間參數(shù)N1表示在視頻編碼器輸出Sih幀視頻數(shù)據(jù)這段時間內(nèi)出現(xiàn)L+Lf > Lt的次數(shù);第八中間參數(shù)S1為計算第七中間參數(shù)N1值的加權(quán)系數(shù);步驟2.3、判斷L+Lf與第六中間參數(shù)Lt之間的關(guān)系,如果L+Lf> Lt,置N1 =舊,然后轉(zhuǎn)步驟2. 5 ;如果L+Lf彡Lt,直接轉(zhuǎn)步驟2. 5 ;步驟2. 4、將當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf轉(zhuǎn)存至視頻數(shù)據(jù)緩存Md,并置 Pn+1 = Pn+Lf、L = L+Lf、n = η+l,然后轉(zhuǎn)回步驟1 ;其中Pn為視頻數(shù)據(jù)緩存Md中第η幀視頻數(shù)據(jù)的地址;Ρη+1為視頻數(shù)據(jù)緩存Md中第η+l幀視頻數(shù)據(jù)的地址,Lf當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;L為所述視頻數(shù)據(jù)緩存Md內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度;η為視頻數(shù)據(jù)緩存Md中設(shè)置的幀計數(shù)器的讀數(shù);步驟2. 5、計算第八中間參數(shù)S1 = SJl,如果第八中間參數(shù)S1等于第五中間參數(shù)Sih,轉(zhuǎn)步驟2.6 ;否則,轉(zhuǎn)步驟2.4 ;步驟2. 6、如果第七中間參數(shù)N1值大于MihX SihX (S1H+1)/2,轉(zhuǎn)步驟2. 2 ;否則,置第七中間參數(shù)N1 = 0、第八中間參數(shù)S1 = 0,然后轉(zhuǎn)步驟2. 4。
      3.根據(jù)權(quán)利要求2所述的自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法,其特征在于在所述步驟1執(zhí)行完后,先執(zhí)行以下步驟步驟11、如果L+Lf > LH,先設(shè)置第九中間參數(shù)Fu* “假”,設(shè)置第十中間參數(shù)b、第十一中間參數(shù)M2h,第十二中間參數(shù)S2h,再執(zhí)行步驟2 ;如果L+Lf ^ Lh,則執(zhí)行步驟1. 2 ;其中第九中間參數(shù)Fu用作視頻碼率處于上調(diào)過程的標(biāo)志位;第十中間參數(shù)b為大于第三中間參數(shù)a 的整數(shù),第十一中間參數(shù)M2h用來調(diào)整觸發(fā)視頻編碼器上調(diào)輸出碼率的敏感度,一般取M2h = 0. 1 0. 3之間;第十二中間參數(shù)S2h為第十中間參數(shù)b乘以視頻數(shù)據(jù)流中關(guān)鍵幀出現(xiàn)的周期幀數(shù);步驟1. 2、設(shè)置第二中間參數(shù)Fd為“假”;步驟1.3、判斷第九中間參數(shù)Fu是否為“真”,如果第九中間參數(shù)Fu為“假”,轉(zhuǎn)步驟1.4, 否則轉(zhuǎn)步驟1. 5 ;步驟1. 4、如果視頻數(shù)據(jù)緩存Md中幀計數(shù)器η為0,置第九中間參數(shù)Fu為“真”,同時設(shè)置第十三中間參數(shù)N2、第十四中間參數(shù)S2,且置N2 = 0、S2 = 0 ;然后轉(zhuǎn)步驟1.9,否則直接轉(zhuǎn)步驟1. 9 ;其中第十三中間參數(shù)N2表示在視頻編碼器輸出S2h幀視頻數(shù)據(jù)這段時間內(nèi)出現(xiàn) L等于0的次數(shù)、第十四中間參數(shù)S2為計算第十三中間參數(shù)N2值的加權(quán)系數(shù);步驟1. 5、如果視頻數(shù)據(jù)緩存Md中幀計數(shù)器η為0,置第十三中間參數(shù)N2 = N2+S2,然后轉(zhuǎn)步驟1. 6,否則直接轉(zhuǎn)步驟1. 6 ;步驟1. 6、置第十四中間參數(shù)S2 = S2+l ;步驟1. 7、如果S2 = S2h,置第九中間參數(shù)Fu為“假”,然后轉(zhuǎn)步驟1. 8,否則轉(zhuǎn)步驟1. 9 ; 步驟1. 8、如果第十三中間參數(shù)N2 > M2hXS2hX (S2H+l)/2,通知視頻編碼器將視頻碼率上調(diào),然后轉(zhuǎn)步驟1. 9 ;否則,直接轉(zhuǎn)步驟1. 9 ;步驟1. 9、將Mf轉(zhuǎn)存至Md中,并置Pn+1 = Pn+Lf、L = L+Lf、n = η+l,然后轉(zhuǎn)步驟1 ;其中 Pn為視頻數(shù)據(jù)緩存Md中第η幀視頻數(shù)據(jù)的地址;Ρη+1為視頻數(shù)據(jù)緩存Md中第η+l幀視頻數(shù)據(jù)的地址,Lf當(dāng)前從視頻編碼器輸出的一幀視頻數(shù)據(jù)Mf的長度;L為所述視頻數(shù)據(jù)緩存Md 內(nèi)當(dāng)前已經(jīng)實際保存的視頻數(shù)據(jù)總長度;η為視頻數(shù)據(jù)緩存Md中設(shè)置的幀計數(shù)器的讀數(shù)。
      4.根據(jù)權(quán)利要求2或3所述的自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法,其特征在于 將視頻編碼器輸出的視頻碼率設(shè)置多級,視頻編碼器每次接收到視頻碼率上調(diào)或下調(diào)命令時,只將視頻編碼器輸出的視頻碼率在當(dāng)前輸出的視頻碼率的基礎(chǔ)上上調(diào)一級或下調(diào)一級。
      全文摘要
      本發(fā)明涉及一種自適應(yīng)網(wǎng)絡(luò)帶寬的視頻流傳輸控制方法,該方法通過在發(fā)送方設(shè)置視頻數(shù)據(jù)緩存與數(shù)據(jù)發(fā)送緩存,同時設(shè)置兩個并行運行的視頻數(shù)據(jù)輸入線程和視頻數(shù)據(jù)發(fā)送線程,根據(jù)網(wǎng)絡(luò)帶寬的變化分別設(shè)置視頻傳輸過程中視頻丟幀、視頻碼率上調(diào)與下調(diào)的三個主要控制方法,其中,為了避免傳輸過程中視頻“碎幀”出現(xiàn),控制方法中設(shè)置一個幀地址數(shù)組實現(xiàn)視頻數(shù)據(jù)按幀傳輸與丟棄;為了確保視頻碼率調(diào)整的正確性,控制方法采用時間為參數(shù)的加權(quán)累加方法來判斷視頻數(shù)據(jù)積累的變化趨勢。該發(fā)明能保證視頻碼率隨網(wǎng)絡(luò)帶寬波動或在可變碼率下隨視頻場景變化而自適應(yīng)調(diào)整,可有效地應(yīng)用于動態(tài)帶寬網(wǎng)絡(luò)環(huán)境下實時視頻監(jiān)視。
      文檔編號H04N21/647GK102325274SQ20111030920
      公開日2012年1月18日 申請日期2011年10月13日 優(yōu)先權(quán)日2011年10月13日
      發(fā)明者劉高平 申請人:浙江萬里學(xué)院
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1