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