新聞中心

EEPW首頁 > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > 基于DirectShow的衛(wèi)星電視多路節(jié)目播放技術(shù)

基于DirectShow的衛(wèi)星電視多路節(jié)目播放技術(shù)

作者: 時(shí)間:2007-09-06 來源:網(wǎng)絡(luò) 收藏

摘要:首先對(duì)MPEG-2系統(tǒng)層協(xié)議進(jìn)行剖析,然后介紹了的應(yīng)用領(lǐng)域和要點(diǎn),最后提出了一種的多路視音頻,并給出了主要模塊的設(shè)計(jì)方案,以及鏈路死鎖問題的解決方法。這種方法應(yīng)用于多路電視的實(shí)時(shí)素材的收集與整理之中,較傳統(tǒng)的單路和采集節(jié)約了硬件成本提高了工作效率。
關(guān)鍵字:DVB-S,DirectShow,MPEG-2,解復(fù)用

1引言

DVB(數(shù)字視頻廣播,Digital Video Broadcasting)是歐洲標(biāo)準(zhǔn)組織提出的電視廣播體系。目前我國已經(jīng)上星的多家省級(jí)電視臺(tái)均采用了其中的DVB-S(DVB衛(wèi)星傳播)標(biāo)準(zhǔn)。DVB-S的信號(hào)傳輸屬于典型的多路單載波(MCPC)模型,每個(gè)載波可以承載多路各不相同的電視節(jié)目。傳統(tǒng)采用數(shù)字衛(wèi)星接收系統(tǒng),只能對(duì)DVB-S信號(hào)中的某一路節(jié)目進(jìn)行播放和采集。本文提出了一種在通用接收機(jī)條件下DirectShow的對(duì)DVB-S傳輸流進(jìn)行解復(fù)用,提取并播放其中的多路視頻節(jié)目的設(shè)計(jì)方案,實(shí)現(xiàn)了單監(jiān)視器條件下對(duì)多路電視節(jié)目的播放。同時(shí)本文所討論的技術(shù)對(duì)節(jié)目素材收集、網(wǎng)絡(luò)視頻點(diǎn)播以及硬盤錄像機(jī)等多媒體應(yīng)用具有重要的借鑒意義。無線SOC開發(fā)平臺(tái)499元 S3C44B0 ARM7開發(fā)板378元 S3C2410 ARM9開2MPEG-2系統(tǒng)層協(xié)議剖析

DVB-S采用MPEG-2作為復(fù)用傳輸和視頻編碼協(xié)議。MPEG-2標(biāo)準(zhǔn)(ISO/IEC 13818)是運(yùn)動(dòng)圖像專家組MPEG(Moving Picture Experts Group)于1994年推出的編碼標(biāo)準(zhǔn)。運(yùn)用MPEG-2壓縮技術(shù)既可以獲得比較好的壓縮效果,又能夠保持高清晰度的活動(dòng)圖像,因此MPEG-2廣泛應(yīng)用于數(shù)字視頻廣播和數(shù)字多媒體領(lǐng)域。

MPEG-2協(xié)議主要分為系統(tǒng)、視頻和音頻三個(gè)部分。MPEG-2的系統(tǒng)層協(xié)議描述了多路數(shù)據(jù)的復(fù)用方式,并規(guī)定了數(shù)據(jù)傳輸?shù)母袷健?/P>

2.1傳輸流結(jié)構(gòu)

MPEG-2系統(tǒng)層定義了兩種數(shù)據(jù)傳輸方式:傳輸流(TS,Transport Stream)和節(jié)目流(PS,Program Stream)。前者是針對(duì)那些容易發(fā)生錯(cuò)誤的環(huán)境而設(shè)計(jì),例如通過衛(wèi)星信道進(jìn)行傳輸?shù)腄VB-S,后者則是針對(duì)錯(cuò)誤較少的環(huán)境而設(shè)計(jì),例如DVD光盤等。傳輸流是一種面向分組的多路復(fù)用流:基本數(shù)據(jù)流(ES)進(jìn)行打包成為PES,再經(jīng)系統(tǒng)復(fù)用生成TS數(shù)據(jù),最后打包成固定幀長(188字節(jié))的TS包進(jìn)行傳輸。每一個(gè)TS包只包含一種ES(壓縮視頻、音頻,或IP數(shù)據(jù)等)。系統(tǒng)層使用一個(gè)13比特值作為每個(gè)包的標(biāo)識(shí)符,稱為PID。在一道傳輸流中PID與ES是一一對(duì)映的關(guān)系。TS包的幀結(jié)構(gòu)如圖1所示。

圖1

2.2 PSI信息和PID映射關(guān)系

PSI(節(jié)目詳細(xì)信息,Program Specific Information)包含了多路節(jié)目的復(fù)用信息,它是解復(fù)用操作的依據(jù)。PSI包括節(jié)目關(guān)聯(lián)表(PAT)、節(jié)目映射表(PMT)、網(wǎng)絡(luò)信息表(NIT)以及條件訪問表(CAT)等。

PAT的PID固定的為0x0000,它定義了傳輸流中特定序號(hào)的節(jié)目與相關(guān)的傳輸流分組的對(duì)應(yīng)關(guān)系。PMT提供了節(jié)目號(hào)碼與組成節(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的實(shí)現(xiàn)是COM(組件對(duì)象模型)的,因此具有良好的可開發(fā)性和可復(fù)用性。

DirectShow側(cè)重于多媒體數(shù)據(jù)的處理。多媒體數(shù)據(jù)具有數(shù)據(jù)量大、音像同步要求苛刻、媒體格式眾多等特點(diǎn)。DirectShow框架提供了對(duì)顯卡和聲卡等硬件的完整封裝,開發(fā)者可以不必考慮硬件的工作原理以及驅(qū)動(dòng)編程的具體實(shí)現(xiàn)細(xì)節(jié)。另一方面,DirectShow組件之間的相對(duì)獨(dú)立性使開發(fā)者可以專注于處理算法的實(shí)現(xiàn)而無需過多考慮組件之間的數(shù)據(jù)傳輸問題,因此開發(fā)者通過編寫相對(duì)簡潔的代碼便可高效地完成較為復(fù)雜的多媒體處理。

3.1Filter鏈路


Filter是DirectShow中最基本的組成部分,它是完成某個(gè)特定功能的COM組件。Filter依次連接起來,構(gòu)成了Filter鏈路。DirectShow通過一個(gè)稱為Filter Graph Manager(鏈路圖管理器)的COM對(duì)象管理整個(gè)Filter鏈路。應(yīng)用程序通過Filter Graph Manager來對(duì)鏈路的狀態(tài)進(jìn)行控制,如播放、暫?;蛲V沟?。按照功能,F(xiàn)ilter可以分為Source Filter、Transform Filter、Rendering Filter三種類型。

Source Filter用于獲取數(shù)據(jù)。數(shù)據(jù)可以來自文件也可以是實(shí)時(shí)的數(shù)據(jù)源如網(wǎng)絡(luò)、數(shù)據(jù)采集卡等。

Transform Filter接收Source Filter傳送來的數(shù)據(jù),對(duì)其進(jìn)行處理,比如解復(fù)用操作、音像數(shù)據(jù)的分離或編碼/解碼等。

Rendering Filter的主要功能是將數(shù)據(jù)送往顯卡、聲卡進(jìn)行多媒體演示或者輸出到文件進(jìn)行存儲(chǔ)。

3.2 工作模式

DirectShow框架定義了兩種工作模式:推模式(Push Mode)和拉模式(Pull Mode)。

推模式下,數(shù)據(jù)被Source Filter主動(dòng)推向與其相連的Transform Filter,后者再將處理過的數(shù)據(jù)推向下行Filter。推模式通常使用在實(shí)時(shí)數(shù)據(jù)情況下。對(duì)于實(shí)時(shí)數(shù)據(jù)源,數(shù)據(jù)傳輸速率可能不是恒定的(例如網(wǎng)絡(luò)媒體傳輸、視頻采集卡等),因此采用推模式Source Filter可以根據(jù)數(shù)據(jù)源的實(shí)際狀況決定如何將數(shù)據(jù)傳給下行Filter。

拉模式下Source Filter被動(dòng)的提供數(shù)據(jù),與其相連的Transform Filter創(chuàng)建一個(gè)數(shù)據(jù)線程主動(dòng)的向Source Filter索取數(shù)據(jù),有一個(gè)“拉”的過程。工作在拉模式的Filter一般采用異步讀取數(shù)據(jù)的方式。拉模式通常應(yīng)用于本地文件播放以及媒體編輯等。

4 設(shè)計(jì)方案

4.1 原理及流程

衛(wèi)星信號(hào)經(jīng)天線接收、放大、變頻后以中頻信號(hào)的形式送入通用接收機(jī)。通用接收機(jī)對(duì)信號(hào)進(jìn)行解調(diào)和信道編碼的解碼。輸出的傳輸流數(shù)據(jù)流,首先經(jīng)過PSI分析得到完整的PID映射關(guān)系,然后根據(jù)節(jié)目關(guān)聯(lián)表信息將其中的視音頻數(shù)據(jù)分離送往解碼器,最終在顯示終端上播放。工作流程如圖2所示。


圖2

從數(shù)據(jù)采集、分離到顯示,可以在一條Filter鏈路上實(shí)現(xiàn):Source Filter獲得接收機(jī)輸出的傳輸流數(shù)據(jù);解復(fù)用Filter實(shí)現(xiàn)分析PSI、解復(fù)用功能,并將視頻和音頻數(shù)據(jù)送往解碼器Filter。

完整的Filter鏈路圖如圖3所示。

圖3

圖中每一個(gè)方框表示一個(gè)Filter。Source Filter沒有輸入并且只有一個(gè)輸出。與之相連的是解復(fù)用Filter,它有一個(gè)輸入和多個(gè)視頻、音頻輸出。視頻數(shù)據(jù)被送往MPEG-2解碼器Filter,音頻數(shù)據(jù)送往音頻解碼器Filter。解碼器的輸出連接到了Render Filter。

4.2 Filter工作模式的選擇

處理微機(jī)通過高速數(shù)據(jù)采集卡獲得通用接收機(jī)的輸出,因此對(duì)于Filter鏈路來說,數(shù)據(jù)源是一種實(shí)時(shí)源。所以選擇推模式作為整個(gè)Filter鏈路的工作模式。

5 主要模塊的設(shè)計(jì)和實(shí)現(xiàn)難點(diǎn)

5.1 Source Filter

Source Filter封裝了采集卡的接口函數(shù),采用雙緩沖工作方式,通過輪詢察看緩沖區(qū)是否已滿。當(dāng)緩沖區(qū)滿時(shí)將數(shù)據(jù)送往與之相連的解復(fù)用Filter。

5.2 解復(fù)用Filter

解復(fù)用Filter是整個(gè)Filter鏈路的核心部分。它的功能是分析傳輸流的PSI,建立完整的PDI映射關(guān)系;然后從傳輸流中分離出每路節(jié)目的視頻和音頻數(shù)據(jù),將它們送往相應(yīng)的視頻和音頻解碼器,同時(shí)接收應(yīng)用程序的控制信息。解復(fù)用Filter對(duì)每一個(gè)傳輸流包的處理過程如圖4所示。

圖4

5.3 解決鏈路死鎖問題


Filter鏈路通常需要一個(gè)傳輸線程。在推模式下,傳輸線程通常由Source Filter創(chuàng)建,數(shù)據(jù)被線程推向解復(fù)用Filter,經(jīng)處理生成的視頻和音頻數(shù)據(jù)被送往解碼器,最后在終端上播放出來。整個(gè)過程都在單線程內(nèi)完成。

在多路輸出情況下,一般的推模式單線程模型將會(huì)導(dǎo)致鏈路死鎖。解決死鎖問題的關(guān)鍵是為每一路視頻或音頻輸出創(chuàng)建專門的傳輸線程,并且線程的創(chuàng)建應(yīng)該在解復(fù)用Filter內(nèi)完成而不是在Source Filter內(nèi)(因?yàn)镾ource Filter只有一個(gè)傳輸流輸出)。

在DirectShow SDK中,可以通過使用COutputQueue對(duì)象來實(shí)現(xiàn)多線程傳輸,最終解決死鎖問題。方法是在解復(fù)用Filter中聲明一個(gè)COutputQueue對(duì)象,在每次啟動(dòng)傳輸時(shí)調(diào)用COutputQueue的Receive(IMediaSample* pSample)函數(shù)。此時(shí)對(duì)象會(huì)自動(dòng)生成一個(gè)傳輸線程,并將其加入到自身的線程隊(duì)列中,當(dāng)線程完成時(shí)將其從隊(duì)列中清除。

5.3 Video Mixing Renderer9

Video Mixing Renderer9(VMR9)是DirectX9新添加的組件。它使用了Direct3D9技術(shù),充分利用了顯卡專有的圖形處理能力,并且在做視頻的合成和顯示時(shí)不占用系統(tǒng)CPU資源。使用VMR9可以高效的完成多路視頻的播放。如果使用傳統(tǒng)的Video Render Filter,在多視頻顯示條件下,必須為鏈路添加多個(gè)Render Filter。而VMR9最多接收十六個(gè)視頻輸入,在多路播放時(shí)可以將每一路視頻設(shè)置在窗口的不同區(qū)域來顯示,還能夠?qū)崿F(xiàn)多個(gè)視頻或圖片的疊加,例如在節(jié)目中加入動(dòng)態(tài)字幕或臺(tái)標(biāo)。

6 實(shí)驗(yàn)結(jié)果

PC機(jī)配置

l 操作系統(tǒng):Windows2000 Professional

l CPU:P4 2.4GHz

l 內(nèi)存1G Byte

l 顯卡:主板集成,顯存128M Byte

信號(hào)參數(shù):

l 衛(wèi)星參數(shù):泛美8號(hào),166E

l 極化方式:垂直

l 下行頻率:3836MHz

l 符碼率:22000波特

l 節(jié)目提供商:TVBS

l 頻道數(shù)目:9(加密頻道數(shù)目6,非加密頻道數(shù)目3)

圖5是顯示界面,圖中正在播放三路非加密節(jié)目。

圖5

7 結(jié)束語

本文作者的創(chuàng)新點(diǎn):使用DirectShow技術(shù),結(jié)合通用接收機(jī),解決了數(shù)字衛(wèi)星接收單監(jiān)視器系統(tǒng)無法播放多路節(jié)目的問題,降低了硬件成本,對(duì)于非專業(yè)條件下的多媒體節(jié)目的播放(監(jiān)控)和素材的收集具有實(shí)用價(jià)值。另一方面,使用DirectShow還可以實(shí)現(xiàn)其它的功能,例如使用DES(DirectShow Editing Services)可以實(shí)現(xiàn)對(duì)多媒體文件的非線性編輯等。理論上還可以將本文的設(shè)計(jì)應(yīng)用在網(wǎng)絡(luò)環(huán)境中:網(wǎng)絡(luò)客戶端可以通過PSI信息,選擇播放或錄制感興趣的電視節(jié)目從而實(shí)現(xiàn)網(wǎng)絡(luò)視頻點(diǎn)播功能。

參考文獻(xià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開發(fā)指南,清華大學(xué)出版社,2003
4、 史京玲,劉旺開,白濤.VC環(huán)境下監(jiān)控軟件流程圖界面的開發(fā).微計(jì)算機(jī)信息,2004年20卷第4期



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉