連麥互動直播中混屏技術設計

                                連麥互動直播中混屏技術設計

目錄

一. 混屏原理

二. 實現混屏關鍵技術

1. 併發解碼

2. 圖像合成

3. 視頻同步

4. 編碼輸出

5. 內存管理

三. 具體實現流程

1、混屏流程

2、混屏算法

四. 音視頻同步

五. 總結

參考文獻:



本內容全原創,因作者才疏學淺,偶有紕漏,望不吝指出。本內容由靈聲訊音頻-語音算法實驗室整理創作,轉載和使用請與“靈聲訊”聯繫,聯繫方式:音頻/識別/合成算法QQ羣(696554058)


一. 混屏原理

根據當前混屏或圖像合成的研究成果,以及對市場上成型的混屏產品的分析,採用基於視頻幀合成的實時流混屏方案。該方案需用高度併發解碼方式,對RTPP雙線交互的兩路視頻流進行實時解碼成爲視頻幀序列;並通過將兩個視頻幀中的YUV圖像合成,生成新視頻幀,再對新視頻幀進行編碼,按要求輸出目標格式的實時視頻流。該方案的系統架構如圖1所示:

                                   

                                                                   圖1 實時混屏系統框圖

解碼模塊包括兩個解碼器,一個解碼器負責對一個實時視頻流進行解碼,獲得數據幀後,由預處理模塊對視頻幀進行以下處理。

首先,根據目標輸出視頻的像素比例,計算該視頻畫面在目標畫面所佔的實際大小,對視頻幀進行縮放操作,在此縮放視頻幀,可以減少後續處理的數據量,而不影響轉換後的視頻質量。然後,檢查圖像的色彩空間格式,如果不是YUV格式,統一爲YUV格式。最後,將處理好的視頻幀從隊列尾部加入到待處理的視頻幀隊列中。

視頻合成模塊,訪問各個編碼器輸出的待處理的視頻幀隊列,從隊列頭部取出視頻幀,進行合併。在合併過程中,爲保證視頻同步,以其中一個視頻流爲基準,對其他視頻流的數據幀採用插幀或丟棄,保證所有數據幀的時間戳一致。解碼模塊和視頻合成模塊對視頻幀隊列分別進行處理,解碼模塊輸出數據幀插入到隊列尾,而視頻合成模塊從視頻幀隊列頭開始處理,將解碼和編碼的耦合度降到最低,解碼與編碼可以同時進行。

編碼器對視頻合成模塊輸出的視頻幀序列進行編碼,轉換生成混屏後的實時視頻流。

二. 實現混屏關鍵技術

1. 併發解碼

實時視頻流混屏處理多路實時視頻流輸入,並輸出實時視頻流。解碼處理的數據量大,實時性要求高,對服務器的解碼能力提出很高要求。高度併發解碼,充分利用多核CPU計算能力是實現實時視頻流混屏的關鍵。爲提高併發度,併發解碼至少包括兩級併發,一級是兩個實時流解碼器的併發解碼,二級是解碼器Frame級別的併發解碼。

兩個解碼器分別對不同的視頻源進行處理,並將分別獨立輸出數據幀,以隊列的方式保存,供後續模塊調用。解碼器之間相互獨立,不存在制約關係,可併發處理,提高CPU利用率。解碼器Frame級別的併發,解碼器採用線程池方式進行解碼。在解碼器初始化時,根據服務器CPU核數,初始化相應數目的解碼線程。解碼線程接收輸入數據,並對數據進行解碼。外部程序通過解碼器提供的調用入口,進入解碼器的主線程。

2. 圖像合成

將兩個視頻混屏,可通過圖像合成的方式,將兩個實時流的數據幀圖像合成新圖像,將合成後的視頻幀作爲輸入進行編碼得到實時視頻流輸出。兩個數據幀的圖像合成必須採用統一的圖像格式。圖像數據在存儲中的存儲格式主要包括RGB和YUV。YUV格式所需存儲空間比RGB格式存儲空間小,因此YUV格式主要用於多媒體數據傳輸。高清實時視頻流多采用H.264編碼方式,其採用的色彩空間是YUV。在合成過程中,如發現視頻源的圖像採用RGB方式,則需要將其轉換成YUV纔可合成。

RGB圖像和YUV圖像可相互轉換,從RGB到YUV的轉換公式見公式(1)。

                              Y=0.30R+0.59G+0.11B

                              U=0.493(B-Y)                                                                                                             (1)

                             V=0.877(R-Y)

另外,YUV格式也存在多種不同的採樣比。在實際應用中,爲減少運算量,可選擇使用視頻源中最普遍使用的格式,而將其他格式的圖像進行轉換,形成統一格式。

將兩個YUV圖像合成一個YUV圖像,可根據各個圖像排列的位置,對圖像的三個分量重新進行排列組合成新圖像。以Planar格式爲例,將兩個YUV圖像合成一個YUV圖像,可將YUV三個通道各自分開處理,對每個通道的分量,按照每行分量的位置從左到右排列,各行從上到下排列。

3. 視頻同步

圖像合成組成新的視頻需解決兩路視頻間的同步問題。由於兩路高清視頻流的來源不一致,解碼後獲得包含圖像的數據幀的幀率不一致,爲確保合成後視頻的質量,必須將多路視頻的輸出圖像進行同步處理。同步方法如下。

選取一個實時視頻流的輸出數據幀作爲基準序列,在單位時間內,對其他實時視頻流解碼後獲得的數據幀序列,通過插幀或丟棄的方式,將視頻幀的個數與基準源保持一致,以基準序列的時間戳作爲合成後數據幀序列的時間戳。爲提高視頻質量,在對數據幀進行插幀或丟棄時,可根據對視頻對象做真實運動的估值結果進行處理。

4. 編碼輸出

將合併後的數據幀序列作爲原始數據,輸入到編碼器中。編碼器根據目標輸出設置的參數,生成實時流,將實時流推到流媒體服務器中。客戶端只需要訪問CDN服務器即可播放合成後的視頻。圖像合成只考慮視頻處理。

5. 內存管理

數據幀的內存管理機制對數據幀提供創建、銷燬、引用、撤銷引用、引用遷移等操作,並增加數據區的引用計數器。在引用、撤銷引用、引用遷移時,不重新申請數據區,而是建立、修改或撤銷對數據區的引用關係,保持數據區指針在數據幀對象中,並修改數據區的引用計數器。當數據幀Buffer被創建時,計數初始化爲1。當該Buffer被數據幀引用時,計數+1,當數據幀撤銷引用時,計數-1。

每數據幀撤銷引用時,檢查計數器數值,只有當發現計數器被清零時,才釋放該數據區。通過採用引用計數器的機制,有效防止內存泄露,並大大減少重複的內存申請和數據複製操作,提高處理性能。

三. 具體實現流程

1、混屏流程

                              

⑴ 線程1和2相同流程是取得解碼完的數據。

⑵ 不做幀內存管理,即時混屏。

⑶虛線左邊爲上層,右邊爲下層。

2、混屏算法

                                        

                                          

⑴ 縮放爲按比例進行下采樣得到。

                               

⑵ 混屏爲對內存數據改寫。

                        

其中, LAST_WIDTH 爲360,LAST_HEIGHT爲480,target_width爲LAST_WIDTH/3,target_height爲LAST_HEIGHT/3;

四. 音視頻同步

音視頻同步是實時流媒體互動最基本的需求。從技術上來說,解決音視頻同步問題的最佳方案就是時間戳:首先選擇一個參考時鐘(要求參考時鐘上的時間是線性遞增的);生成數據流時依據參考時鐘上的時間給每個數據塊都打上時間戳(一般包括開始時間和結束時間);在播放時,讀取數據塊上的時間戳,同時參考當前參考時鐘上的時間來安排播放(如果數據塊的開始時間大於當前參考時鐘上的時間,則不急於播放該數據塊,直到參考時鐘達到數據塊的開始時間;如果數據塊的開始時間小於當前參考時鐘上的時間,則“儘快”播放這塊數據或者索性將這塊數據“丟棄”,以使播放進度追上參考時鐘)。

可見,避免音視頻不同步現象有兩個關鍵:一是在生成數據流時要打上正確的時間戳。如果數據塊上打的時間戳本身就有問題,那麼播放時再怎麼調整也於事無補。假如,視頻流內容是從0s開始的,假設10s時有人開始說話,要求配上音頻流,那麼音頻流的起始時間應該是10s,如果時間戳從0s或其它時間開始打,則這個混合的音視頻流在時間同步上本身就出了問題。打時間戳時,視頻流和音頻流都是參考參考時鐘的時間,而數據流之間不會發生參考關係;也就是說,視頻流和音頻流是通過一箇中立的第三方(也就是參考時鐘)來實現同步的。二是在播放時基於時間戳對數據流的控制,也就是對數據塊早到或晚到採取不同的處理方法。

五. 總結

以上基於視頻幀合成的實時流視頻混屏的方法,兩個解碼器間互不干擾,爲高度併發解碼提供可能;並採用視頻幀隊列管理的方式,使得解碼和編碼的耦合降到最低,解碼與編碼可以同時進行。高度併發使服務器的多核CPU運算能力得到充分利用,僅依靠軟件解碼的方式就能實現兩個高清視頻的混屏。混屏處理後,以實時視頻流的方式輸出,客戶端只需接收視頻流進行播放即可,對客戶端的配置要求低。

參考文獻:

[1] 黃東君,陳松喬.基於源根組播的多點視頻會議系統模型及其實現.電子學報,2005(1).

[2] 劉峯.視頻圖像編碼技術及國際標準.北京郵電大學出版社,2005(7).

[3] 肖永豪,餘英林.基於視頻對象的自適應去幀/插幀視頻處理.華南理工大學學報(自然科學版),2003(8).

[4] 劉曉玲,張濤. 基於幀圖像合成的實時視頻混屏關鍵技術研究.電信技術,2014(4).



本內容由靈聲訊音頻-語音算法實驗室整理,轉載和使用請與“靈聲訊”聯繫,聯繫方式:音頻/識別/合成算法QQ羣(696554058)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章