基于DirectShow的衛(wèi)星電視多路節(jié)目播放技術(shù)
摘要:首先對MPEG-2系統(tǒng)層協(xié)議進行剖析,然后介紹了DirectShow的應(yīng)用領(lǐng)域和技術(shù)要點,最后提出了一種基于DirectShow的多路視音頻播放技術(shù),并給出了主要模塊的設(shè)計方案,以及DirectShow鏈路死鎖問題的解決方法。這種方法應(yīng)用于多路電視節(jié)目的實時播放和節(jié)目素材的收集與整理之中,較傳統(tǒng)的單路節(jié)目播放和采集節(jié)約了硬件成本提高了工作效率。
關(guān)鍵字:DVB-S,DirectShow,MPEG-2,解復用
1引言
DVB(數(shù)字視頻廣播,Digital Video Broadcasting)是歐洲標準組織提出的電視廣播體系。目前我國已經(jīng)上星的多家省級電視臺均采用了其中的DVB-S(DVB衛(wèi)星傳播)標準。DVB-S的信號傳輸屬于典型的多路單載波(MCPC)模型,每個載波可以承載多路各不相同的電視節(jié)目。傳統(tǒng)采用數(shù)字衛(wèi)星接收系統(tǒng),只能對DVB-S信號中的某一路節(jié)目進行播放和采集。本文提出了一種在通用接收機條件下基于DirectShow技術(shù)的對DVB-S傳輸流進行解復用,提取并播放其中的多路視頻節(jié)目的設(shè)計方案,實現(xiàn)了單監(jiān)視器條件下對多路電視節(jié)目的播放。同時本文所討論的技術(shù)對節(jié)目素材收集、網(wǎng)絡(luò)視頻點播以及硬盤錄像機等多媒體應(yīng)用具有重要的借鑒意義。無線SOC開發(fā)平臺499元 S3C44B0 ARM7開發(fā)板378元 S3C2410 ARM9開2MPEG-2系統(tǒng)層協(xié)議剖析
DVB-S采用MPEG-2作為復用傳輸和視頻編碼協(xié)議。MPEG-2標準(ISO/IEC 13818)是運動圖像專家組MPEG(Moving Picture Experts Group)于1994年推出的編碼標準。運用MPEG-2壓縮技術(shù)既可以獲得比較好的壓縮效果,又能夠保持高清晰度的活動圖像,因此MPEG-2廣泛應(yīng)用于數(shù)字視頻廣播和數(shù)字多媒體領(lǐng)域。
MPEG-2協(xié)議主要分為系統(tǒng)、視頻和音頻三個部分。MPEG-2的系統(tǒng)層協(xié)議描述了多路數(shù)據(jù)的復用方式,并規(guī)定了數(shù)據(jù)傳輸?shù)母袷健?/P>
2.1傳輸流結(jié)構(gòu)
MPEG-2系統(tǒng)層定義了兩種數(shù)據(jù)傳輸方式:傳輸流(TS,Transport Stream)和節(jié)目流(PS,Program Stream)。前者是針對那些容易發(fā)生錯誤的環(huán)境而設(shè)計,例如通過衛(wèi)星信道進行傳輸?shù)腄VB-S,后者則是針對錯誤較少的環(huán)境而設(shè)計,例如DVD光盤等。傳輸流是一種面向分組的多路復用流:基本數(shù)據(jù)流(ES)進行打包成為PES,再經(jīng)系統(tǒng)復用生成TS數(shù)據(jù),最后打包成固定幀長(188字節(jié))的TS包進行傳輸。每一個TS包只包含一種ES(壓縮視頻、音頻,或IP數(shù)據(jù)等)。系統(tǒng)層使用一個13比特值作為每個包的標識符,稱為PID。在一道傳輸流中PID與ES是一一對映的關(guān)系。TS包的幀結(jié)構(gòu)如圖1所示。
圖1
2.2 PSI信息和PID映射關(guān)系
PSI(節(jié)目詳細信息,Program Specific Information)包含了多路節(jié)目的復用信息,它是解復用操作的依據(jù)。PSI包括節(jié)目關(guān)聯(lián)表(PAT)、節(jié)目映射表(PMT)、網(wǎng)絡(luò)信息表(NIT)以及條件訪問表(CAT)等。
PAT的PID固定的為0x0000,它定義了傳輸流中特定序號的節(jié)目與相關(guān)的傳輸流分組的對應(yīng)關(guān)系。PMT提供了節(jié)目號碼與組成節(jié)目的ES PID的映射關(guān)系。NIT屬于私有分段,通常包括用戶選擇的服務(wù)、通道頻率等映射以及該路節(jié)目的供應(yīng)商和節(jié)目名稱等信息。NIT的PID系統(tǒng)層未作限定,因此理論上任何有效的PID值都可能作為NIT的PID。CAT的PID固定為0x0001,它出現(xiàn)在傳輸流中有加密數(shù)據(jù)的情況下。CAT描述了條件訪問系統(tǒng)的類型,和其它用戶私有信息。
3DirectShow簡介
DirectShow是微軟公司DirectX框架的一部分。DirectShow的實現(xiàn)是基于COM(組件對象模型)的,因此具有良好的可開發(fā)性和可復用性。
DirectShow側(cè)重于多媒體數(shù)據(jù)的處理。多媒體數(shù)據(jù)具有數(shù)據(jù)量大、音像同步要求苛刻、媒體格式眾多等特點。DirectShow框架提供了對顯卡和聲卡等硬件的完整封裝,開發(fā)者可以不必考慮硬件的工作原理以及驅(qū)動編程的具體實現(xiàn)細節(jié)。另一方面,DirectShow組件之間的相對獨立性使開發(fā)者可以專注于處理算法的實現(xiàn)而無需過多考慮組件之間的數(shù)據(jù)傳輸問題,因此開發(fā)者通過編寫相對簡潔的代碼便可高效地完成較為復雜的多媒體處理。
3.1Filter鏈路
Filter是DirectShow中最基本的組成部分,它是完成某個特定功能的COM組件。Filter依次連接起來,構(gòu)成了Filter鏈路。DirectShow通過一個稱為Filter Graph Manager(鏈路圖管理器)的COM對象管理整個Filter鏈路。應(yīng)用程序通過Filter Graph Manager來對鏈路的狀態(tài)進行控制,如播放、暫?;蛲V沟?。按照功能,F(xiàn)ilter可以分為Source Filter、Transform Filter、Rendering Filter三種類型。
Source Filter用于獲取數(shù)據(jù)。數(shù)據(jù)可以來自文件也可以是實時的數(shù)據(jù)源如網(wǎng)絡(luò)、數(shù)據(jù)采集卡等。
Transform Filter接收Source Filter傳送來的數(shù)據(jù),對其進行處理,比如解復用操作、音像數(shù)據(jù)的分離或編碼/解碼等。
Rendering Filter的主要功能是將數(shù)據(jù)送往顯卡、聲卡進行多媒體演示或者輸出到文件進行存儲。
3.2 工作模式
DirectShow框架定義了兩種工作模式:推模式(Push Mode)和拉模式(Pull Mode)。
推模式下,數(shù)據(jù)被Source Filter主動推向與其相連的Transform Filter,后者再將處理過的數(shù)據(jù)推向下行Filter。推模式通常使用在實時數(shù)據(jù)情況下。對于實時數(shù)據(jù)源,數(shù)據(jù)傳輸速率可能不是恒定的(例如網(wǎng)絡(luò)媒體傳輸、視頻采集卡等),因此采用推模式Source Filter可以根據(jù)數(shù)據(jù)源的實際狀況決定如何將數(shù)據(jù)傳給下行Filter。
拉模式下Source Filter被動的提供數(shù)據(jù),與其相連的Transform Filter創(chuàng)建一個數(shù)據(jù)線程主動的向Source Filter索取數(shù)據(jù),有一個“拉”的過程。工作在拉模式的Filter一般采用異步讀取數(shù)據(jù)的方式。拉模式通常應(yīng)用于本地文件播放以及媒體編輯等。
4 設(shè)計方案
4.1 原理及流程
衛(wèi)星信號經(jīng)天線接收、放大、變頻后以中頻信號的形式送入通用接收機。通用接收機對信號進行解調(diào)和信道編碼的解碼。輸出的傳輸流數(shù)據(jù)流,首先經(jīng)過PSI分析得到完整的PID映射關(guān)系,然后根據(jù)節(jié)目關(guān)聯(lián)表信息將其中的視音頻數(shù)據(jù)分離送往解碼器,最終在顯示終端上播放。工作流程如圖2所示。
圖2
從數(shù)據(jù)采集、分離到顯示,可以在一條Filter鏈路上實現(xiàn):Source Filter獲得接收機輸出的傳輸流數(shù)據(jù);解復用Filter實現(xiàn)分析PSI、解復用功能,并將視頻和音頻數(shù)據(jù)送往解碼器Filter。
完整的Filter鏈路圖如圖3所示。
圖3
圖中每一個方框表示一個Filter。Source Filter沒有輸入并且只有一個輸出。與之相連的是解復用Filter,它有一個輸入和多個視頻、音頻輸出。視頻數(shù)據(jù)被送往MPEG-2解碼器Filter,音頻數(shù)據(jù)送往音頻解碼器Filter。解碼器的輸出連接到了Render Filter。
4.2 Filter工作模式的選擇
處理微機通過高速數(shù)據(jù)采集卡獲得通用接收機的輸出,因此對于Filter鏈路來說,數(shù)據(jù)源是一種實時源。所以選擇推模式作為整個Filter鏈路的工作模式。
5 主要模塊的設(shè)計和實現(xiàn)難點
5.1 Source Filter
Source Filter封裝了采集卡的接口函數(shù),采用雙緩沖工作方式,通過輪詢察看緩沖區(qū)是否已滿。當緩沖區(qū)滿時將數(shù)據(jù)送往與之相連的解復用Filter。
5.2 解復用Filter
解復用Filter是整個Filter鏈路的核心部分。它的功能是分析傳輸流的PSI,建立完整的PDI映射關(guān)系;然后從傳輸流中分離出每路節(jié)目的視頻和音頻數(shù)據(jù),將它們送往相應(yīng)的視頻和音頻解碼器,同時接收應(yīng)用程序的控制信息。解復用Filter對每一個傳輸流包的處理過程如圖4所示。
圖4
5.3 解決鏈路死鎖問題
Filter鏈路通常需要一個傳輸線程。在推模式下,傳輸線程通常由Source Filter創(chuàng)建,數(shù)據(jù)被線程推向解復用Filter,經(jīng)處理生成的視頻和音頻數(shù)據(jù)被送往解碼器,最后在終端上播放出來。整個過程都在單線程內(nèi)完成。
在多路輸出情況下,一般的推模式單線程模型將會導致鏈路死鎖。解決死鎖問題的關(guān)鍵是為每一路視頻或音頻輸出創(chuàng)建專門的傳輸線程,并且線程的創(chuàng)建應(yīng)該在解復用Filter內(nèi)完成而不是在Source Filter內(nèi)(因為Source Filter只有一個傳輸流輸出)。
在DirectShow SDK中,可以通過使用COutputQueue對象來實現(xiàn)多線程傳輸,最終解決死鎖問題。方法是在解復用Filter中聲明一個COutputQueue對象,在每次啟動傳輸時調(diào)用COutputQueue的Receive(IMediaSample* pSample)函數(shù)。此時對象會自動生成一個傳輸線程,并將其加入到自身的線程隊列中,當線程完成時將其從隊列中清除。
5.3 Video Mixing Renderer9
Video Mixing Renderer9(VMR9)是DirectX9新添加的組件。它使用了Direct3D9技術(shù),充分利用了顯卡專有的圖形處理能力,并且在做視頻的合成和顯示時不占用系統(tǒng)CPU資源。使用VMR9可以高效的完成多路視頻的播放。如果使用傳統(tǒng)的Video Render Filter,在多視頻顯示條件下,必須為鏈路添加多個Render Filter。而VMR9最多接收十六個視頻輸入,在多路播放時可以將每一路視頻設(shè)置在窗口的不同區(qū)域來顯示,還能夠?qū)崿F(xiàn)多個視頻或圖片的疊加,例如在節(jié)目中加入動態(tài)字幕或臺標。
6 實驗結(jié)果
PC機配置
l 操作系統(tǒng):Windows2000 Professional
l CPU:P4 2.4GHz
l 內(nèi)存1G Byte
l 顯卡:主板集成,顯存128M Byte
信號參數(shù):
l 衛(wèi)星參數(shù):泛美8號,166E
l 極化方式:垂直
l 下行頻率:3836MHz
l 符碼率:22000波特
l 節(jié)目提供商:TVBS
l 頻道數(shù)目:9(加密頻道數(shù)目6,非加密頻道數(shù)目3)
圖5是顯示界面,圖中正在播放三路非加密節(jié)目。
圖5
7 結(jié)束語
本文作者的創(chuàng)新點:使用DirectShow技術(shù),結(jié)合通用接收機,解決了數(shù)字衛(wèi)星接收單監(jiān)視器系統(tǒng)無法播放多路節(jié)目的問題,降低了硬件成本,對于非專業(yè)條件下的多媒體節(jié)目的播放(監(jiān)控)和素材的收集具有實用價值。另一方面,使用DirectShow還可以實現(xiàn)其它的功能,例如使用DES(DirectShow Editing Services)可以實現(xiàn)對多媒體文件的非線性編輯等。理論上還可以將本文的設(shè)計應(yīng)用在網(wǎng)絡(luò)環(huán)境中:網(wǎng)絡(luò)客戶端可以通過PSI信息,選擇播放或錄制感興趣的電視節(jié)目從而實現(xiàn)網(wǎng)絡(luò)視頻點播功能。
參考文獻
1、 ISO/IEC 13818-1(MPEG-2 System),ISO/IEC 13818-2(MPEG-2 Video),ISO/IEC 13818-3(MPEG-2 Audio)
2、 Microsoft, DirectX 9.0 Programmer's Reference,2002。
3、 陸其明,DirectShow開發(fā)指南,清華大學出版社,2003
4、 史京玲,劉旺開,白濤.VC環(huán)境下監(jiān)控軟件流程圖界面的開發(fā).微計算機信息,2004年20卷第4期
評論