閔 行,褚晶輝,劉子玉,俞 瀅
(天津大學 電子信息工程學院,天津 300072)
DTV多節目傳送流實時多畫面播放軟件設計
閔 行,褚晶輝,劉子玉,俞 瀅
(天津大學 電子信息工程學院,天津 300072)
設計了一種實時播放數字電視(DTV)傳送流的軟件,支持多達16路節目的解碼和多畫面顯示。該設計利用商用的數字電視傳送流采集卡將碼流輸入到計算機內存中,然后利用FFmpeg開源庫實現對傳送流的解復用和多路視頻解碼,最后利用SDL開源庫將解碼后的圖像以多畫面的形式顯示在屏幕上。該設計提供了一種低成本的數字電視播出質量監測手段,軟件也具有較高的可移植性。
多節目傳送流;多畫面顯示;FFmpeg;SDL
隨著數字電視行業的迅猛發展,以及電視頻道的增多,對數字電視頻道播出質量監測的要求也越來越高。模擬電視時代,對于多路視頻監測多采用CRT顯示器構成的電視墻;在數字電視系統中,常見的方案也是將多個硬件解碼器的輸出接到電視墻上,此類方法的成本較高,不能充分發揮數字電視的優勢,而采集數字電視傳送流并直接進行多路視頻解碼和顯示的設計方案具有較大的硬件成本優勢和更大的靈活性[1]。
目前,我國的數字電視系統采用MPEG-2標準系統層規定的傳送流(Transport Stream,TS)格式對多路數字電視節目進行復用形成基帶信號(多節目傳送流,MPTS)。本文實現的方案首先利用商用的數字電視傳送流采集卡將碼流輸入到計算機內存中,再利用FFmpeg開源庫實現對傳送流的解復用和多路視頻解碼,利用SDL開源庫將解碼后的圖像以多畫面的形式顯示。
FFmpeg是一款支持多種格式音頻與視頻播放、錄制、轉換和串流功能的自由軟件,它包含了目前領先的音頻、視頻編碼庫libavcodec,對大部分格式的視頻編碼都有良好的支持,VLC等多款開源播放器也都用到了FFm?peg。雖然FFmpeg是在Linux下開發的,對于GCC的依賴性非常強,但是可以在Windows等大多數操作系統下編譯,保證了其良好的可移植性。本文設計主要使用FFm?peg進行傳送流解復用和視頻解碼,具體過程如下:
在解碼之前,先調用av_register_all()初始化FFmpeg庫,注冊所有容器格式和解碼器。初始化結構體AVFor?matContext作為輸入輸出容器,將數字電視傳輸碼流保存到計算機的內存中,調用avformat_open_input()讀取計算機內存中TS碼流的頭部信息保存到容器中。結構體AV?CodecContext是一個描述編解碼器上下文的數據結構,包含了眾多編解碼器需要的參數信息,例如,視音頻流的個數、時長、比特率、文件名以及視音頻流數據本身等。將TS碼流中的視頻流與音頻流進行分離,讀取包括視頻流個數在內的視頻流信息,使用avcodec_open2()打開解碼器,avcodec_alloc_frame()為解碼幀分配內存,不斷地從碼流中提取視頻流幀數據,并調用FFmpeg的解碼核心函數avcodec_decode_video2()完成單線程的視頻解碼的全過程[2]。
考慮到要實現多畫面實時播放多個視頻流,本文采用了多線程的設計,根據TS碼流中視頻流的個數確定線程數量,每個線程獨立完成一路視頻的解碼與顯示,提高系統資源的利用率。此外,在此之前還需要創建一個獨立的線程,以便將來自數字電視傳送流采集卡的TS碼流保存至計算機內存中,供視頻解碼使用[3]。
SDL是一套跨平臺支持多操作系統的開源多媒體開發庫,是各種多媒體應用與操作系統之間的接口。SDL共包括8個子系統,在視頻處理子系統中,要顯示的視頻區域被當作一塊視頻緩沖區,也就是一塊內存區域,SDL可以對該區域進行讀寫。視頻緩沖區內的最小單位是像素,SDL可以對視頻區域內的任意一個像素做處理,包括改變其顏色等,緩沖區的數據更新后調用刷新函數刷新顯示,完成視頻播放的過程[4]。
本文設計了如圖1所示的共6種不同的畫面播放模式,用戶可以根據自身需求選擇單路播放或者多路播放,多路視頻播放也可根據需要選擇不同畫面、大小、主次播放,支持多達16路節目同時播放。用戶選定播放模式后,將其作為參數傳入主程序中,程序根據選擇的播放模式以及屏幕分辨率,計算多路視頻畫面的播放位置。

圖1 多畫面視頻播放模式
SDL的初始化過程主要包括以下步驟:調用SDL_CreateWindow()創建一個可以用來繪制的窗口,調用SDL_CreateRenderer()創建一個渲染器,調用SDL_Cre?ateTexture()創建紋理緩存(texture)。SDL初始化之后,就可以將FFmpeg解碼輸出的視頻幀數據作為紋理緩存的輸入,本文將視頻幀數據保存為YUV420P數據格式。根據選定的播放模式,計算每個視頻流在畫面中對應的顯示位置,不斷地將視頻幀數據寫入紋理緩存并刷新顯示,就實現了多路視頻的多畫面播放。
本文設計的軟件工作流程如圖2所示。首先,將TS碼流路徑和播放模式作為參數傳遞給主程序,主程序對TS碼流路徑進行判斷;當路徑為0時,主程序讀取通過數字電視傳輸流采集卡輸入的實時TS碼流,否則,讀取保存在本地或是某個服務器上的TS碼流文件。然后,對TS碼流進行分析,分離出視頻流和音頻流,計算視頻流的個數。根據播放模式確定每個視頻流對應的播放畫面位置。最后,為每一個視頻流創建一個獨立的視頻解碼和視頻顯示線程。在此過程中,FFmpeg開源庫提供了傳送流的解復用和視頻流的解碼方法,SDL開源庫則提供了多畫面視頻顯示方法。

圖2 軟件工作流程
分別使用數字電視傳送流采集卡接收數字電視廣播基帶信號(即TS碼流)和用計算機硬盤上保存的TS文件對軟件的實時解碼和離線解碼功能進行測試,支持6種預設的播放模式,其中3種模式下的測試結果如圖3所示。
實驗表明,本文設計的軟件能夠實時讀取數字電視傳送流采集卡輸入的TS碼流,或者讀取計算機存儲設備中的TS碼流文件,支持6種預設的播放模式,最多可以實現16路畫面同時播放。

圖3 模式2、模式5及模式6下的播放效果
本文設計的數字電視傳送流多畫面播放軟件是在跨平臺的開源庫FFmpeg和SDL的基礎上實現的,經過簡單修改在Windows、Linux和Mac OS操作系統上都可以運行,相對于文獻[5-7]提出的利用Microsoft公司的Direct?Show和DXVA等Windows平臺專有技術實現的系統,其適應性與擴展性更強,因此使用更加靈活,可滿足不同的用戶需求。在數字電視行業迅猛發展的背景下,對于數字電視多路視頻監測的需求使得該設計具有良好的應用前景。
致謝
[1]李欣時,仲影.數字電視多畫面顯示及監控系統的實現[J].有線電視技術,2008(8):108-110.
[2]辛長春,婁小平,呂乃光.基于FFmpeg的遠程視頻監控系統編解碼[J].電子技術,2013(1):3-5.
[3]李科,李璐,蘭時勇.基于FFmpeg和SDL實現多路實時流變換及播放[J].計算機技術與發展,2014(4):65-68.
[4]蔣鵬,劉玓.基于SDL庫的跨平臺多媒體應用[J].福建電腦,2003(5):39-40.
[5] 尚青青,朱秀昌.高清視頻監控中心的設計與實現[J].電視技術,2013,37(11):183-187.
[6]蘇俊峰,朱秀昌.基于DXVA的多路H.264高清視頻解碼器的實現[J].電視技術,2011,35(18):30-33.
[7]高譽菊,呂鹍,張剛.Windows平臺上AVS視頻監控客戶端的實現[J].電視技術,2014,38(11):94-96.
Design of Real-time M ulti-screen Decoding Software for DTV M ulti-program Transport Stream
MIN Hang,CHU Jinghui,LIU Ziyu,YU Ying
(School of Electronic Information Engineering,Tianjin University,Tianjin 300072,China)
A software is designed to play DTV multi-program transport stream in real-time,which supports decoding up to 16 programs and multi-screen display.The software acquires transport stream into the computer memory with a commercial digital TV transport stream capture card,and then the stream is demultiplexed and decoded with the open-source library FFmpeg. Finally,the decoded pictures are displayed on the screen in a multi-screen layout with the open-source library SDL.The design provides a low-cost method to monitor the quality of digital television broadcasting,and the software is highly portable.
MPTS;multi-screen display;FFmpeg;SDL
TN949.1
A
閔 行,碩士生,研究方向為數字多媒體技術和模式識別;
褚晶輝,博士,副教授,研究方向為數字多媒體技術和模式識別;
劉子玉,碩士生,研究方向為數字多媒體技術和模式識別;
俞 瀅,碩士生,研究方向為數字多媒體技術和模式識別。
??健男
2014-08-11
【本文獻信息】閔行,褚晶輝,劉子玉,等.DTV多節目傳送流實時多畫面播放軟件設計[J].電視技術,2014,38(21).
國家自然科學基金項目(61271069)