久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 消費電子 > 設計應用 > 基于DirectShow的衛星電視多路節目播放技術

基于DirectShow的衛星電視多路節目播放技術

作者: 時間:2007-09-06 來源:網絡 收藏

摘要:首先對MPEG-2系統層協議進行剖析,然后介紹了的應用領域和要點,最后提出了一種的多路視音頻,并給出了主要模塊的設計方案,以及鏈路死鎖問題的解決方法。這種方法應用于多路電視的實時素材的收集與整理之中,較傳統的單路和采集節約了硬件成本提高了工作效率。
關鍵字:DVB-S,DirectShow,MPEG-2,解復用

1引言

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

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

MPEG-2協議主要分為系統、視頻和音頻三個部分。MPEG-2的系統層協議描述了多路數據的復用方式,并規定了數據傳輸的格式。

2.1傳輸流結構

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

圖1

2.2 PSI信息和PID映射關系

PSI(節目詳細信息,Program Specific Information)包含了多路節目的復用信息,它是解復用操作的依據。PSI包括節目關聯表(PAT)、節目映射表(PMT)、網絡信息表(NIT)以及條件訪問表(CAT)等。

PAT的PID固定的為0x0000,它定義了傳輸流中特定序號的節目與相關的傳輸流分組的對應關系。PMT提供了節目號碼與組成節目的ES PID的映射關系。NIT屬于私有分段,通常包括用戶選擇的服務、通道頻率等映射以及該路節目的供應商和節目名稱等信息。NIT的PID系統層未作限定,因此理論上任何有效的PID值都可能作為NIT的PID。CAT的PID固定為0x0001,它出現在傳輸流中有加密數據的情況下。CAT描述了條件訪問系統的類型,和其它用戶私有信息。

3DirectShow簡介

DirectShow是微軟公司DirectX框架的一部分。DirectShow的實現是COM(組件對象模型)的,因此具有良好的可開發性和可復用性。

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

3.1Filter鏈路


Filter是DirectShow中最基本的組成部分,它是完成某個特定功能的COM組件。Filter依次連接起來,構成了Filter鏈路。DirectShow通過一個稱為Filter Graph Manager(鏈路圖管理器)的COM對象管理整個Filter鏈路。應用程序通過Filter Graph Manager來對鏈路的狀態進行控制,如播放、暫停或停止等。按照功能,Filter可以分為Source Filter、Transform Filter、Rendering Filter三種類型。

Source Filter用于獲取數據。數據可以來自文件也可以是實時的數據源如網絡、數據采集卡等。

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

Rendering Filter的主要功能是將數據送往顯卡、聲卡進行多媒體演示或者輸出到文件進行存儲。

3.2 工作模式

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

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

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

4 設計方案

4.1 原理及流程

衛星信號經天線接收、放大、變頻后以中頻信號的形式送入通用接收機。通用接收機對信號進行解調和信道編碼的解碼。輸出的傳輸流數據流,首先經過PSI分析得到完整的PID映射關系,然后根據節目關聯表信息將其中的視音頻數據分離送往解碼器,最終在顯示終端上播放。工作流程如圖2所示。


圖2

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

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

圖3

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

4.2 Filter工作模式的選擇

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

5 主要模塊的設計和實現難點

5.1 Source Filter

Source Filter封裝了采集卡的接口函數,采用雙緩沖工作方式,通過輪詢察看緩沖區是否已滿。當緩沖區滿時將數據送往與之相連的解復用Filter。

5.2 解復用Filter

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

圖4

5.3 解決鏈路死鎖問題


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

在多路輸出情況下,一般的推模式單線程模型將會導致鏈路死鎖。解決死鎖問題的關鍵是為每一路視頻或音頻輸出創建專門的傳輸線程,并且線程的創建應該在解復用Filter內完成而不是在Source Filter內(因為Source Filter只有一個傳輸流輸出)。

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

5.3 Video Mixing Renderer9

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

6 實驗結果

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 結束語

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

參考文獻

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開發指南,清華大學出版社,2003
4、 史京玲,劉旺開,白濤.VC環境下監控軟件流程圖界面的開發.微計算機信息,2004年20卷第4期



評論


相關推薦

技術專區

關閉