左 義,于鴻洋,張 萍
(電子科技大學 電子科學技術研究院,四川 成都 611731)
在三網融合[1]的背景下,PC客戶端支持接收數字電視信號已成為一種趨勢。與傳統的模擬電視相比,數字電視由于利用了現代信號處理中的壓縮編碼技術,使得電視信號在傳輸過程中不僅不易受到干擾,而且可有效降低帶寬,并能提供高質量的電視畫面。數字電視按照信號的傳輸方式可以分為地面無線傳輸數字電視、衛星傳輸數字電視、有線傳輸數字電視3類,為了提供對PC用戶數字電視信號的接收,微軟為Windows操作系統支持數字電視接收應用定義了一套組件框架——廣播驅動架構[2-3](Broadcast Driver Architecture,BDA),使用該框架,硬件制造商不需要為自己的硬件編寫復雜的驅動程序,而軟件開發人員也不需要涉及繁瑣的底層操作,這樣不僅可以減少軟硬件開發成本,而且具有良好的可擴展性。
由于流媒體應用廣泛,流媒體數據本身的處理又是相當復雜,所以就需要尋找一種簡單而有效的處理流媒體數據的方法,為此,選擇一個技術成熟并且高效的平臺處理流媒體數據顯得尤為重要,微軟的DirectShow[4]架構即屬于這樣一個平臺?;谶@個平臺,在開發流媒體應用程序的時候,無須考慮硬件差異等問題帶來的不便,底層交互完全由DirectShow完成,應用程序要做的就是和DirectShow框架交互信息。基于廣播驅動架構的數字電視接收應用程序則亦是構建在DirectShow的基礎之上。
利用DirectShow系統處理流媒體數據的過程如圖1所示,它位于應用層,可以看到實際處理數據時并不是直接處理,而是分模塊處理數據,每一個模塊都擔任不同的角色,這樣的模塊在DirectShow中被稱作過濾器(Filter)。

圖1 DirectShow應用框架
圖1中過濾器圖表管理器組件管理著過濾器圖表(Filter Graph)中各個Filter的工作,并負責和應用程序的事件交互。分別處理數據的Filter在DirectShow中可以分為3類:
1)源過濾器(Source Filter),主要負責數據的獲取,有推和拉兩種工作模式;
2)轉換過濾器(Transform Filter),主要負責數據的轉換,如數據解碼等;
3)提交過濾器,主要負責數據最終去向,如播放或寫入文件等。
微軟廣播驅動架構定義了一種支持各種用于接收數字信號的組件拓撲結構的框架,包括用于網絡配置和控制的軟件組件、解復用、表分析以及IP數據傳遞以適應包括DVB和ATSC在內的主流數字電視標準。
BDA的微型驅動程序(minidriver)是AVStream minidriver的一種特殊類型(如圖2所示),是BDA架構的一部分,AVStream是一款微軟提供的多媒體類
驅動程序,用來處理許多和操作系統進行交互的細節。BDA minidriver直接與數字電視接收硬件進行交互,功能主要有調諧與解調數字信號、捕獲數字信號的幀、分離音視頻數據流等。

圖2 BDA minidriver結構
圖2中,BDA minidriver由硬件廠商編寫,BDA support library被包含在WDK(Windows Driver Kit)中,它可以簡化BDA minidriver的編寫。數字調諧Tuner與Capture總是由硬件實現的,其過濾器組件會被DirectShow中的ksproxy.ax過濾器組件包裝成和硬件相關的BDA設備過濾器組件并在DirectShow中可見。
由于網絡結構或者硬件差異性,為了能構造出統一的接收數字電視信號框架,BDA架構引入了功能拓撲的概念(如圖3所示)。功能拓撲將接收數字信號的過程抽象成了一系列被稱為控制節點(Control node)相互之間協作的過程,功能節點之間相互獨立但相互聯系,每一個控制節點都完成一個特定的功能,同一個功能拓撲,將有可能導致不同的過濾器圖表布局,這取決于安裝在計算機上的不同硬件和軟件。這個接收拓撲的主要功能有調諧、解調、捕獲、解復用數字廣播信號,獲得節目相關信息并獲得音視頻數據等。
在圖3中,Network Provider是功能拓撲圖的第一個節點,通常它表現為一個單獨的Filter,在Filter Graph中充當著管理者以及應用程序接口的角色,它負責數字電視信號進入并且通過BDA設備。相對于DirectShow框架來看,Network Provider在這里充當著源過濾器的角色,但事實上并沒有真正的數據通過。

圖3 數字廣播接收控制節點的功能拓撲
當需要調諧到某一個頻率點上接收相應的節目時,需要將頻率信息傳入到調諧器(Tuner)以控制硬件調諧,但由于應用程序不能直接操作硬件,這時就需要Network Provider的存在,上層應用程序通過Network Provider提供的一個ITuner接口把調諧請求發送給Network Provider,接著它將這個調諧請求傳遞給BDA minidriver,由微型驅動程序與硬件交互完成數字調諧。
圖3中,RF輸入可以來自于有線、衛星、地面無線傳輸,經解調(Demodulator)之后傳送至 Capture Filter,MPEG-2 Demultiplexer Filter負責TS流的解復用,其中的PID Filter表示過濾固定PID的TS包過濾器。
應用程序需要控制硬件的調諧,以便收看對應頻點上的節目,具體應用過程如下。
1)創建調諧請求
微軟推薦的取得調諧請求的方式是從已建立的調諧空間向導庫(Windows XP下目錄為HKEY_LOCAL_MACHINESOFTWAREMicrosoftTuning Spaces)中取得一個調諧請求,另外還可以自己創建調諧空間[1],取得調諧請求。
2)創建Network Provider
調諧空間向導庫中包含了一組調諧空間,每一個調諧空間代表著一個不同的網絡類型(ATSC,DVB-C,DVB-T,DVB-S等),取得一個固定的調諧空間后,就可以通過其提供的get__NetworkType方法取得網絡類型唯一標識,再經由CoCreateInstance方法就可創建Network Provider Filter。
3)信號定位
上面已提到Network Provider提供了一個ITuner接口給上層應用,在創建了Network Provider Filter之后就可以將調諧請求通過該接口發送給它,在收到調諧請求之后,Network Provider Filter首先把調諧請求傳遞給Filter Graph 中 的 Transport Information Filter(TIF)(如 圖 3 所示),接著TIF填充調諧器Tuner對信號定位所需的如載波頻率等相關信息。之后Network Provider Filter要求BDA Tuner調諧到相應的頻率點上,并設置相應參數給調諧器,在Tuner調諧到正確頻點并當信號解調之后,就將信號轉發給BDA Capture Filter(如圖3所示),該過濾器負責從硬件讀取數據并向后傳送數字化的TS碼流至MPEG-2 Demultiplexer解復用過濾器。
在開發應用程序之前,首先正確安裝數字電視接收卡并加載其驅動搭建硬件環境,如果正確安裝,打開GraphEdit,Tuner Filter和 Capture Filter就會出現在BDA源過濾器(BDA Source Filters)和BDA接收組件(BDA Receiver Components)目錄中。應用程序設計的流程如圖4所示。

圖4 應用程序實現流程
圖4中,加載的 BDA Tuner Filter,BDA Capture Filter,Transport Information Filter的目錄ID依次為KSCATEGORY_BDA_NETWORK_TUNER,KSCATEGORY_BDA_-RECEIVER_COMPONENT,KSCATEGORY_BDA_TRAN SPORT_INFO-RMATION,應用程序正常運行時,可隨時向Network Provider過濾器提交一個新的調諧請求,因此當用戶需要觀看另一個頻率點上的節目時,就可以在保持Graph運行狀態情況下,重新提交新的調諧請求,只要獲取想要觀看節目的PSI[5]信息,然后將音視頻的PID映射到MPEG-2 Demultiplexer Filter上,即可正常播放。
該系統在局域網下進行測試,通過流媒體服務器復用TS流經過千兆交換機發送到IPQAM的數據端口上,配置好搭載信號的頻點后,通過調制器的RF輸出,經由有線電視分支器傳送到多個客戶端,在客戶端采用的電視接收設備是Conexant公司的CX23102芯片,軟件開發平臺為Windows XP SP3,Visual Studio 2005,DirectX SDK 9.0b,采用第三方音視頻解碼器,經測試播放穩定、流暢。在GraphEdit中查看得到的Filter Graph如圖5所示。

本文較為詳細地分析了微軟電視技術的廣播驅動架構,并在此基礎上給出了在Windows XP平臺下有線數字電視的完整接收過程,借助于Conaxent公司的USB接口的數字電視接收設備,可以實現在PC機上觀看流暢的有線數字電視節目。
[1]周師亮.三網融合的前景[J].電視技術,2011,35(16):15-16.
[2]肜云.一種USB前端接收的PCTV技術研究與實現[D].武漢:華中科技大學,2007.
[3]張勇.基于微軟廣播驅動體系的數字電視技術及其應用程序的設計[J].現代電視技術,2005(10):78-83.
[4]陸其明.DirectShow開發指南[M].北京:清華大學出版社,2003.
[5]方濤.數字電視業務信息及其編碼[M].北京:國防工業出版社,2003.