本發(fā)明涉及通信技術領域,尤其涉及一種實時通信中的抗丟包方法、裝置和系統(tǒng)。
背景技術:
在實時通信中,音視頻媒體通常使用udp(userdatagramprotocol,用戶數(shù)據報協(xié)議)進行傳輸,由于udp是一種無連接的傳輸協(xié)議,是一種盡力而為的服務方式,無法提供可靠的傳輸服務,因此網絡中不可避免地會發(fā)生丟包,從而導致聲音不連續(xù)、視頻花屏停頓等現(xiàn)象,嚴重影響通信質量和用戶體驗,因此抗丟包的技術是關系到用戶體驗的一項重要技術。
目前用于抗丟包的技術一般有:fec(forwarderrorcorrection,前向糾錯)、重傳、交織。一般來說,交織的時延較大,而當丟包由于擁塞引起時,盲目的重傳會加重網絡擁塞,因此,重傳和交織在實時通訊系統(tǒng)中應用受到一些限制。
基于上述考慮,實時通信中通常采用fec進行抗丟包,而由于fec是通過增加冗余來達到抗丟包的目的,因此,它會在網絡擁塞時導致?lián)砣M一步加重。并且,在移動互聯(lián)網時代,通過fec增加冗余的另一個負面影響是,由于fec過多將耗費大量的網絡流量,因此,會產生昂貴的通信費用。如果fec的冗余比較高,則可以最大限度的恢復丟包,但會導致冗余數(shù)據的帶寬占用很高;相反,如果fec的冗余比較低,則不能保證完全恢復所有包,會導致視頻顯示出現(xiàn)花屏卡頓等問題,降低用戶體驗。
解決該問題的常用方法是根據網絡統(tǒng)計的丟包率來決定fec冗余級別,但由于網絡反饋的丟包率一般是基于歷史的統(tǒng)計,并不能完全反映當前的網絡狀況,故此時fec冗余級別對應的是歷史時間的網絡平均狀況,在當前網絡狀況下并不能保證恢復所有包,所以,fec無法起到預期效果,從而無法從根本上解決該問題。
技術實現(xiàn)要素:
本發(fā)明的主要目的在于提出一種實時通信中的抗丟包方法、裝置和系統(tǒng),旨在實現(xiàn)在實時通信過程中對數(shù)據傳輸網絡中發(fā)生的丟包進行自適應處理,增強實時通信過程中的抗丟包能力。
為實現(xiàn)上述目的,本發(fā)明提供的實時通信中的抗丟包方法,包括:
向接收端發(fā)送網絡數(shù)據包,所述網絡數(shù)據包包括編碼后的視頻幀數(shù)據和fec冗余數(shù)據,所述fec冗余數(shù)據根據網絡丟包率確定有相應的多組fec冗余級別;
接收所述接收端解析還原所述網絡數(shù)據包后發(fā)送的反饋數(shù)據;
當所述反饋數(shù)據為丟包反饋數(shù)據時,根據所述丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據,發(fā)送至所述接收端。
優(yōu)選地,所述重新選擇相應fec冗余數(shù)據發(fā)送至所述接收端的步驟之前還包括:
判斷重新發(fā)送的fec冗余數(shù)據的時效性,若滿足當前時效要求,則執(zhí)行將重新選擇的相應的fec冗余數(shù)據發(fā)送至所述接收端的步驟。
優(yōu)選地,所述接收所述接收端發(fā)送的反饋數(shù)據的步驟之后還包括:
當所述反饋數(shù)據為解碼錯誤反饋數(shù)據,根據所述解碼錯誤反饋數(shù)據的當前解碼錯誤模型,獲取解碼錯誤幀相應的可獨立解碼幀發(fā)送至所述接收端。
優(yōu)選地,所述發(fā)送端向接收端發(fā)送網絡數(shù)據包的步驟之前還包括:
通過視頻編碼器對采集的視頻幀進行編碼,將編碼后的視頻幀數(shù)據進行fec編碼,生成多組冗余級別的fec冗余數(shù)據,同時通過關鍵幀編碼器對采集的視頻幀數(shù)據進行關鍵幀編碼生成可獨立解碼幀,其中,關鍵幀編碼器生成的幀數(shù)據的帶寬占用小于視頻編碼器生成的幀數(shù)據的帶寬占用。
優(yōu)選地,所述丟包模型包括當前丟失的媒體包個數(shù)、當前丟失的fec包個數(shù)和/或丟包序號;所述解碼錯誤模型包括解碼錯誤的幀號、錯誤宏塊的比例和/或錯誤宏塊的位置。
本發(fā)明實施例還提出一種實時通信中的抗丟包裝置,其特征在于,所述裝置包括:
發(fā)送模塊,用于向接收端發(fā)送網絡數(shù)據包,所述網絡數(shù)據包包括編碼后的視 頻幀數(shù)據和fec冗余數(shù)據,所述fec冗余數(shù)據根據網絡丟包率確定有相應的多組fec冗余級別;
接收模塊,用于接收所述接收端解析還原所述網絡數(shù)據包后發(fā)送的反饋數(shù)據;
丟包處理模塊,當所述反饋數(shù)據為丟包反饋數(shù)據時,根據所述丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據,發(fā)送至所述接收端。
優(yōu)選地,所述裝置還包括:
判斷模塊,用于判斷重新發(fā)送的fec冗余數(shù)據的時效性,若滿足當前時效要求,則由所述丟包處理模塊將重新選擇的相應的fec冗余數(shù)據發(fā)送至所述接收端。
優(yōu)選地,所述裝置還包括:
解碼錯誤處理模塊,用于當所述反饋數(shù)據為解碼錯誤反饋數(shù)據,根據所述解碼錯誤反饋數(shù)據的當前解碼錯誤模型,獲取解碼錯誤幀相應的可獨立解碼幀發(fā)送至所述接收端。
優(yōu)選地,其特征在于,所述裝置還包括:
編碼模塊,通過視頻編碼器對采集的視頻幀進行編碼,將編碼后的視頻幀數(shù)據進行fec編碼,生成多組冗余級別的fec冗余數(shù)據,同時通過關鍵幀編碼器對采集的視頻幀數(shù)據進行關鍵幀編碼生成可獨立解碼幀,其中,關鍵幀編碼器生成的幀數(shù)據的帶寬占用小于視頻編碼器生成的幀數(shù)據的帶寬占用。
優(yōu)選地,所述丟包模型包括當前丟失的媒體包個數(shù)、當前丟失的fec包個數(shù)和/或丟包序號;所述解碼錯誤模型包括解碼錯誤的幀號、錯誤宏塊的比例和/或錯誤宏塊的位置。
本發(fā)明實施例還提出一種實時通信中的抗丟包系統(tǒng),其特征在于,包括:接收端和發(fā)送端,其中:
所述發(fā)送端包括如上所述的裝置;
所述接收端,用于接收所述發(fā)送端發(fā)送的網絡數(shù)據包;對所述網絡數(shù)據包中的fec冗余數(shù)據進行解析,恢復丟失的所述網絡數(shù)據包中視頻幀數(shù)據;判斷所有視頻幀數(shù)據是否恢復,若是,則對所述數(shù)據進行解碼;否則,發(fā)送丟包反饋數(shù) 據至所述發(fā)送端,接收所述發(fā)送端在預設的多組冗余級別的fec冗余數(shù)據中重新選擇的相應級別的fec冗余數(shù)據,若重新接收的相應級別的fec冗余數(shù)據發(fā)生丟包,則發(fā)送解碼錯誤反饋數(shù)據至所述發(fā)送端;否則,對解碼后的視頻幀數(shù)據進行緩存;將緩存的解碼數(shù)據發(fā)送至顯示設備進行顯示。
本發(fā)明公開了一種實時通信中的抗丟包方法、裝置和系統(tǒng),通過向接收端解析還原所述網絡數(shù)據包后發(fā)送網絡數(shù)據包,網絡數(shù)據包包括編碼后的視頻幀數(shù)據和fec冗余數(shù)據,fec冗余數(shù)據根據網絡丟包率確定有相應的多組fec冗余級別;接收接收端發(fā)送的反饋數(shù)據;當反饋數(shù)據為丟包反饋數(shù)據時,根據丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據,將fec冗余數(shù)據發(fā)送至接收端;此外,還通過當反饋數(shù)據為解碼錯誤反饋數(shù)據,根據當前解碼錯誤模型,獲取解碼錯誤幀相應的可獨立解碼幀發(fā)送至接收端。本發(fā)明解決了現(xiàn)有技術中在進行實時通信時,對網絡丟包的處理無法同時滿足高質量和低帶寬的需求,抗丟包能力較差的問題。實現(xiàn)了在實時通信過程中對數(shù)據傳輸網絡中發(fā)生的網絡丟包進行自適應處理,增強實時通信過程中的抗丟包能力。
附圖說明
圖1是本發(fā)明實時通信中的抗丟包方法第一實施例的流程示意圖;
圖2是本發(fā)明實時通信中的抗丟包方法第二實施例的流程示意圖;
圖3是本發(fā)明實時通信中的抗丟包方法第三實施例的流程示意圖;
圖4是本發(fā)明實時通信中的抗丟包方法第四實施例的流程示意圖;
圖5是本發(fā)明實時通信中的抗丟包裝置第一實施例的功能模塊示意圖;
圖6是本發(fā)明實時通信中的抗丟包裝置第二實施例的功能模塊示意圖;
圖7是本發(fā)明實時通信中的抗丟包裝置第三實施例的功能模塊示意圖;
圖8是本發(fā)明實時通信中的抗丟包裝置第四實施例的功能模塊示意圖;
圖9是本發(fā)明實時通信中的抗丟包系統(tǒng)第一實施例的結構示意圖。
圖10是實時通信系統(tǒng)的結構示意圖;
圖11是實時通信系統(tǒng)中發(fā)送端的結構示意圖;
圖12是實時通信系統(tǒng)中接收端的結構示意圖;
圖13是實時通信系統(tǒng)中接收端的接收發(fā)送端發(fā)送的反饋信息的流程示意圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結合實施例,參照附圖做進一步說明。
具體實施方式
應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明實施例的主要解決方案是:向接收端發(fā)送網絡數(shù)據包,網絡數(shù)據包包括編碼后的視頻幀數(shù)據和fec冗余數(shù)據,fec冗余數(shù)據根據網絡丟包率確定有相應的fec冗余級別;接收接收端發(fā)送的反饋數(shù)據;當反饋數(shù)據為丟包反饋數(shù)據時,根據丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據,將fec冗余數(shù)據發(fā)送至接收端;此外,還包括當反饋數(shù)據為解碼錯誤反饋數(shù)據,根據當前解碼錯誤模型,獲取解碼錯誤幀相應的可獨立解碼幀發(fā)送至接收端。由此,解決了有技術中在進行實時通信時,對網絡丟包的處理無法同時滿足高質量和低帶寬的需求,抗丟包能力較差的問題。實現(xiàn)了在實時通信過程中對數(shù)據傳輸網絡中發(fā)生的丟包進行自適應處理,增強實時通信過程中的抗丟包能力。
如圖1所示,本發(fā)明第一實施例提出一種實時通信中的抗丟包方法,包括:
步驟s1,向接收端發(fā)送網絡數(shù)據包,所述網絡數(shù)據包包括編碼后的視頻幀數(shù)據和fec冗余數(shù)據,所述fec冗余數(shù)據根據網絡丟包率確定有相應的多組fec冗余級別。
本發(fā)明方法的執(zhí)行主體可以為一種信息發(fā)送設備、裝置或終端,本實施例以發(fā)送終端(以下簡稱發(fā)送端)進行舉例,當然也不限定于其他能夠為實時通信信息提供編碼和發(fā)送服務的設備。
其中,發(fā)送端設置有三個編碼器,包括:視頻編碼器、關鍵幀編碼器和fec編碼器。
其中,發(fā)送端對視頻編碼器和關鍵幀編碼器進行初始化,初始化參數(shù)包括目標碼率、分辨率、幀率等。
其中,發(fā)送端采集目標視頻的視頻幀數(shù)據,將采集的視頻幀數(shù)據送入視頻編 碼器進行視頻編碼,生成編碼后的視頻幀數(shù)據;同時,將采集的視頻幀數(shù)據送入關鍵幀編碼器進行關鍵幀編碼,生成可獨立解碼幀,該可獨立解碼幀比視頻編碼器編碼后的視頻幀數(shù)據占用更小帶寬。
其中,關鍵幀編碼器可采用與視頻編碼器不同的幀率、碼率、分辨率、編碼方式,或者采用其他策略,以達到較低的編碼碼率;關鍵幀編碼器的幀率等參數(shù)可根據網絡狀況自適應調整,以使關鍵幀編碼器的幀率低于視頻編碼器的幀率,減小資源占用。
其中,關鍵幀編碼器的幀率可以根據網絡丟包率動態(tài)調整,其動態(tài)調整的方法為:定義視頻編碼器的幀率為fra,關鍵幀編碼器的幀率為frb,網絡丟包率為l。關鍵幀編碼器的編碼幀率按如下公式(1)確定:
其中,關鍵幀編碼器編碼的幀序號計算方法為:
1、獲取視頻幀編碼器的編碼幀率fra和網絡丟包率l,根據公式(1)計算的出關鍵幀編碼器的編碼幀率frb;
2、根據關鍵幀編碼器的編碼幀率frb換算,在與視頻編碼器輸出的幀序號對應的基礎上,得到關鍵幀編碼器編碼的幀序號。
例如:假定fra=9,l=8%,視頻編碼器輸出的幀序號為(1、2、3、4、5…..),則根據公式(1)可得,frb=3。那么,關鍵幀編碼器編碼的幀序號應該為(1、4、7、10、13……)。
為了解決現(xiàn)有技術中在進行實時通信時抗丟包能力較差的問題,本實施例采用如下方案:
首先,發(fā)送端向接收端發(fā)送網絡數(shù)據包,上述網絡數(shù)據包包括編碼后的視頻幀數(shù)據和fec冗余數(shù)據。
其中,發(fā)送端采集目標視頻的視頻幀數(shù)據,通過視頻編碼器對視頻幀數(shù)據進行編碼,生成編碼后的視頻幀數(shù)據;同時,通過fec編碼器對視頻幀數(shù)據進行fec編碼,生成三組冗余級別的fec冗余數(shù)據。其中,fec編碼采用rs算法,在rs算法中,n表示原始分組大小,k表示原始包與冗余包個數(shù)之和,k-n表 示單個分組中可抗丟包的個數(shù)。在上述生成三組冗余級別的fec冗余數(shù)據中,生成三組冗余的n、k值分別選擇{8,9}、{4,5}、{4,6},三個級別依次定義為級別1、級別2、級別3。
步驟s2,接收所述接收端解析還原所述網絡數(shù)據包后發(fā)送的反饋數(shù)據。
具體地,發(fā)送端在成功向接收端發(fā)送網絡數(shù)據包后,接收上述接收端解析還原所述網絡數(shù)據包后發(fā)送的反饋數(shù)據。
其中,上述反饋數(shù)據可以為丟包反饋數(shù)據或錯誤解碼反饋數(shù)據;上述丟包反饋數(shù)據中包括當前丟包模型,該丟包模型包括當前丟失的媒體包個數(shù)、當前丟失的fec包個數(shù)和/或丟包序號等數(shù)據;上述錯誤解碼反饋數(shù)據中包括當前錯誤解碼模型,該錯誤解碼模型包括解碼錯誤的幀號、錯誤宏塊的比例和/或錯誤宏塊的位置等數(shù)據;上述接收端發(fā)送反饋數(shù)據的反饋操作采用即時反饋。
步驟s3,當所述反饋數(shù)據為丟包反饋數(shù)據時,根據所述丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據,發(fā)送至所述接收端。
具體地,首先,當接收的上述接收端發(fā)送的反饋數(shù)據為丟包反饋數(shù)據時,發(fā)送端根據丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據。
其中,上述重新選擇相應級別的fec冗余數(shù)據的方法如下:
1、從當前丟包模型中獲取原始分組大小n,原始包與冗余包個數(shù)之和k和該組中丟包個數(shù);
2、計算k-n的值,表示單個分組中可抗丟包的個數(shù),由于接收端為丟包狀態(tài),故此時該組中丟包個數(shù)大于k-n的值;
3、從預設的多個fec冗余級別中,確定一個使該組中丟包個數(shù)小于或等于k-n的值的冗余級別,即將冗余級別提升到能抗該程度丟包的冗余級別;
4、選擇該fec冗余級別中的fec冗余數(shù)據。
發(fā)送端在成功重新選擇相應級別的fec冗余數(shù)據后,將該fec冗余數(shù)據發(fā)送至接收端。
通過上述方案,本發(fā)明提供了一種實時通信過程中出現(xiàn)丟包時進行數(shù)據包補償?shù)姆椒?,盡可能地保證了所有丟包都能被恢復,同時減少了fec數(shù)據中冗余 的浪費,從而增強了實時通信過程中的抗丟包能力,并減少帶寬占用。
如圖2所示,本發(fā)明第二實施例提出一種實時通信中的抗丟包方法,基于上述圖1所述的實施例,重新選擇相應fec冗余數(shù)據發(fā)送至所述接收端的步驟之前還包括:
判斷重新發(fā)送的fec冗余數(shù)據的時效性,若滿足預設時效要求,則執(zhí)行重新選擇相應的fec冗余數(shù)據發(fā)送至所述接收端的步驟。
由此,在本實施例中,上述步驟s3可以包括:
步驟s31,當所述反饋數(shù)據為丟包反饋數(shù)據時,根據所述丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據;
具體地,首先,當接收的上述接收端發(fā)送的反饋數(shù)據為丟包反饋數(shù)據時,發(fā)送端根據丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據。
其中,上述重新選擇相應級別的fec冗余數(shù)據的方法如下:
1、從當前丟包模型中獲取原始分組大小n,原始包與冗余包個數(shù)之和k和該組中丟包個數(shù);
2、計算k-n的值,表示單個分組中可抗丟包的個數(shù),由于接收端為丟包狀態(tài),故此時該組中丟包個數(shù)大于k-n的值;
3、從預設的多個fec冗余級別中,確定一個使該組中丟包個數(shù)小于或等于k-n的值的冗余級別,即將冗余級別提升到能抗該程度丟包的冗余級別;
4、選擇該fec冗余級別中的fec冗余數(shù)據。
步驟s32,判斷重新發(fā)送的fec冗余數(shù)據的時效性,若滿足預設時效要求,則執(zhí)行步驟s33;否則,執(zhí)行步驟s34。
具體地,發(fā)送端在成功重新選擇相應fec冗余數(shù)據發(fā)送至所述接收端后,對重新發(fā)送的fec冗余數(shù)據進行時效性判斷。
其中,時效性判斷方法為:
定義網絡往返時延為ttl,接收端的解碼幀緩存單元水位為t(其中,解碼幀緩存單元為接收端用于存儲解碼幀數(shù)據而設置的緩存單元),上述重新發(fā)送的fec冗余數(shù)據恢復數(shù)據和視頻解碼需要時間為δt,通過如下公式(2)對時效性 進行判斷:
ttl+δt<t(2);
若滿足公式(2),則認為滿足時效性要求,執(zhí)行步驟s33;否則,認為不滿足時效性要求,執(zhí)行步驟s34。
步驟s33,將重新選擇的相應的fec冗余數(shù)據發(fā)送至所述接收端。
具體地,若判斷到重新發(fā)送的fec冗余數(shù)據滿足時效性要求,則將重新選擇的相應的fec冗余數(shù)據發(fā)送至接收端。
步驟s34,不發(fā)送重新選擇的相應的fec冗余數(shù)據至所述接收端。
具體地,若判斷到重新發(fā)送的fec冗余數(shù)據不滿足時效性要求,則不發(fā)送重新選擇的相應的fec冗余數(shù)據至接收端。
通過上述方案,本發(fā)明提供了一種實時通信過程中出現(xiàn)丟包時進行丟包處理的方法,盡可能地保證了所有丟包都能被恢復,同時減少了fec數(shù)據中冗余的浪費,從而增強了實時通信過程中的抗丟包能力,并減少帶寬占用;另外,在發(fā)送fec冗余數(shù)據之前,對該fec冗余數(shù)據進行了時效性判斷,減少了不必要的網絡帶寬開銷。
如圖3所示,本發(fā)明第三實施例提出一種實時通信中的抗丟包方法,根據上述圖1所述的實施例,接收所述接收端發(fā)送的反饋數(shù)據的步驟之后還包括:
步驟s5,當所述反饋數(shù)據為解碼錯誤反饋數(shù)據,根據所述解碼錯誤反饋數(shù)據的當前解碼錯誤模型,獲取解碼錯誤幀相應的可獨立解碼幀發(fā)送至所述接收端。
具體地,首先,當接收的上述接收端發(fā)送的反饋數(shù)據為解碼錯誤數(shù)據時,發(fā)送端根據解碼錯誤數(shù)據的當前解碼錯誤模型,獲取解碼錯誤幀相應的可獨立解碼幀。
其中,發(fā)送端采集目標視頻的視頻幀數(shù)據,通過關鍵幀編碼器對視頻幀數(shù)據進行編碼,生成可獨立解碼幀,該可獨立解碼幀比視頻編碼器編碼后的視頻幀數(shù)據占用更小帶寬。
其中,關鍵幀編碼器的幀率根據網絡丟包率動態(tài)調整,其方法為:定義視頻編碼器的幀率為fra,關鍵幀編碼器的幀率為frb,網絡丟包率為l。關鍵幀編 碼器的編碼幀率按如下公式(1)確定:
其中,解碼錯誤模型主要包括解碼錯誤的幀號、錯誤宏塊的比例和/或錯誤宏塊的位置等數(shù)據;獲取解碼錯誤幀相應的可獨立解碼幀的方法為:
1、獲取視頻幀編碼器的編碼幀率fra和網絡丟包率l,根據公式(1)計算的出關鍵幀編碼器的編碼幀率frb;
2、關鍵幀編碼器的幀序號根據其編碼幀率frb換算,在與視頻編碼器輸出的幀序號對應的基礎上,得到關鍵幀編碼器編碼的幀序號。
例如:假定fra=9,l=8%,視頻編碼器輸出的幀序號為(1、2、3、4、5…..),則根據公式(1)可得,frb=3。那么,關鍵幀編碼器編碼的幀序號應該為(1、4、7、10、13……)。
3、根據當前解碼錯誤模型中的解碼錯誤的幀號,獲取對應幀號中的可獨立解碼幀。
發(fā)送端在成功獲取解碼錯誤幀相應的可獨立解碼幀后,將該可獨立解碼幀發(fā)送至接收端。
通過上述方案,本發(fā)明提供了一種實施通信過程中出現(xiàn)解碼錯誤時的解碼錯誤處理方法,使媒體信息在解碼錯誤后能得到解決,也使媒體信息能得到有效傳遞。
如圖4所示,本發(fā)明第四實施例提出一種實時通信中的抗丟包方法,根據上述圖1所述的實施例,所述發(fā)送端向接收端發(fā)送網絡數(shù)據包的步驟之前還包括:
步驟s6,通過視頻編碼器對采集的視頻幀進行編碼,將編碼后的視頻幀數(shù)據進行fec編碼,生成多組冗余級別的fec冗余數(shù)據,同時通過關鍵幀編碼器對采集的視頻幀數(shù)據進行關鍵幀編碼生成可獨立解碼幀,其中,關鍵幀編碼器生成的幀數(shù)據的帶寬占用小于視頻編碼器生成的幀數(shù)據的帶寬占用。
具體地,發(fā)送端通過視頻編碼器對采集的視頻幀進行編碼,對編碼后的視頻 幀數(shù)據進行fec編碼,生成多組冗余級別的fec冗余數(shù)據,再通過網絡丟包率,確定一組相應級別的fec冗余數(shù)據,對該fec冗余數(shù)據進行發(fā)送。其中,發(fā)送端采集目標視頻的視頻幀數(shù)據,通過視頻編碼器對視頻幀數(shù)據進行編碼,生成編碼后的視頻幀數(shù)據;同時,通過fec編碼器對視頻幀數(shù)據進行fec編碼,生成三組冗余級別的fec冗余數(shù)據,再通過網絡丟包率,確定相應級別的fec冗余分組。上述fec冗余級別的確定,應遵循盡可能保守選擇的原則,其目的是為了防止fec冗余數(shù)據量過大時,可能導致網絡擁塞,惡化通話質量;同時也盡可能降低網絡流量的消耗。
其中,fec編碼采用rs算法,在rs算法中,n表示原始分組大小,k表示原始包與冗余包個數(shù)之和,k-n表示單個分組中可抗丟包的個數(shù)。在上述生成三組冗余級別的fec冗余數(shù)據中,生成三組冗余的n、k值分別選擇{8,9}、{4,5}、{4,6},三個級別依次定義為級別1、級別2、級別3。
其中,根據網絡丟包率確定一組相應級別的fec冗余級別的方法為,定義網絡丟包率為l,冗余級別為level,通過如下計算公式計算出冗余級別:
同時,發(fā)送端對采集的視頻幀數(shù)據進行編碼生成可獨立解碼幀。
其中,發(fā)送端采集目標視頻的視頻幀數(shù)據,通過關鍵幀編碼器對視頻幀數(shù)據進行編碼,生成可獨立解碼幀,該可獨立解碼幀比視頻編碼器編碼后的視頻幀數(shù)據占用更小帶寬。
其中,關鍵幀編碼器可采用與視頻編碼器不同的幀率、碼率、分辨率、編碼方式,或者采用其他策略,以達到較低的編碼碼率。關鍵幀編碼器的幀率等參數(shù)可根據網絡狀況自適應調整,以使關鍵幀編碼器的幀率低于視頻編碼器的幀率,減小資源占用。
其中,關鍵幀編碼器的幀率根據網絡丟包率動態(tài)調整的方法為:定義視頻編碼器的幀率為fra,關鍵幀編碼器的幀率為frb,網絡丟包率為l。關鍵幀編碼器的編碼幀率按公式(1)確定:
通過上述方案,本發(fā)明提供了一種生成多組冗余級別的fec冗余數(shù)據和可獨立解碼幀的方法,為實時通信過程中的丟包處理和解碼錯誤處理的進行提供了保證。
如圖5所示,本發(fā)明第一實施例提出一種實時通信中的抗丟包裝置,包括:
發(fā)送模塊100,用于向接收端發(fā)送網絡數(shù)據包,所述網絡數(shù)據包包括編碼后的視頻幀數(shù)據和fec冗余數(shù)據,所述fec冗余數(shù)據根據網絡丟包率確定有相應的fec冗余級別。
本發(fā)明的執(zhí)行主體可以為一種信息發(fā)送設備、裝置或終端,本實施例以發(fā)送終端(以下簡稱發(fā)送端)進行舉例,當然也不限定于其他能夠為實時通信信息提供編碼和發(fā)送服務的設備。
其中,發(fā)送端設置有三個編碼器,包括:視頻編碼器、關鍵幀編碼器和fec編碼器。
其中,發(fā)送端對視頻編碼器和關鍵幀編碼器進行初始化,初始化參數(shù)包括目標碼率、分辨率、幀率等。
其中,發(fā)送端采集目標視頻的視頻幀數(shù)據,將采集的視頻幀數(shù)據送入視頻編碼器進行視頻編碼,生成編碼后的視頻幀數(shù)據;同時,將采集的視頻幀數(shù)據送入關鍵幀編碼器進行關鍵幀編碼,生成可獨立解碼幀,該可獨立解碼幀比視頻編碼器編碼后的視頻幀數(shù)據占用更小帶寬。
其中,關鍵幀編碼器可采用與視頻編碼器不同的幀率、碼率、分辨率、編碼方式,或者采用其他策略,以達到較低的編碼碼率;關鍵幀編碼器的幀率等參數(shù)可根據網絡狀況自適應調整,以使關鍵幀編碼器的幀率低于視頻編碼器的幀率,減小資源占用。
其中,關鍵幀編碼器的幀率可根據網絡丟包率動態(tài)調整,其方法為:定義視頻編碼器的幀率為fra,關鍵幀編碼器的幀率為frb,網絡丟包率為l。關鍵幀 編碼器的編碼幀率按如下公式(1)確定:
其中,關鍵幀編碼器編碼的幀序號計算方法為:
1、獲取視頻幀編碼器的編碼幀率fra和網絡丟包率l,根據公式(1)計算的出關鍵幀編碼器的編碼幀率frb;
2、根據關鍵幀編碼器的編碼幀率frb換算,在與視頻編碼器輸出的幀序號對應的基礎上,得到關鍵幀編碼器編碼的幀序號。
例如:假定fra=9,l=8%,視頻編碼器輸出的幀序號為(1、2、3、4、5…..),則根據公式(1)可得,frb=3。那么,關鍵幀編碼器編碼的幀序號應該為(1、4、7、10、13……)。
為了解決現(xiàn)有技術中在進行實時通信時抗丟包能力較差的問題,本實施例采用如下方案:
首先,發(fā)送模塊100向接收端發(fā)送網絡數(shù)據包,上述網絡數(shù)據包包括編碼后的視頻幀數(shù)據和fec冗余數(shù)據。
其中,發(fā)送端采集目標視頻的視頻幀數(shù)據,通過視頻編碼器對視頻幀數(shù)據進行編碼,生成編碼后的視頻幀數(shù)據;同時,通過fec編碼器對視頻幀數(shù)據進行fec編碼,生成三組冗余級別的fec冗余數(shù)據其中,fec編碼采用rs算法,在rs算法中,n表示原始分組大小,k表示原始包與冗余包個數(shù)之和,k-n表示單個分組中可抗丟包的個數(shù)。在上述生成三組冗余級別的fec冗余數(shù)據中,生成三組冗余的n、k值分別選擇{8,9}、{4,5}、{4,6},三個級別依次定義為級別1、級別2、級別3。
接收模塊200,用于接收所述接收端解析還原所述網絡數(shù)據包后發(fā)送的反饋數(shù)據。
具體地,在成功向接收端發(fā)送網絡數(shù)據包后,接收模塊200接收上述接收端解析還原所述網絡數(shù)據包后發(fā)送的反饋數(shù)據。
其中,上述反饋數(shù)據可以為丟包反饋數(shù)據或錯誤解碼反饋數(shù)據;上述丟包反 饋數(shù)據中包括當前丟包模型,該丟包模型包括當前丟失的媒體包個數(shù)、當前丟失的fec包個數(shù)和/或丟包序號等數(shù)據;上述錯誤解碼反饋數(shù)據中包括當前錯誤解碼模型,該錯誤解碼模型包括解碼錯誤的幀號、錯誤宏塊的比例和/或錯誤宏塊的位置等數(shù)據;上述接收端發(fā)送反饋數(shù)據的反饋操作采用即時反饋。
丟包處理模塊300,用于當所述反饋數(shù)據為丟包反饋數(shù)據時,根據所述丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據,發(fā)送至所述接收端。
具體地,首先,當接收的上述接收端發(fā)送的反饋數(shù)據為丟包反饋數(shù)據時,丟包處理模塊300根據丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據。
其中,上述重新選擇相應級別的fec冗余數(shù)據的方法如下:
1、從當前丟包模型中獲取原始分組大小n,原始包與冗余包個數(shù)之和k和該組中丟包個數(shù);
2、計算k-n的值,表示單個分組中可抗丟包的個數(shù),由于接收端為丟包狀態(tài),故此時該組中丟包個數(shù)大于k-n的值;
3、從預設的多個fec冗余級別中,確定一個使該組中丟包個數(shù)小于或等于k-n的值的冗余級別,即將冗余級別提升到能抗該程度丟包的冗余級別;
4、選擇該fec冗余級別中的fec冗余數(shù)據。
發(fā)送端在成功重新選擇相應級別的fec冗余數(shù)據后,將該fec冗余數(shù)據發(fā)送至接收端。
通過上述方案,本發(fā)明提供了一種實時通信過程中出現(xiàn)丟包時進行數(shù)據包補償?shù)难b置,盡可能地保證了所有丟包都能被恢復,同時減少了fec數(shù)據中冗余的浪費,從而增強了實時通信過程中的抗丟包能力,并減少帶寬占用。
如圖6所示,本發(fā)明第二實施例提出一種實時通信中的抗丟包裝置,根據上述圖5所述的實施例,該裝置還包括:
判斷模塊400,還用于判斷重新發(fā)送的fec冗余數(shù)據的時效性,若滿足當前時效要求,則由所述丟包處理模塊將重新選擇的相應的fec冗余數(shù)據發(fā)送至所述接收端。具體方案如下:
當所述反饋數(shù)據為丟包反饋數(shù)據時,丟包處理模塊300根據所述丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據;
具體地,首先,當接收的上述接收端發(fā)送的反饋數(shù)據為丟包反饋數(shù)據時,發(fā)送端根據丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據。
其中,上述重新選擇相應級別的fec冗余數(shù)據的方法如下:
1、從當前丟包模型中獲取原始分組大小n,原始包與冗余包個數(shù)之和k和該組中丟包個數(shù);
2、計算k-n的值,表示單個分組中可抗丟包的個數(shù),由于接收端為丟包狀態(tài),故此時該組中丟包個數(shù)大于k-n的值;
3、從預設的多個fec冗余級別中,確定一個使該組中丟包個數(shù)小于或等于k-n的值的冗余級別,即將冗余級別提升到能抗該程度丟包的冗余級別;
4、選擇該fec冗余級別中的fec冗余數(shù)據。
判斷模塊400判斷重新發(fā)送的fec冗余數(shù)據的時效性。
具體地,發(fā)送端在成功重新選擇相應fec冗余數(shù)據發(fā)送至所述接收端后,對重新發(fā)送的fec冗余數(shù)據進行時效性判斷。
其中,時效性判斷方法為:
定義網絡往返時延為ttl,接收端的解碼幀緩存單元水位為t(其中,解碼幀緩存單元為接收端用于存儲解碼幀數(shù)據而設置的緩存單元),上述重新發(fā)送的fec冗余數(shù)據恢復數(shù)據和視頻解碼需要時間為δt,通過如下公式(2)對時效性進行判斷:
ttl+δt<t(2);
若滿足公式(2),則認為滿足時效性要求,丟包處理模塊300將重新選擇的相應的fec冗余數(shù)據發(fā)送至所述接收端;否則,認為不滿足時效性要求,丟包處理模塊300不發(fā)送重新選擇的相應的fec冗余數(shù)據至所述接收端。
通過上述方案,本發(fā)明提供了一種實時通信過程中出現(xiàn)丟包時進行丟包處理的裝置,盡可能地保證了所有丟包都能被恢復,同時減少了fec數(shù)據中冗余的 浪費,從而增強了實時通信過程中的抗丟包能力,并減少帶寬占用;另外,在發(fā)送fec冗余數(shù)據之前,對該fec冗余數(shù)據進行了時效性判斷,減少了不必要的網絡帶寬開銷。
如圖7所示,本發(fā)明第三實施例提出一種實時通信中的抗丟包裝置,根據上述圖5所述的實施例,該裝置還包括:
解碼錯誤處理模塊500,用于當所述反饋數(shù)據為解碼錯誤反饋數(shù)據,根據所述解碼錯誤反饋數(shù)據的當前解碼錯誤模型,獲取解碼錯誤幀相應的可獨立解碼幀發(fā)送至所述接收端。
具體地,首先,當接收的上述接收端發(fā)送的反饋數(shù)據為解碼錯誤數(shù)據時,解碼錯誤處理模塊500根據解碼錯誤數(shù)據的當前解碼錯誤模型,獲取解碼錯誤幀相應的可獨立解碼幀。
其中,發(fā)送端采集目標視頻的視頻幀數(shù)據,通過關鍵幀編碼器對視頻幀數(shù)據進行編碼,生成可獨立解碼幀;該可獨立解碼幀比視頻編碼器編碼后的視頻幀數(shù)據占用更小帶寬。
其中,關鍵幀編碼器的幀率根據網絡丟包率動態(tài)調整,其方法為:定義視頻編碼器的幀率為fra,關鍵幀編碼器的幀率為frb,網絡丟包率為l。關鍵幀編碼器的編碼幀率按如下公式(1)確定:
其中,解碼錯誤模型主要包括解碼錯誤的幀號、錯誤宏塊的比例和/或錯誤宏塊的位置等數(shù)據;獲取解碼錯誤幀相應的可獨立解碼幀的方法為:
1、獲取視頻幀編碼器的編碼幀率fra和網絡丟包率l,根據公式(1)計算的出關鍵幀編碼器的編碼幀率frb;
2、關鍵幀編碼器的幀序號根據其編碼幀率frb換算,在與視頻編碼器輸出的幀序號對應的基礎上,得到關鍵幀編碼器編碼的幀序號。
例如:假定fra=9,l=8%,視頻編碼器輸出的幀序號為(1、2、3、4、5…..),則根據公式(1)可得,frb=3。那么,關鍵幀編碼器編碼的幀序號應該為(1、4、 7、10、13……)。
3、根據當前解碼錯誤模型中的解碼錯誤的幀號,獲取對應幀號中的可獨立解碼幀。
解碼錯誤處理模塊500在成功獲取解碼錯誤幀相應的可獨立解碼幀后,將該可獨立解碼幀發(fā)送至接收端。
通過上述方案,本發(fā)明提供了一種實施通信過程中出現(xiàn)解碼錯誤時的解碼錯誤處理裝置,使媒體信息在解碼錯誤后能得到解決,也使媒體信息能得到有效傳遞。
如圖8所示,本發(fā)明第四實施例提出一種實時通信中的抗丟包裝置,根據上述圖5所述的實施例,該裝置還包括:
編碼模塊600,用于通過視頻編碼器對采集的視頻幀進行編碼,將編碼后的視頻幀數(shù)據進行fec編碼,生成多組冗余級別的fec冗余數(shù)據,同時通過關鍵幀編碼器對采集的視頻幀數(shù)據進行關鍵幀編碼生成可獨立解碼幀,其中,關鍵幀編碼器生成的幀數(shù)據的帶寬占用小于視頻編碼器生成的幀數(shù)據的帶寬占用。
具體地,編碼模塊600通過視頻編碼器對采集的視頻幀進行編碼,對編碼后的視頻幀數(shù)據進行fec編碼,生成多組冗余級別的fec冗余數(shù)據,再通過網絡丟包率,確定一組相應級別的fec冗余數(shù)據,對該fec冗余數(shù)據進行發(fā)送。
其中,發(fā)送端采集目標視頻的視頻幀數(shù)據,通過視頻編碼器對視頻幀數(shù)據進行編碼,生成編碼后的視頻幀數(shù)據;同時,通過fec編碼器對視頻幀數(shù)據進行fec編碼,生成三組冗余級別的fec冗余數(shù)據,再通過網絡丟包率,確定相應級別的fec冗余分組。上述fec冗余級別的確定,應遵循盡可能保守選擇的原則,其目的是為了防止fec冗余數(shù)據量過大時,可能導致網絡擁塞,惡化通話質量;同時也盡可能降低網絡流量的消耗。
其中,fec編碼采用rs算法,在rs算法中,n表示原始分組大小,k表示原始包與冗余包個數(shù)之和,k-n表示單個分組中可抗丟包的個數(shù)。在上述生成三組冗余級別的fec冗余數(shù)據中,生成三組冗余的n、k值分別選擇{8,9}、{4,5}、{4,6},三個級別依次定義為級別1、級別2、級別3。
其中,根據網絡丟包率確定一組相應級別的fec冗余級別的方法為,定義 網絡丟包率為l,冗余級別為level,通過如下計算公式計算出冗余級別:
同時,編碼模塊600對采集的視頻幀數(shù)據進行編碼生成可獨立解碼幀。
其中,發(fā)送端采集目標視頻的視頻幀數(shù)據,通過關鍵幀編碼器對視頻幀數(shù)據進行編碼,生成可獨立解碼幀,該可獨立解碼幀比視頻編碼器編碼后的視頻幀數(shù)據占用更小帶寬。
其中,關鍵幀編碼器可采用與視頻編碼器不同的幀率、碼率、分辨率、編碼方式,或者采用其他策略,以達到較低的編碼碼率。關鍵幀編碼器的幀率等參數(shù)可根據網絡狀況自適應調整,以使關鍵幀編碼器的幀率低于視頻編碼器的幀率,減小資源占用。
其中,關鍵幀編碼器的幀率根據網絡丟包率動態(tài)調整的方法為:定義視頻編碼器的幀率為fra,關鍵幀編碼器的幀率為frb,網絡丟包率為l。關鍵幀編碼器的編碼幀率按公式(1)確定:
通過上述方案,本發(fā)明提供了一種生成多組冗余級別的fec冗余數(shù)據和可獨立解碼幀的裝置,為實時通信過程中的丟包處理和解碼錯誤處理的進行提供了保證。
如圖9所示,本發(fā)明第一實施例提出一種實時通信中的抗丟包系統(tǒng),結合圖10所示的實時通信系統(tǒng)結構示意圖,上述實時通信中的抗丟包系統(tǒng)包括:信息發(fā)送端a和接收端b,其中:
發(fā)送端a,包括發(fā)送模塊100、接收模塊200、丟包處理模塊300、判斷模塊400、解碼錯誤處理模塊500和編碼模塊600;
其中,發(fā)送模塊100用于向接收端發(fā)送網絡數(shù)據包,所述網絡數(shù)據包包括編 碼后的視頻幀數(shù)據和fec冗余數(shù)據,所述fec冗余數(shù)據根據網絡丟包率確定有相應的fec冗余級別;接收模塊200用于接收所述接收端發(fā)送的反饋數(shù)據;丟包處理模塊300用于當所述反饋數(shù)據為丟包反饋數(shù)據時,根據所述丟包反饋數(shù)據的當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇相應級別的fec冗余數(shù)據,發(fā)送至所述接收端;判斷模塊400用于判斷重新發(fā)送的fec冗余數(shù)據的時效性,若滿足當前時效要求,則由所述丟包處理模塊將重新選擇的相應的fec冗余數(shù)據發(fā)送至所述接收端;解碼錯誤處理模塊500用于當所述反饋數(shù)據為解碼錯誤反饋數(shù)據,根據所述解碼錯誤反饋數(shù)據的當前解碼錯誤模型,獲取解碼錯誤幀相應的可獨立解碼幀發(fā)送至所述接收端;編碼模塊600用于對采集并編碼后的視頻幀數(shù)據進行fec編碼,生成多組冗余級別的fec冗余數(shù)據,并對采集的視頻幀數(shù)據進行關鍵幀編碼生成可獨立解碼幀。
另外,發(fā)送端a還用于初始化視頻幀編碼器和關鍵幀編碼器;用所述視頻幀編碼器對采集到的視頻幀數(shù)據進行編碼,得到編碼幀數(shù)據;發(fā)送所述視頻幀數(shù)據至所述接收端b;
接收端b,用于接收所述發(fā)送端發(fā)送的網絡數(shù)據包;對所述網絡數(shù)據包中的fec冗余數(shù)據進行解析,恢復丟失的所述網絡數(shù)據包中視頻幀數(shù)據;判斷所有視頻幀數(shù)據是否恢復,若是,則對所述數(shù)據進行解碼;否則,發(fā)送丟包反饋數(shù)據至所述發(fā)送端;在解碼過程中,判斷對所述視頻幀數(shù)據進行解碼時是否發(fā)生解碼錯誤,若是,則發(fā)送解碼錯誤反饋數(shù)據至所述發(fā)送端;否則,對解碼后的視頻幀數(shù)據進行緩存;將緩存的解碼數(shù)據發(fā)送至顯示設備進行顯示。
具體地,在實時通信過程中:
發(fā)送端a對視頻幀編碼器和關鍵幀編碼器進行初始化,初始化參數(shù)包括目標碼率、分辨率、幀率等。
然后,發(fā)送端a中采集目標視頻的視頻幀數(shù)據;編碼模塊600中的視頻幀編碼器對上述視頻幀數(shù)據進行編碼處理,生成相應編碼幀數(shù)據;將上述編碼幀數(shù)據發(fā)送至接收端b。
然后,發(fā)送端a中的編碼模塊600的fec編碼器對上述編碼幀數(shù)據進行fec編碼處理,生成多組冗余級別的fec數(shù)據包并保存;從上述的多組冗余級別的fec冗余數(shù)據中選擇一組fec冗余數(shù)據,發(fā)送至接收端b。
然后,在編碼模塊600中的視頻幀編碼器對上述視頻幀數(shù)據進行編碼處理的 同時,發(fā)送端a中的編碼模塊600對上述編碼幀數(shù)據進行關鍵幀編碼處理,生成相應的可獨立解碼幀。
發(fā)送端a中的發(fā)送模塊100向接收端b發(fā)送網絡數(shù)據包,包括上述視頻幀數(shù)據進行編碼處理后生成的相應編碼幀數(shù)據和上述fec冗余數(shù)據。
然后,接收端b中的fec解析器對丟失的媒體數(shù)據包進行恢復;判斷是否所有媒體數(shù)據包都已恢復。
若已全部恢復,則進行解碼數(shù)據,當發(fā)生解碼錯誤時,接收端b向發(fā)送端a發(fā)送解碼錯誤反饋數(shù)據,該解碼錯誤反饋數(shù)據中包含當前解碼錯誤模型,當前解碼錯誤模型主要包括解碼錯誤的幀號、錯誤宏塊的比例和/或錯誤宏塊的位置等數(shù)據。
否則,接收端b向發(fā)送端a發(fā)送丟包反饋數(shù)據,該丟包反饋數(shù)據中包含當前丟包模型,當前丟包模型包括當前丟失的媒體包個數(shù)、當前丟失的fec包個數(shù)和/或丟包序號等數(shù)據;若接收端b重新接收的相應級別的fec冗余數(shù)據發(fā)生丟包,則發(fā)送解碼錯誤反饋數(shù)據至發(fā)送端a。
若所有媒體數(shù)據包都已恢復,沒有發(fā)生解碼錯誤,則將解析還原網絡數(shù)據包后得到的解碼幀數(shù)據進行緩存,再從解碼幀緩存中取出相應數(shù)據送到顯示設備進行顯示和播放。
發(fā)送端a中的接收模塊200接收到解碼錯誤反饋數(shù)據后,解碼錯誤處理模塊根據上述當前解碼錯誤模型,從預設的獨立解碼幀中獲取相應的可獨立解碼幀;將相應的可獨立解碼幀發(fā)送至接收端b。
發(fā)送端a中的接收模塊200接收到丟包反饋數(shù)據后,丟包處理模塊300根據當前丟包模型,從預設的多組冗余級別的fec冗余數(shù)據中重新選擇一組相應級別的fec冗余數(shù)據;判斷模塊400判斷該fec冗余數(shù)據是否滿足時效性要求,若滿足,則發(fā)送至接收端b。
接收端b接收到發(fā)送端a發(fā)送的相應數(shù)據后,再次進行數(shù)據包恢復和解碼數(shù)據包操作,若所有媒體數(shù)據包未完全恢復或發(fā)生解碼錯誤,則接收端b執(zhí)行上述對應反饋操作;若所有媒體數(shù)據包都已恢復,沒有發(fā)生解碼錯誤,則將解析還原網絡數(shù)據包后得到的解碼幀數(shù)據進行緩存,再從解碼幀緩存中取出相應數(shù)據送到顯示設備進行顯示和播放。
另外,參照圖11和圖12,發(fā)送端a還可以包括:視頻采集單元,編碼器a、 fec編碼器、fec分組緩存單元、編碼器b、關鍵幀緩存單元、發(fā)包單元和決策單元;接收端b還可以包括:fec解析器、解碼器、反饋單元、解碼幀緩存單元和顯示單元。
具體地,在實時通信過程中:
發(fā)送端a對視頻幀編碼器和關鍵幀編碼器進行初始化,初始化參數(shù)包括目標碼率、分辨率、幀率等。
然后,發(fā)送端a的視頻采集單元采集目標視頻的視頻幀數(shù)據;編碼器a對上述視頻幀數(shù)據進行編碼處理,生成相應編碼幀數(shù)據。
然后,發(fā)送端a的fec編碼器對上述編碼幀數(shù)據進行fec編碼處理,生成多組冗余級別的fec數(shù)據包并保存至fec分組緩存單元;從上述的多組冗余級別的fec冗余數(shù)據中選擇一組相應的fec冗余數(shù)據。
然后,在編碼器a對上述視頻幀數(shù)據進行編碼處理的同時,編碼器b對上述編碼幀數(shù)據進行關鍵幀編碼處理,生成相應的可獨立解碼幀。
然后,發(fā)送端a中的發(fā)包單元向接收端b發(fā)送網絡數(shù)據包,包括上述視頻幀數(shù)據進行編碼處理后生成的相應編碼幀數(shù)據和上述fec冗余數(shù)據。
接收端b中的fec解析器對丟失的媒體數(shù)據包進行恢復;判斷是否所有媒體數(shù)據包都已恢復。
若已全部恢復,則解碼器進行解碼數(shù)據,當發(fā)生解碼錯誤時,反饋單元向發(fā)送端a發(fā)送解碼錯誤反饋數(shù)據,該解碼錯誤反饋數(shù)據中包含當前解碼錯誤模型,當前解碼錯誤模型包括解碼錯誤的幀號、錯誤宏塊的比例和/或錯誤宏塊的位置等數(shù)據。
否則,反饋單元向發(fā)送端a發(fā)送丟包反饋數(shù)據,該丟包反饋數(shù)據中包含當前丟包模型,當前丟包模型包括當前丟失的媒體包個數(shù)、當前丟失的fec包個數(shù)和/或丟包序號等數(shù)據。若接收端b重新接收的相應級別的fec冗余數(shù)據發(fā)生丟包,則反饋單元發(fā)送解碼錯誤反饋數(shù)據至發(fā)送端a。
若所有媒體數(shù)據包都已恢復,沒有發(fā)生解碼錯誤,則將解析還原網絡數(shù)據包后得到的解碼幀數(shù)據緩存至解碼幀緩存單元,再從解碼幀緩存單元取出相應數(shù)據送到顯示單元進行顯示和播放。
參照圖13,發(fā)送端a中的決策單元接收到接收端b發(fā)送的反饋數(shù)據后,根據反饋數(shù)據判斷決策類型,當反饋數(shù)據為解碼錯誤反饋數(shù)據時,響應解碼錯誤請 求;當反饋數(shù)據為丟包反饋數(shù)據時,響應丟包請求。
發(fā)送端a中的決策單元接收到解碼錯誤反饋數(shù)據后,根據上述當前解碼錯誤模型,從緩存在關鍵幀緩存單元中的獨立解碼幀中獲取相應的可獨立解碼幀;發(fā)包單元將相應的可獨立解碼幀發(fā)送至接收端b。
發(fā)送端a中的決策單元接收到丟包反饋數(shù)據后,根據當前丟包模型,從緩存在fec分組緩存單元中的多組冗余級別的fec冗余數(shù)據中重新選擇一組相應級別的fec冗余數(shù)據;判斷該fec冗余數(shù)據是否滿足時效性要求,若滿足,則發(fā)包單元發(fā)送該fec冗余數(shù)據至接收端b。
接收端b接收到發(fā)送端a發(fā)送的相應數(shù)據后,再次進行數(shù)據包恢復和解碼數(shù)據包操作,若所有媒體數(shù)據包未完全恢復或發(fā)生解碼錯誤,則反饋單元執(zhí)行上述對應反饋操作;若所有媒體數(shù)據包都已恢復,沒有發(fā)生解碼錯誤,則將解析還原網絡數(shù)據包后得到的解碼幀數(shù)據緩存至解碼幀緩存單元,再從解碼幀緩存單元取出相應數(shù)據送到顯示設備進行顯示和播放。
通過上述方案,本發(fā)明提供了一種實時通信中的抗丟包系統(tǒng),現(xiàn)了在實時通信過程中對數(shù)據傳輸網絡中發(fā)生的丟包進行自適應處理,增強實時通信過程中的抗丟包能力。
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內容所作的等效結構或等效流程變換,或直接或間接運用在其他相關的技術領域,均同理包括在本發(fā)明的專利保護范圍內。