基於微軟廣播驅動體系的數字電視技術及其應用程式

來源:互聯網
上載者:User
從類比電視向數字電視演化的變革,在使用者需求和技術進步的巨大拉動下,已經成為一個無法復原轉的潮流。與傳統的類比電視相比,數字電視具有可實現高保真傳
輸,可提供高清晰音視頻,可提供與終端使用者的互動操作以及可採用數字壓縮技術有效提高通道利用率等技術優勢。當前,作為市場上的主流PC作業系統,微軟
Windows系列也不失時機的把數字電視技術納入其技術架構,為PC使用者提供數字電視訊號的接收,處理和播放服務。微軟電視技術允許基於微軟作業系統平
台,運用微軟提供的構件以及第三方構件,方便快速的實現數字電視的收看及應用程式的設計,支援包括ATSC,DVB等各種協議標準。本文將探討基於微軟廣
播驅動體系(BDA)的數字電視技術及其應用程式的設計與實現。

  一 廣播驅動體系(BDA)

  1. 廣播驅動體系概述

  微軟廣播驅動體系(Broadcast Driver
Architecture)定義了一種架構,這種架構支援用於接收數字電視的各種網路拓撲構成。它包含了用於網路構造和控制的軟構件,多路選擇,表分析和
IP資料遞送等以適用於主要的數字電視標準包括DVB和ATSC等。

  廣播驅動體系使得獨立硬體供應商(IHVs)能夠製造可工作於Windows系統的調諧接收裝置或者為支援新的網路類型而設計的硬體裝置。與
BDA相容的驅動程式能夠被作為過濾器(Filter)自動暴露在DirectShow中,即BDA裝置過濾器。作為一個標準的體系,BDA
使得上層應用程式不必關心BDA本身的細節,從而簡化了應用程式的設計。

  廣播驅動體系(BDA)的微型驅動程式(miniDriver)控制著執行以下操作的數字電視硬體:

  * 調諧數位廣播訊號;

  * 解調數字訊號;

  * 捕獲數字訊號的幀;

  * 將分離信號為視頻音頻以及資料流。

  BDA微型驅動程式具有一個統一的架構,設計者只需要填寫一些固定的結構體的相關參數,這些參數指出了對硬體進行各種操作的各種類
(CLASS)和方法(Method)。依據這些固定的結構體,驅動程式就可以被核心流外掛程式自動的作為過濾器暴露在DirectShow中了。

  2. 廣播接收拓撲

  為了構造DirectShow架構下的過濾器圖表(Filter
Graph),使其能夠適應網路結構的多樣性以及調諧和解碼的軟,硬體的多樣性,廣播驅動體系引入了功能拓撲(functional
topology)的概念。功能拓撲指出了對接收到的訊號所進行的一系列轉換操作,但其本身並沒有描述任何實際的過濾器,軟體模組或者如何在軟體或硬體上
進行操作等細節,相反,它定義了一系列抽象控制節點(Control
node)的布局結構,每一個節點代表著一個通用的離散的操作。取決於安裝在電腦上的不同的硬體或者軟體構件,同一個功能拓撲,將有可能導致不同的過濾
器圖表布局。例如,第三方硬體提供者如果選擇在同一個電路卡上實現調諧和解調,那麼,在DirectShow中,該硬體將表現為一個單獨的BDA裝置過濾
器,而在其內部卻包含著兩個控制節點(即調諧和解調)。所以,一個BDA裝置的過濾器區別於傳統的DirectShow
過濾器的特點就在於它能夠封裝一個功能模組(電路板或者晶片)上的實現著控制節點的所有硬體功能。功能拓撲實際上為第三方供應商構造了一個相當靈活的平
台,使其可以根據實際,選擇軟硬體的實現方法。

一個典型的BDA接收功能拓撲1所示。這個接收拓撲完成了以下操作:

  * 調諧並解調數字訊號;

  * 捕獲並解複用訊號;

  * 獲得電子節目單(electronic program guide)資訊;

  * 獲得音頻和視頻資料;

  * 獲得IP資料。

  通常,數字調諧Tuner的功能總是由硬體實現,其過濾器構件由一個核心流代理外掛程式自動暴露給DirectShow 成為BDA裝置過濾器。

  Transport information filter(TIF)和Network
provider的功能總是由軟體實現,其他功能則可以選擇由硬體或軟體實現。圖1的每一個方框都對應著BDA的一個控制接點,每一個控制節點都能夠採用
標準的演算法把網路和節目的特定參數與輸入訊號或輸入訊號構件結合起來,從而產生一個對與其直接相連的下遊控制節點有用的新的訊號。在實際的過濾器圖表中,
幾個控制節點可能只表現為一個過濾器。

  3. 廣播驅動體系控制機制

  在圖1中,功能拓撲的第一個控制節點是Network Provider,通常它也表現為一個單獨的過濾器。Network
Provider在廣播驅動體系的過濾器圖表中充當著管理者以及應用程式介面的角色,它負責著數字電視訊號進入並且通過廣播驅動體系裝置。當前,廣播提供
商是通過三種基本的網路形式:衛星,有線和天線來進行數字電視訊號的傳送的,這些數字訊號所遵循的協議也是多樣的,比如:ATSC,DVB-C,DVB-
T和DVB-S等。BDA裝置可以接收並管理這些數字訊號。

  對於Network Provider過濾器而言,它具有以下特點和作用:

  * 是過濾器圖表中的源過濾器,但實際上,並沒有真實的資料通過這個過濾器;

  * 對於每一種網路形式,存在一個Network Provider;

  * 參與整個過濾器圖表的建立;

  * 通過BDA 驅動程式提供的方法和屬性與其他的由BDA驅動程式初始化的過濾器進行通訊(比如Network Provider負責對Tuner進行配置)。

  Network
Provider本身是一個COM組件,它提供了一個標準介面ITuner給上層的應用。使得上層應用程式可以通過這個介面把調諧的請求發送給
Network Provider,然後它再把這個請求傳遞給BDA的驅動程式(miniDriver),用以完成數字調諧,接著在Network
Provider的指導下,由Microsoft MPEG2 Demux
Filter完成對音頻,視頻,IP等資料流的分離,送到相應的過濾器進行處理。

  微軟已經提供了四種不同的Network Provider,用於支援ATSC,DVB-C,DVB-T和DVB-S等網路類型。這四個Network Provider可以在Graph Edit的BDA Network Providers目錄下看到。

  二 微軟統一調諧模型

  為了適應不同網路類型,微軟定義了統一調諧模型(Unified Tuning Model)。這種模型使得應用程式能夠對使用任何相容裝置的任意網路類型的任意應用程式採用一個標準的過程進行調諧。

  1. 調諧過程概述

  應用程式調諧並選擇節目的基本方式是提交一個調諧請求給Network Provider過濾器,上面已經提到,Network
Provider過濾器在收到調諧請求以後將會與裝置過濾器(驅動程式)通訊並完成硬體調諧。微軟推薦的取得調諧請求的方式是從已經建立的嚮導庫
(guide
store)中取得一個調諧請求,這種嚮導庫中包含著可以顯示給終端使用者的節目有關資訊以及用於硬體調諧的網路特定資訊,一般情況下,這個嚮導庫出現在注
冊表的下面位置中:HKEY_LOCAL_MACHINE /SOFTWARE/Microsoft/Tuning Spaces。

圖2所示為調諧模型對象之間的關係。2所示,系統調諧空間對象(System Tuning Spaces
Object)包含了一組調諧空間(Tuning
Space),每一個調諧空間代表著一個不同的網路類型(ATSC,DVB-C,DVB-S以及DVB-T等),調諧空間包含著調諧到某一具體節目的相關
資訊,調諧請求(Tune Request)對象就是根據它來產生的。定位器(Locator)
對象包含著訊號源的其他資訊。一個調諧空間可以包含一個預設的定位器(Default
Locator),用於定位多工傳輸串流中的預設流。顯然,調諧空間對象,調諧請求對象以及定位器對象都是與特定的網路類型相關的,因而具體的對象也是
不相同的。

  對於一個具體的節目而言,可以包含一個或者多個基本流,每一個基本流被稱為一個組件(Component),並用組件類型
(Component
Types)來描述之,如音頻或者視頻組件等。有些組件是可以被手工剔除的,比如同一個節目可能包含兩個不同語言的音頻流,可以選擇一個而剔除另一個。一
個調諧空間可以包含一個可供優先選擇的組件類型(Preferred Component
Types)清單用以從流中選擇預設的組件,應用程式可以基於使用者要求覆蓋這個預設選擇而選擇其他組件。

  2. 調諧過程的操作順序

  與調諧相關的資訊總是被包含在調諧請求對象中,應用程式把調諧請求發送給Network Provider過濾器以供調諧。調諧共分為兩個階段:定位和擷取。

  (1)訊號的定位

  Network Provider過濾器首先把調諧請求資訊傳遞給過濾器圖表中的BDA MPEG-2 Transport
Information
Filter(TIF)過濾器,TIF據此填充調諧器(Tuner)對訊號定位所需要的相關資訊,比如載波頻率(Carrier
Frequency)等。一個調諧請求可能帶有一個和它關聯在一起的定位器,如果沒有,TIF將為之建立一個預設的定位器。

  Network
Provider過濾器然後要求BDA調諧器調諧到正確的頻率上,並設定調諧器所需要的諸如前向錯誤修正(FEC)率等參數資訊。調諧器接收到訊號以後,就轉
發給BDA的捕獲過濾器(Capture Filter),捕獲過濾器負責對訊號進行數字化並將數字化後的MPEG-2傳輸串流發送給MPEG-2
Demultiplexer解複用過濾器。

  TIF過濾器總是將PID為0的流映射給自己,這個PID是為節目相關表(Program Association
Table)PAT而預留的。當TIF收到PAT後,就會通知Network Provider過濾器節目映射表(Program Map
Table)PMT表以及其他的表位於那些PID上。

  (2)訊號的擷取

  Network
Provider過濾器通過詢問TIF獲得一個節目的組件清單。它可以基於優先選擇組件清單啟用或者屏蔽一些組件,然後把相應的PID映射到解複用過濾
器,這個過濾器負責把相應的流送到對應的PIN
上。對於沒有映射到任何輸出PIN上的PID流,解複用過濾器就會把它拋棄。TIF在過濾器圖表啟動並執行同時不斷監測PMT以探索服務的變化,並將變化及時
通知給Network Provider過濾器。

  3. 與調諧相關的對象

  (1)調諧空間

  一個調諧空間代表著一個特定的網路類型,主要完成以下功能:

  * 儲存關於網路的資訊;

  * 是調諧請求對象的製造工廠;

  * 是永久性的。可以被儲存在註冊表中。

  為了取得本地系統的所有可用的調諧空間,2示,統一調諧模型提供了SystemTuningSpaces對象並在這個對象上暴露
ITuningSpacesContainer介面用以方便的進行調諧空間枚舉。每一個調諧空間對象都暴露出一個繼承自ITuningSpace的介面,
應用程式使用這個介面的CreateTuneRequest方法產生一個調諧請求對象。當然,統一調諧模型也允許在應用程式中產生一個新的調諧空間並設定
預設的定位器。

  (2)調諧請求,定位器和基本流組件

  對於數字電視,無論是初始的訊號定位還是後續音視頻以及資料基本流的發現,都需要調諧動作的介入。因而對於整個調諧操作而言,調諧請求對象因為其包含(或者提供擷取手段)調諧所必須資訊而被置於一個中心的地位。

  調諧請求對象產生的唯一方法就是調用調諧空間的CreateTuneRequest方法。如前所述,調諧請求中包含了網路相關資訊,定位器資訊,預設選取的組件資訊等。

  定位器對象同樣是與特定網路相關的,比如DVB-S所引用的定位器就是DVB-S Locator。定位器包含了為了使Network Provider過濾器定位特定的服務所需要的進一步資訊,比如載頻,符號率,極化方向以及電源等。

  統一調諧模型同樣提供了對基本流組件進行選擇的介面IComponent。如果不進行選擇,Network Provider過濾器將使用優先選擇組件清單對MPEG-2 Demultiplexer過濾器的輸出PIN進行配置。預設的PIN配置如下:

  * PIN1:PSI(Program Specific Information)表資訊。送給TIF過濾器;

  * PIN2:視頻流;

  * PIN3:音頻流;

  * PIN4:資料流;

  * PIN5:PSI表資訊。送給MPEG-2 Section and Tables過濾器。

  4. 節目相關資訊的取得

  為了從傳輸串流中擷取節目相關資訊,比如PAT,PMT以及CAT等。主要有以下幾種方法:

  * 從TIF過濾器中獲得;

  * 從MPEG-2 Section and Tables過濾器中獲得;

  * 實現一個使用者級的過濾器以解析原始的PSI包;

  上述過濾器都提供了相應的介面以獲得節目資訊,並且可以混合使用上面幾種方法。

  三 BDA應用程式設計

  微軟在XP作業系統中提供了一個輕量級的ActiveX控制項Video
Control,該控制項的使用將導致應用程式的開發極為方便。本文將討論的是在沒有這個控制項的WIN2000作業系統下的DVB-S數字電視應用程式的設
計。對於這種應用程式,必須手動的把需要的過濾器串連起來構成完整的過濾器圖表。

  在應用程式開發之前,應當確保數字電視接收卡及其BDA驅動程式被正確安裝和成功載入。此時,在Graph Edit的BDA
Source Filters目錄和BDA Receiver
Components目錄下應當分別可以看到相應的Filter。以TwinhanDTV
sat(雙漢DVB-S)接收卡為例,在這兩個目錄下,分別可以看到TwinHan DVBS BDA Tuner Filter和TwinHan
DVBS BDA Capture
Filter兩個裝置過濾器。對於有些硬體供應商的接收卡,這兩個控制節點在BDA中可能被一個Filter所實現,所以也只在某一目錄下表現為一個
Filter。

  以下的討論對涉及DirectShow應用程式設計的公用細節未做深入,討論的重點放在有關數字電視應用程式設計的部分。為了簡化起見,以下出現的代碼都不含錯誤處理。

  1. 初始化

  和普通的DirectShow應用程式一樣,程式首先應當對COM組件進行初始化,然後建立一個過濾器圖表對象。代碼如下:

  CComPtr pGraph;

  CoInitializeEx (NULL, COINIT_APARTMENTTHREADED);

  pGraph.CoCreateInstance(CLSID_FilterGraph);

  2. 取得調諧請求對象

  前面的統一調諧模型已經詳細討論過調諧的細節。在應用程式中,可以使用系統枚舉取得一個已有的調諧空間,也可以建立一個新的調諧空間以產生調
諧請求並提交給Network Provider過濾器。以下代碼以產生一個新的調諧空間為例(網路類型為DVB-S),說明了調諧請求對象的產生:

  //Create DVBSTuningSpace Object and set its properties

  CComPtr pIDVBSTuningSpace = NULL;

  pIDVBSTuningSpace.CoCreateInstance(CLSID_DVBSTuningSpace);

  pIDVBSTuningSpace->put_UniqueName( bstrName );//set a unique name for this object

  pIDVBSTuningSpace->put_FriendlyName( bstrFriName );//set friendly name

  pIDVBSTuningSpace->put__NetworkType(CLSID_DVBSNetworkProvider);

  //Create DVBSLocator Object and set it as the default locator of the DVBSTuningSpace above

  CComPtr pLocatorVal = NULL;

  pLocatorVal.CoCreateInstance(CLSID_DVBSLocator);

  pLocatorVal->put_SymbolRate(dwSymbolRate );//set symbol rate

  pLocatorVal->put_CarrierFrequency(dwCarrFreq ) ;//set carrier frequency

  pLocatorVal->put_SignalPolarisation(Polar );//set polarization

  pIDVBSTuningSpace->put_DefaultLocator( pLocatorVal );

  //the source code for adding the this TuningSpace to SystemTuningSpaces is omitted

  //Create TuneRequest object and set its locator

  CComPtr pITuneRequest = NULL;

  pIDVBSTuningSpace->CreateTuneRequest(&pITuneRequest);

  CComQIPtr pIDVBTuneRequest(pITuneRequest);

  pIDVBTuneRequest->put_Locator(pLocatorVal);

  上述代碼將建立一個調諧請求對象(指標為pIDVBTuneRequest),以便提供給Network Provider 過濾器,代碼中沒有設定優先選擇組件清單,所以MPEG-2 Demultiplexer過濾器的各輸出PIN將輸出預設基本流。

  3. 建立Network Provider

  如前所述,Network Provider Filter控制著調諧過程並且和Transport Information
Filter協同工作以從傳輸串流中取得節目資訊。為了選擇Network Provider的類型,應當詢問調諧空間(Tuning
Space)以取得網路類型資訊,從而選擇對應的Network Provider。

  選擇和建立過程代碼如下:

  CComPtr pNetworkProvider; // Network Provider filter

  GUID CLSIDNetworkType; // GUID of the network type.

  // Find the network type.

  pIDVBSTuningSpace ->get__NetworkType(&CLSIDNetworkType);

  if (CLSID_NetworkType == GUID_NULL)

  {

  // This tuning space is analog TV, AuxIn, or some other non-BDA type.

  }

  else

  {

  // Create the network provider filter for this network type.

  pNetworkProvider.CoCreateInstance(CLSIDNetworkType);

  // Add the network provider to the graph.

  pGraph->AddFilter(pNetworkProvider, L"Network Provider");

  }

  上述代碼中ITuneRequest::get_TuningSpace方法取得了一個特定的調諧請求的調諧空間,並且使用
ITuningSpace::get__NetworkType方法獲得了其網路類型GUID,這個GUID作為參數傳遞給
CoCreateInstance以建立相應的Network Provider filter。

  成功建立Network Provider並把其加入過濾器圖表(Filter Graph)後,詢問取得其ITuner介面,把調諧請求(Tune Request)發送給它。代碼如下:

  // Query for ITuner.

  CComQIPtr pTuner(pNetworkProvider);

  if (pTuner)

  {

  // Submit the tune request to the network provider.

  pTuner->put_TuneRequest(pIDVBTuneRequest);

  }

  ITuner介面的put_TuneRequest方法把調諧請求發送給了network provider。

  4. 增加並串連其他的過濾器

  使用調諧請求(Tune Request)對Network Provider進行成功配置以後,就可以把其餘的過濾器加入並串連到過濾器圖中。

  直接連接在Network Provider Filter後面的過濾器是位於BDA Source
Filters(目錄GUID為KSCATEGORY_BDA_NETWORK_TUNER)目錄中的Tuner
過濾器;取決於硬體實現,Tuner過濾器後面串連的可能是位於BDA Receiver
Components目錄中的capture過濾器或demodulator過濾器(目錄GUID為
KSCATEGORY_BDA_RECEIVER_COMPONENT)。找出該接收卡對應的裝置Filter需要在對應目錄下進行系統枚舉並試圖建立連
接,直至串連成功。 系統枚舉的方法和DirectShow應用程式相同。

  當BDA的裝置Filter被串連完成以後,緊接著串連是MPEG-2
Demultiplexer過濾器,如前所述,這個過濾器預設輸出五個PIN,可以選擇使用智能串連技術Render每個PIN完成整個過濾器圖表的建
立。特別的,對於第四個PIN輸出的IP資料,需要通過BDA MPE 過濾器再串連到BDA IP
Sink過濾器上,這些資料的利用需要再做進一步開發。完整的過濾器圖表3所示。

5. 應用程式控制及節目選取

  和普通的DirectShow應用程式相同,應當從GraphBuilder取得IMediaControl和IMediaEvent等介面,以控制過濾器圖的運行,暫停和停止以及對一些應用程式關心的事件的進行捕捉和處理。

  Filter Graph成功建立並運行以後,就可以取得節目相關的資訊。首先應當取得的是PAT表,獲得PAT表的代碼如下:

  // Get the next section with PID 0, which is reserved for the PAT.

  PID pid = 0x00; TID tid = 0x00;

  DWORD dwTimeout = 500; // msec

  MPEG2_FILTER mpeg2_filter = { 0 };

  //The IMpeg2Data interface is exposed by the MPEG-2 Sections and Tables filter

  CComPtr pSectionList = NULL;

  pIMpeg2Data->GetSection(pid, tid, NULL , dwTimeout, &pSectionList);

  通過pSectionList介面指標可以對PAT進行操作以獲得本次調諧後可用的節目編號及其各自對應的PID。應用程式可以選擇一路節目
進行播出。該節目被選擇以後,需要進一步取得該節目的PMT表以獲得其基本流組件(音頻,視頻或者資料等子流)對應的ID,並將這些基本流ID映射到
Demultiplexer過濾器的相應輸出PIN上,就可以播出該節目了。PMT表的取得方法和PAT類似,只是GetSection方法中的PID應
為所選擇節目的ID,TID為2。

  應用程式正常啟動並執行時候,仍然可以提交一個新的調諧請求給Network Provider過濾器,從而引發一個新的調諧過程;也可以隨時切換到另外一個節目頻道;或者設定某個節目頻道中的組件(音頻,視頻或者資料等子流)為可用或不可用。

  四 結語

  本文詳細討論了微軟數字電視技術的廣播驅動體系以及微軟統一調諧模型,並在此基礎上,實現了一個完整的數字電視應用程式。基於特定的數字電視
接收卡,對該應用程式的進一步完善,可以實現在PC機上的數字電視的收看並可以在DirectShow架構下對收到的音頻,視頻和IP包等做進一步處理。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.