閔 行,褚晶輝,劉子玉,俞 瀅
(天津大學 電子信息工程學院,天津 300072)
DTV多節(jié)目傳送流實時多畫面播放軟件設計
閔 行,褚晶輝,劉子玉,俞 瀅
(天津大學 電子信息工程學院,天津 300072)
設計了一種實時播放數(shù)字電視(DTV)傳送流的軟件,支持多達16路節(jié)目的解碼和多畫面顯示。該設計利用商用的數(shù)字電視傳送流采集卡將碼流輸入到計算機內(nèi)存中,然后利用FFmpeg開源庫實現(xiàn)對傳送流的解復用和多路視頻解碼,最后利用SDL開源庫將解碼后的圖像以多畫面的形式顯示在屏幕上。該設計提供了一種低成本的數(shù)字電視播出質量監(jiān)測手段,軟件也具有較高的可移植性。
多節(jié)目傳送流;多畫面顯示;FFmpeg;SDL
隨著數(shù)字電視行業(yè)的迅猛發(fā)展,以及電視頻道的增多,對數(shù)字電視頻道播出質量監(jiān)測的要求也越來越高。模擬電視時代,對于多路視頻監(jiān)測多采用CRT顯示器構成的電視墻;在數(shù)字電視系統(tǒng)中,常見的方案也是將多個硬件解碼器的輸出接到電視墻上,此類方法的成本較高,不能充分發(fā)揮數(shù)字電視的優(yōu)勢,而采集數(shù)字電視傳送流并直接進行多路視頻解碼和顯示的設計方案具有較大的硬件成本優(yōu)勢和更大的靈活性[1]。
目前,我國的數(shù)字電視系統(tǒng)采用MPEG-2標準系統(tǒng)層規(guī)定的傳送流(Transport Stream,TS)格式對多路數(shù)字電視節(jié)目進行復用形成基帶信號(多節(jié)目傳送流,MPTS)。本文實現(xiàn)的方案首先利用商用的數(shù)字電視傳送流采集卡將碼流輸入到計算機內(nèi)存中,再利用FFmpeg開源庫實現(xiàn)對傳送流的解復用和多路視頻解碼,利用SDL開源庫將解碼后的圖像以多畫面的形式顯示。
FFmpeg是一款支持多種格式音頻與視頻播放、錄制、轉換和串流功能的自由軟件,它包含了目前領先的音頻、視頻編碼庫libavcodec,對大部分格式的視頻編碼都有良好的支持,VLC等多款開源播放器也都用到了FFm?peg。雖然FFmpeg是在Linux下開發(fā)的,對于GCC的依賴性非常強,但是可以在Windows等大多數(shù)操作系統(tǒng)下編譯,保證了其良好的可移植性。本文設計主要使用FFm?peg進行傳送流解復用和視頻解碼,具體過程如下:
在解碼之前,先調用av_register_all()初始化FFmpeg庫,注冊所有容器格式和解碼器。初始化結構體AVFor?matContext作為輸入輸出容器,將數(shù)字電視傳輸碼流保存到計算機的內(nèi)存中,調用avformat_open_input()讀取計算機內(nèi)存中TS碼流的頭部信息保存到容器中。結構體AV?CodecContext是一個描述編解碼器上下文的數(shù)據(jù)結構,包含了眾多編解碼器需要的參數(shù)信息,例如,視音頻流的個數(shù)、時長、比特率、文件名以及視音頻流數(shù)據(jù)本身等。將TS碼流中的視頻流與音頻流進行分離,讀取包括視頻流個數(shù)在內(nèi)的視頻流信息,使用avcodec_open2()打開解碼器,avcodec_alloc_frame()為解碼幀分配內(nèi)存,不斷地從碼流中提取視頻流幀數(shù)據(jù),并調用FFmpeg的解碼核心函數(shù)avcodec_decode_video2()完成單線程的視頻解碼的全過程[2]。
考慮到要實現(xiàn)多畫面實時播放多個視頻流,本文采用了多線程的設計,根據(jù)TS碼流中視頻流的個數(shù)確定線程數(shù)量,每個線程獨立完成一路視頻的解碼與顯示,提高系統(tǒng)資源的利用率。此外,在此之前還需要創(chuàng)建一個獨立的線程,以便將來自數(shù)字電視傳送流采集卡的TS碼流保存至計算機內(nèi)存中,供視頻解碼使用[3]。
SDL是一套跨平臺支持多操作系統(tǒng)的開源多媒體開發(fā)庫,是各種多媒體應用與操作系統(tǒng)之間的接口。SDL共包括8個子系統(tǒng),在視頻處理子系統(tǒng)中,要顯示的視頻區(qū)域被當作一塊視頻緩沖區(qū),也就是一塊內(nèi)存區(qū)域,SDL可以對該區(qū)域進行讀寫。視頻緩沖區(qū)內(nèi)的最小單位是像素,SDL可以對視頻區(qū)域內(nèi)的任意一個像素做處理,包括改變其顏色等,緩沖區(qū)的數(shù)據(jù)更新后調用刷新函數(shù)刷新顯示,完成視頻播放的過程[4]。
本文設計了如圖1所示的共6種不同的畫面播放模式,用戶可以根據(jù)自身需求選擇單路播放或者多路播放,多路視頻播放也可根據(jù)需要選擇不同畫面、大小、主次播放,支持多達16路節(jié)目同時播放。用戶選定播放模式后,將其作為參數(shù)傳入主程序中,程序根據(jù)選擇的播放模式以及屏幕分辨率,計算多路視頻畫面的播放位置。
圖1 多畫面視頻播放模式
SDL的初始化過程主要包括以下步驟:調用SDL_CreateWindow()創(chuàng)建一個可以用來繪制的窗口,調用SDL_CreateRenderer()創(chuàng)建一個渲染器,調用SDL_Cre?ateTexture()創(chuàng)建紋理緩存(texture)。SDL初始化之后,就可以將FFmpeg解碼輸出的視頻幀數(shù)據(jù)作為紋理緩存的輸入,本文將視頻幀數(shù)據(jù)保存為YUV420P數(shù)據(jù)格式。根據(jù)選定的播放模式,計算每個視頻流在畫面中對應的顯示位置,不斷地將視頻幀數(shù)據(jù)寫入紋理緩存并刷新顯示,就實現(xiàn)了多路視頻的多畫面播放。
本文設計的軟件工作流程如圖2所示。首先,將TS碼流路徑和播放模式作為參數(shù)傳遞給主程序,主程序對TS碼流路徑進行判斷;當路徑為0時,主程序讀取通過數(shù)字電視傳輸流采集卡輸入的實時TS碼流,否則,讀取保存在本地或是某個服務器上的TS碼流文件。然后,對TS碼流進行分析,分離出視頻流和音頻流,計算視頻流的個數(shù)。根據(jù)播放模式確定每個視頻流對應的播放畫面位置。最后,為每一個視頻流創(chuàng)建一個獨立的視頻解碼和視頻顯示線程。在此過程中,F(xiàn)Fmpeg開源庫提供了傳送流的解復用和視頻流的解碼方法,SDL開源庫則提供了多畫面視頻顯示方法。
圖2 軟件工作流程
分別使用數(shù)字電視傳送流采集卡接收數(shù)字電視廣播基帶信號(即TS碼流)和用計算機硬盤上保存的TS文件對軟件的實時解碼和離線解碼功能進行測試,支持6種預設的播放模式,其中3種模式下的測試結果如圖3所示。
實驗表明,本文設計的軟件能夠實時讀取數(shù)字電視傳送流采集卡輸入的TS碼流,或者讀取計算機存儲設備中的TS碼流文件,支持6種預設的播放模式,最多可以實現(xiàn)16路畫面同時播放。
圖3 模式2、模式5及模式6下的播放效果
本文設計的數(shù)字電視傳送流多畫面播放軟件是在跨平臺的開源庫FFmpeg和SDL的基礎上實現(xiàn)的,經(jīng)過簡單修改在Windows、Linux和Mac OS操作系統(tǒng)上都可以運行,相對于文獻[5-7]提出的利用Microsoft公司的Direct?Show和DXVA等Windows平臺專有技術實現(xiàn)的系統(tǒng),其適應性與擴展性更強,因此使用更加靈活,可滿足不同的用戶需求。在數(shù)字電視行業(yè)迅猛發(fā)展的背景下,對于數(shù)字電視多路視頻監(jiān)測的需求使得該設計具有良好的應用前景。
致謝
[1]李欣時,仲影.數(shù)字電視多畫面顯示及監(jiān)控系統(tǒng)的實現(xiàn)[J].有線電視技術,2008(8):108-110.
[2]辛長春,婁小平,呂乃光.基于FFmpeg的遠程視頻監(jiān)控系統(tǒng)編解碼[J].電子技術,2013(1):3-5.
[3]李科,李璐,蘭時勇.基于FFmpeg和SDL實現(xiàn)多路實時流變換及播放[J].計算機技術與發(fā)展,2014(4):65-68.
[4]蔣鵬,劉玓.基于SDL庫的跨平臺多媒體應用[J].福建電腦,2003(5):39-40.
[5] 尚青青,朱秀昌.高清視頻監(jiān)控中心的設計與實現(xiàn)[J].電視技術,2013,37(11):183-187.
[6]蘇俊峰,朱秀昌.基于DXVA的多路H.264高清視頻解碼器的實現(xiàn)[J].電視技術,2011,35(18):30-33.
[7]高譽菊,呂鹍,張剛.Windows平臺上AVS視頻監(jiān)控客戶端的實現(xiàn)[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
閔 行,碩士生,研究方向為數(shù)字多媒體技術和模式識別;
褚晶輝,博士,副教授,研究方向為數(shù)字多媒體技術和模式識別;
劉子玉,碩士生,研究方向為數(shù)字多媒體技術和模式識別;
俞 瀅,碩士生,研究方向為數(shù)字多媒體技術和模式識別。
??健男
2014-08-11
【本文獻信息】閔行,褚晶輝,劉子玉,等.DTV多節(jié)目傳送流實時多畫面播放軟件設計[J].電視技術,2014,38(21).
國家自然科學基金項目(61271069)