左 義,于鴻洋,張 萍
(電子科技大學(xué) 電子科學(xué)技術(shù)研究院,四川 成都 611731)
在三網(wǎng)融合[1]的背景下,PC客戶端支持接收數(shù)字電視信號已成為一種趨勢。與傳統(tǒng)的模擬電視相比,數(shù)字電視由于利用了現(xiàn)代信號處理中的壓縮編碼技術(shù),使得電視信號在傳輸過程中不僅不易受到干擾,而且可有效降低帶寬,并能提供高質(zhì)量的電視畫面。數(shù)字電視按照信號的傳輸方式可以分為地面無線傳輸數(shù)字電視、衛(wèi)星傳輸數(shù)字電視、有線傳輸數(shù)字電視3類,為了提供對PC用戶數(shù)字電視信號的接收,微軟為Windows操作系統(tǒng)支持數(shù)字電視接收應(yīng)用定義了一套組件框架——廣播驅(qū)動架構(gòu)[2-3](Broadcast Driver Architecture,BDA),使用該框架,硬件制造商不需要為自己的硬件編寫復(fù)雜的驅(qū)動程序,而軟件開發(fā)人員也不需要涉及繁瑣的底層操作,這樣不僅可以減少軟硬件開發(fā)成本,而且具有良好的可擴展性。
由于流媒體應(yīng)用廣泛,流媒體數(shù)據(jù)本身的處理又是相當(dāng)復(fù)雜,所以就需要尋找一種簡單而有效的處理流媒體數(shù)據(jù)的方法,為此,選擇一個技術(shù)成熟并且高效的平臺處理流媒體數(shù)據(jù)顯得尤為重要,微軟的DirectShow[4]架構(gòu)即屬于這樣一個平臺。基于這個平臺,在開發(fā)流媒體應(yīng)用程序的時候,無須考慮硬件差異等問題帶來的不便,底層交互完全由DirectShow完成,應(yīng)用程序要做的就是和DirectShow框架交互信息。基于廣播驅(qū)動架構(gòu)的數(shù)字電視接收應(yīng)用程序則亦是構(gòu)建在DirectShow的基礎(chǔ)之上。
利用DirectShow系統(tǒng)處理流媒體數(shù)據(jù)的過程如圖1所示,它位于應(yīng)用層,可以看到實際處理數(shù)據(jù)時并不是直接處理,而是分模塊處理數(shù)據(jù),每一個模塊都擔(dān)任不同的角色,這樣的模塊在DirectShow中被稱作過濾器(Filter)。
圖1 DirectShow應(yīng)用框架
圖1中過濾器圖表管理器組件管理著過濾器圖表(Filter Graph)中各個Filter的工作,并負責(zé)和應(yīng)用程序的事件交互。分別處理數(shù)據(jù)的Filter在DirectShow中可以分為3類:
1)源過濾器(Source Filter),主要負責(zé)數(shù)據(jù)的獲取,有推和拉兩種工作模式;
2)轉(zhuǎn)換過濾器(Transform Filter),主要負責(zé)數(shù)據(jù)的轉(zhuǎn)換,如數(shù)據(jù)解碼等;
3)提交過濾器,主要負責(zé)數(shù)據(jù)最終去向,如播放或?qū)懭胛募取?/p>
微軟廣播驅(qū)動架構(gòu)定義了一種支持各種用于接收數(shù)字信號的組件拓撲結(jié)構(gòu)的框架,包括用于網(wǎng)絡(luò)配置和控制的軟件組件、解復(fù)用、表分析以及IP數(shù)據(jù)傳遞以適應(yīng)包括DVB和ATSC在內(nèi)的主流數(shù)字電視標準。
BDA的微型驅(qū)動程序(minidriver)是AVStream minidriver的一種特殊類型(如圖2所示),是BDA架構(gòu)的一部分,AVStream是一款微軟提供的多媒體類
驅(qū)動程序,用來處理許多和操作系統(tǒng)進行交互的細節(jié)。BDA minidriver直接與數(shù)字電視接收硬件進行交互,功能主要有調(diào)諧與解調(diào)數(shù)字信號、捕獲數(shù)字信號的幀、分離音視頻數(shù)據(jù)流等。
圖2 BDA minidriver結(jié)構(gòu)
圖2中,BDA minidriver由硬件廠商編寫,BDA support library被包含在WDK(Windows Driver Kit)中,它可以簡化BDA minidriver的編寫。數(shù)字調(diào)諧Tuner與Capture總是由硬件實現(xiàn)的,其過濾器組件會被DirectShow中的ksproxy.ax過濾器組件包裝成和硬件相關(guān)的BDA設(shè)備過濾器組件并在DirectShow中可見。
由于網(wǎng)絡(luò)結(jié)構(gòu)或者硬件差異性,為了能構(gòu)造出統(tǒng)一的接收數(shù)字電視信號框架,BDA架構(gòu)引入了功能拓撲的概念(如圖3所示)。功能拓撲將接收數(shù)字信號的過程抽象成了一系列被稱為控制節(jié)點(Control node)相互之間協(xié)作的過程,功能節(jié)點之間相互獨立但相互聯(lián)系,每一個控制節(jié)點都完成一個特定的功能,同一個功能拓撲,將有可能導(dǎo)致不同的過濾器圖表布局,這取決于安裝在計算機上的不同硬件和軟件。這個接收拓撲的主要功能有調(diào)諧、解調(diào)、捕獲、解復(fù)用數(shù)字廣播信號,獲得節(jié)目相關(guān)信息并獲得音視頻數(shù)據(jù)等。
在圖3中,Network Provider是功能拓撲圖的第一個節(jié)點,通常它表現(xiàn)為一個單獨的Filter,在Filter Graph中充當(dāng)著管理者以及應(yīng)用程序接口的角色,它負責(zé)數(shù)字電視信號進入并且通過BDA設(shè)備。相對于DirectShow框架來看,Network Provider在這里充當(dāng)著源過濾器的角色,但事實上并沒有真正的數(shù)據(jù)通過。
圖3 數(shù)字廣播接收控制節(jié)點的功能拓撲
當(dāng)需要調(diào)諧到某一個頻率點上接收相應(yīng)的節(jié)目時,需要將頻率信息傳入到調(diào)諧器(Tuner)以控制硬件調(diào)諧,但由于應(yīng)用程序不能直接操作硬件,這時就需要Network Provider的存在,上層應(yīng)用程序通過Network Provider提供的一個ITuner接口把調(diào)諧請求發(fā)送給Network Provider,接著它將這個調(diào)諧請求傳遞給BDA minidriver,由微型驅(qū)動程序與硬件交互完成數(shù)字調(diào)諧。
圖3中,RF輸入可以來自于有線、衛(wèi)星、地面無線傳輸,經(jīng)解調(diào)(Demodulator)之后傳送至 Capture Filter,MPEG-2 Demultiplexer Filter負責(zé)TS流的解復(fù)用,其中的PID Filter表示過濾固定PID的TS包過濾器。
應(yīng)用程序需要控制硬件的調(diào)諧,以便收看對應(yīng)頻點上的節(jié)目,具體應(yīng)用過程如下。
1)創(chuàng)建調(diào)諧請求
微軟推薦的取得調(diào)諧請求的方式是從已建立的調(diào)諧空間向?qū)欤╓indows XP下目錄為HKEY_LOCAL_MACHINESOFTWAREMicrosoftTuning Spaces)中取得一個調(diào)諧請求,另外還可以自己創(chuàng)建調(diào)諧空間[1],取得調(diào)諧請求。
2)創(chuàng)建Network Provider
調(diào)諧空間向?qū)熘邪艘唤M調(diào)諧空間,每一個調(diào)諧空間代表著一個不同的網(wǎng)絡(luò)類型(ATSC,DVB-C,DVB-T,DVB-S等),取得一個固定的調(diào)諧空間后,就可以通過其提供的get__NetworkType方法取得網(wǎng)絡(luò)類型唯一標識,再經(jīng)由CoCreateInstance方法就可創(chuàng)建Network Provider Filter。
3)信號定位
上面已提到Network Provider提供了一個ITuner接口給上層應(yīng)用,在創(chuàng)建了Network Provider Filter之后就可以將調(diào)諧請求通過該接口發(fā)送給它,在收到調(diào)諧請求之后,Network Provider Filter首先把調(diào)諧請求傳遞給Filter Graph 中 的 Transport Information Filter(TIF)(如 圖 3 所示),接著TIF填充調(diào)諧器Tuner對信號定位所需的如載波頻率等相關(guān)信息。之后Network Provider Filter要求BDA Tuner調(diào)諧到相應(yīng)的頻率點上,并設(shè)置相應(yīng)參數(shù)給調(diào)諧器,在Tuner調(diào)諧到正確頻點并當(dāng)信號解調(diào)之后,就將信號轉(zhuǎn)發(fā)給BDA Capture Filter(如圖3所示),該過濾器負責(zé)從硬件讀取數(shù)據(jù)并向后傳送數(shù)字化的TS碼流至MPEG-2 Demultiplexer解復(fù)用過濾器。
在開發(fā)應(yīng)用程序之前,首先正確安裝數(shù)字電視接收卡并加載其驅(qū)動搭建硬件環(huán)境,如果正確安裝,打開GraphEdit,Tuner Filter和 Capture Filter就會出現(xiàn)在BDA源過濾器(BDA Source Filters)和BDA接收組件(BDA Receiver Components)目錄中。應(yīng)用程序設(shè)計的流程如圖4所示。
圖4 應(yīng)用程序?qū)崿F(xiàn)流程
圖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,應(yīng)用程序正常運行時,可隨時向Network Provider過濾器提交一個新的調(diào)諧請求,因此當(dāng)用戶需要觀看另一個頻率點上的節(jié)目時,就可以在保持Graph運行狀態(tài)情況下,重新提交新的調(diào)諧請求,只要獲取想要觀看節(jié)目的PSI[5]信息,然后將音視頻的PID映射到MPEG-2 Demultiplexer Filter上,即可正常播放。
該系統(tǒng)在局域網(wǎng)下進行測試,通過流媒體服務(wù)器復(fù)用TS流經(jīng)過千兆交換機發(fā)送到IPQAM的數(shù)據(jù)端口上,配置好搭載信號的頻點后,通過調(diào)制器的RF輸出,經(jīng)由有線電視分支器傳送到多個客戶端,在客戶端采用的電視接收設(shè)備是Conexant公司的CX23102芯片,軟件開發(fā)平臺為Windows XP SP3,Visual Studio 2005,DirectX SDK 9.0b,采用第三方音視頻解碼器,經(jīng)測試播放穩(wěn)定、流暢。在GraphEdit中查看得到的Filter Graph如圖5所示。
本文較為詳細地分析了微軟電視技術(shù)的廣播驅(qū)動架構(gòu),并在此基礎(chǔ)上給出了在Windows XP平臺下有線數(shù)字電視的完整接收過程,借助于Conaxent公司的USB接口的數(shù)字電視接收設(shè)備,可以實現(xiàn)在PC機上觀看流暢的有線數(shù)字電視節(jié)目。
[1]周師亮.三網(wǎng)融合的前景[J].電視技術(shù),2011,35(16):15-16.
[2]肜云.一種USB前端接收的PCTV技術(shù)研究與實現(xiàn)[D].武漢:華中科技大學(xué),2007.
[3]張勇.基于微軟廣播驅(qū)動體系的數(shù)字電視技術(shù)及其應(yīng)用程序的設(shè)計[J].現(xiàn)代電視技術(shù),2005(10):78-83.
[4]陸其明.DirectShow開發(fā)指南[M].北京:清華大學(xué)出版社,2003.
[5]方濤.數(shù)字電視業(yè)務(wù)信息及其編碼[M].北京:國防工業(yè)出版社,2003.