實時通信中的抗丟包方法、裝置和系統與流程
2023-05-04 07:57:36 2

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