專利名稱:一種在視頻解碼能力不足時客戶端不出現(xiàn)馬賽克的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在視頻解碼能力不足時保證客戶端不出現(xiàn)馬賽克的方法,具體地說 是一種在客戶端解碼能力不足時,采用上層主動丟包機制的方法使客戶端可以實時重現(xiàn) 前端視頻并且不會出現(xiàn)馬賽克現(xiàn)象。
背景技術(shù):
視頻碼流在網(wǎng)絡(luò)上傳輸一般基于RTP/RTCP傳輸方式,RTP運行于UDP用戶數(shù) 據(jù)報協(xié)議之上,用戶數(shù)據(jù)報協(xié)議是0 參考模型中一種無連接的傳輸層協(xié)議,提供面向 事務(wù)的簡單不可靠信息傳送服務(wù)。是一個簡單的面向數(shù)據(jù)報的傳輸協(xié)議,由于UDP不能 保證提供可靠的數(shù)據(jù)傳輸,所以在碼流傳輸過程中可能會產(chǎn)生丟包,我們稱之為底層丟 包??蛻舳私獯a能力不足時而采取的主動丟包機制我們稱之為上層丟包。當客戶端在 解碼視頻碼流時,當解碼速度跟不上網(wǎng)絡(luò)傳輸速度時,如果上層不采取主動丟包機制, 則忽略底層丟包的影響理論上客戶端不會出現(xiàn)馬賽克現(xiàn)象,但會造成很大的延時不符合 實時性的要求,并且會使客戶端視頻流緩存區(qū)無限增大;如果上層主動丟包而不經(jīng)過任 何處理直接將這些數(shù)據(jù)包交付解碼器解碼則由于缺少某些數(shù)據(jù)包而導致會出現(xiàn)馬賽克現(xiàn) 象。發(fā)明內(nèi)容
為了解決上述傳統(tǒng)問題,因此本發(fā)明的一個目的就是提出了一種在視頻解碼能 力不足時客戶端不出現(xiàn)馬賽克的方法,包括客戶端接收由網(wǎng)絡(luò)傳輸過來的UDP數(shù)據(jù)包 后,客戶端將UDP數(shù)據(jù)包轉(zhuǎn)換成RTP數(shù)據(jù)包并存入緩存區(qū),在緩存區(qū)進行丟包處理后, 客戶端從緩存區(qū)讀出RTP數(shù)據(jù)包進行解碼前預(yù)處理,然后交付解碼器進行解碼并在客戶 端顯不。
其中丟包處理,進一步包括以下步驟
判斷RTP數(shù)據(jù)包數(shù)據(jù)流量是否超出系統(tǒng)設(shè)置的RTP數(shù)據(jù)包解碼極限,如果小于 解碼極限則直接交付解碼器進行預(yù)處理,當大于解碼極限時,丟掉更早的RTP包,保留 最后10個RTP數(shù)據(jù)包,從倒數(shù)第十個數(shù)據(jù)包開始檢索緩存區(qū)中的IDR幀數(shù)據(jù)包;
檢索到IDR幀數(shù)據(jù)包時,把緩存區(qū)中IDR幀數(shù)據(jù)包以前的所有數(shù)據(jù)包丟棄。
由于丟棄了某些數(shù)據(jù)包,如果直接把緩存中的數(shù)據(jù)包交付解碼器解碼將會出現(xiàn) 馬賽克現(xiàn)象,所以客戶端在進入解碼器解碼之前要對緩存中的數(shù)據(jù)包做相應(yīng)處理。
其中解碼前預(yù)處理進一步包括P幀及IDR幀處理。
其中的P幀處理進一步包括
通過判斷解碼的RTP包的時間戳大小判斷解碼的RTP包順序是否正確,如果發(fā) 生亂序,則丟棄;
通過判斷解碼的RTP包的序列號判斷P幀之前的RTP包在丟包機制中或在底層 SOCKET傳輸中是否丟失,若丟失則丟棄當前的ρ幀;
判斷是否需要等待IDR幀,若不需要等待則表示此P幀前的IDR幀完全接收, 此時此P幀可以交付解碼,若未完全接收,則丟棄此P幀。
其中的IDR幀處理進一步包括
通過判斷解碼的RTP包的時間戳大小判斷解碼的RTP包順序是否正確,如果發(fā) 生亂序,則丟棄;
當接收到IDR幀開始數(shù)據(jù)包時,并且此時的IDR幀以分片單元的形式傳送的, 則交付解碼器解碼解碼;
當接收到IDR幀其它RTP數(shù)據(jù)包時,即非開始RTP包或結(jié)束RTP包時,通過判 斷RTP包的序列號來判斷是否之前的RTP在丟包機制中或在底層SOCKET傳輸中是否丟 失同時判斷接收該IDR幀過程中是否發(fā)生錯誤,若丟失或發(fā)生錯誤則丟棄該IDR幀RTP 數(shù)包據(jù),否則交付解碼;
當接收到IDR幀結(jié)束包時,通過判斷RTP包的序列號來判斷之前的RTP在丟包 機制中或在底層SOCKET傳輸中是否丟失同時判斷接收該IDR幀過程中是否發(fā)生錯誤, 若丟失或發(fā)生錯誤則丟棄該IDR幀,否則此IDR幀交付解碼。
通過以上丟包及解碼預(yù)處理解決了在客戶端視頻解碼能力不足時客戶端出現(xiàn)馬 賽克現(xiàn)象和客戶端重現(xiàn)前端視頻時存在延時現(xiàn)象。
結(jié)合隨后的附圖,從下面的詳細說明中可顯而易見的得出本發(fā)明的上述及其他 目的、特征及優(yōu)點。在附圖中
圖1給出了解碼前處理流程圖2給出了丟包處理流程圖3給出了 P幀處理流程圖4給出了 IDR幀處理流程圖。
具體實施方式
在下文中將詳細地論述的,本公開可以采用完全硬件的實施例、完全軟件的實 施例或包括硬件和軟件元件兩者的實施例的形式。在優(yōu)選實施例中,本公開可以用軟件 來實施,其可以包括但不局限于固件、駐留軟件、微碼等等。
如圖1所示,提供了一種在視頻解碼能力不足時客戶端不出現(xiàn)馬賽克的方法, 包括客戶端接收由網(wǎng)絡(luò)傳輸過來的UDP數(shù)據(jù)包后,客戶端將UDP數(shù)據(jù)包轉(zhuǎn)換成RTP數(shù)據(jù) 包并存入緩存區(qū),在緩存區(qū)進行丟包處理后,客戶端從緩存區(qū)域讀出RTP數(shù)據(jù)包進行解 碼前預(yù)處理,然后交付解碼器進行解碼并在客戶端顯示。
如圖2所示丟包處理,包括
步驟1 判斷RTP數(shù)據(jù)包數(shù)據(jù)流量是否超出系統(tǒng)設(shè)置的RTP數(shù)據(jù)包解碼極限, 如果小于解碼極限則直接交付解碼器進行預(yù)處理,當大于解碼極限時,丟掉更早的RTP 包,保留最后10個RTP數(shù)據(jù)包,從倒數(shù)第10幀開始檢索緩存區(qū)中的IDR幀數(shù)據(jù)包;
步驟2:檢索到IDR幀數(shù)據(jù)包時,把緩存區(qū)中IDR幀數(shù)據(jù)包以前的所有數(shù)據(jù)包 丟棄。
由于丟棄了某些數(shù)據(jù)包,如果直接把緩存中的數(shù)據(jù)包交付解碼器解碼將會出現(xiàn) 馬賽克現(xiàn)象,所以客戶端在進入解碼器解碼之前要對緩存中的數(shù)據(jù)包做相應(yīng)處理。解碼 預(yù)處理包括對P幀的處理以及對IDR幀的處理。
如圖3所示P幀處理包括
步驟1 通過判斷解碼的RTP包的時間戳大小判斷解碼的RTP包順序是否正 確,如果發(fā)生亂序,則丟棄;
步驟2 通過判斷解碼的RTP包的序列號判斷P幀之前的RTP包在丟包機制中 或在底層SOCKET傳輸中是否丟失,若丟失則丟棄當前的ρ幀;
步驟3 判斷是否需要等待IDR幀,若不需要等待則表示此P幀前的IDR幀完 全接收,此時此P幀可以交付解碼,若未完全接收,則丟棄此P幀。
如圖4所示IDR幀處理包括
步驟1 通過判斷解碼的RTP包的時間戳大小判斷解碼的RTP包順序是否正 確,如果發(fā)生亂序,則丟棄;
步驟2:當接收到IDR幀開始數(shù)據(jù)包時,并且此時的IDR幀以分片單元的形式 傳送的,則交付解碼器解碼解碼;當接收到IDR幀其它RTP數(shù)據(jù)包時,即非開始RTP包 或結(jié)束RTP包時,通過判斷RTP包的序列號來判斷之前的RTP在丟包機制中或在底層 SOCKET傳輸中是否丟失同時判斷接收該IDR幀過程中是否發(fā)生錯誤,若丟失或發(fā)生錯 誤則丟棄該IDR幀數(shù)據(jù)包否則交付解碼;當接收到IDR幀RTP結(jié)束包時,通過判斷RTP 包的序列號來判斷之前的RTP包在丟包機制中或在底層SOCKET傳輸中是否丟失同時判 斷接收該IDR幀接收過程中是否發(fā)生錯誤,若丟失或發(fā)生錯誤則丟棄該IDR幀,否則此 IDR幀交付解碼。權(quán)利要求
1.一種在視頻解碼能力不足時客戶端不出現(xiàn)馬賽克的方法,其特征在于包括客戶端 接收由網(wǎng)絡(luò)傳輸過來的UDP數(shù)據(jù)包后,客戶端將UDP數(shù)據(jù)包轉(zhuǎn)換成RTP數(shù)據(jù)包并存入緩 存區(qū),在緩存區(qū)進行丟包處理后,客戶端從緩沖區(qū)讀出RTP數(shù)據(jù)包進行解碼前預(yù)處理, 然后交付解碼器進行解碼并在客戶端顯示。
2.根據(jù)權(quán)利要求1,其中丟包處理,進一步包括Al:判斷緩存區(qū)RTP包數(shù)量是否超出系統(tǒng)設(shè)置的RTP數(shù)據(jù)包解碼極限,如果小于解 碼極限則直接交付解碼器進行預(yù)處理,當大于解碼極限時,丟掉更早的RTP包,保留最 后十個RTP數(shù)據(jù)包,從倒數(shù)第十個數(shù)據(jù)包開始檢索緩存區(qū)中的IDR幀數(shù)據(jù)包;A2檢索到IDR幀數(shù)據(jù)包時,把緩存區(qū)中IDR幀數(shù)據(jù)包以前的所有數(shù)據(jù)包丟棄。
3.根據(jù)權(quán)利要求1,其中解碼前預(yù)處理進一步包括P幀及IDR幀處理。
4.根據(jù)權(quán)利要求3,其中的P幀處理包括Bi:通過判斷解碼的RTP包的時間戳大小判斷解碼的RTP包順序是否正確,如果發(fā) 生亂序,則丟棄;B2 通過判斷解碼的RTP包的序列號判斷P幀之前的RTP包在丟包機制中或在底層 SOCKET傳輸中是否丟失,若丟失則丟棄當前的ρ幀;B3判斷是否需要等待IDR幀,若不需要等待則表示此P幀前的IDR幀完全接收, 此時此P幀可以交付解碼,若未完全接收,則丟棄此P幀。
5.根據(jù)權(quán)利要求3,其中的IDR幀處理包括Cl:通過判斷解碼的RTP包的時間戳大小判斷解碼的RTP包順序是否正確,如果發(fā) 生亂序,則丟棄;C2當接收到IDR幀開始數(shù)據(jù)包時,并且此時的IDR幀以分片單元的形式傳送的, 則交付解碼器解碼;C3 當接收到IDR幀其它RTP數(shù)據(jù)包時,即非開始RTP包或結(jié)束RTP包時,通過 判斷RTP包的序列號來判斷之前的RTP在丟包機制中或在底層SOCKET傳輸中是否丟失 同時判斷接收該IDR幀過程中是否發(fā)生錯誤,若丟失或發(fā)生錯誤則丟棄該IDR幀數(shù)據(jù)包 否則交付解碼;C4當接收到IDR幀結(jié)束包時,通過判斷RTP包的序列號來判斷之前的RTP包在丟 包機制中或在底層SOCKET傳輸中是否丟失同時判斷接收該IDR幀接收過程中是否發(fā)生 錯誤,若丟失或發(fā)生錯誤則丟棄該IDR幀。否則此IDR幀交付解碼。
全文摘要
一種在視頻解碼能力不足時客戶端不出現(xiàn)馬賽克的方法,該方法包括客戶端接收由網(wǎng)絡(luò)傳輸過來的UDP數(shù)據(jù)包后,客戶端將UDP數(shù)據(jù)包轉(zhuǎn)換成RTP數(shù)據(jù)包并存入緩存區(qū),在緩存區(qū)進行丟包處理后,客戶端從緩沖區(qū)讀出RTP數(shù)據(jù)包進行解碼前預(yù)處理,然后交付解碼器進行解碼并在客戶端顯示,經(jīng)過本發(fā)明中的丟包及解碼預(yù)處理解決了在客戶端視頻解碼能力不足時客戶端出現(xiàn)馬賽克現(xiàn)象和客戶端重現(xiàn)前端視頻時存在延時現(xiàn)象。
文檔編號H04L29/06GK102025687SQ20091010228
公開日2011年4月20日 申請日期2009年9月10日 優(yōu)先權(quán)日2009年9月10日
發(fā)明者夏江明, 孫小華, 莊濤, 朱碧軍, 李英梅 申請人:浙江省公眾信息產(chǎn)業(yè)有限公司