Microsoft DirectX 8.0 |
Microsoft® DirectX® 8.0 SDK と Microsoft® Broadcast Driver Architecture (BDA) と互換のデジタル TV チューナー カードがあれば、デジタル TV 放送をパーソナル コンピュータで視聴するアプリケーションを作成することができる。PC 上でデジタル TV をサポートするための Microsoft のアーキテクチャは次のコンポーネントに分けられる :
DirectX 8.0 には基本的なデジタル TV フィルタ グラフの作成、ATSC (アンテナあるいはケーブル) や DVB-S 放送への接続、グラフのチューンとサブストリームの選択、(電子番組ガイドのような) ロー PSI データのキャプチャとスクリーンへのビデオのレンダリングをするために必要なすべてのフィルタとコンポーネントが含まれている。
DirectX 8.0 には PSI ストリームから EPG データを抽出する MSTV ガイド ストアや、インタラクティブ TV 用の Web ページや Web イメージのような ATVEF 拡張をレンダリングするコンポーネントは含まれていない。DirectX 8.0 はまたビデオ コントロールをも提供しない、つまりアプリケーションがフィルタ グラフを作成するには自分自身でコードを実装しなければならない。
このトピックには次のセクションが含まれる :
次の図は地上波 ATSC 放送を受け取るために構成された基本的なデジタル TV フィルタ グラフを示す。チューナー、キャプチャ、MPRG-2 デコーダ フィルタの実際のフィルタ名やピン名はビデオに依存して変わる。
ネットワーク プロバイダ: BDA ネットワーク プロバイダ フィルタは必ずグラフ内の最初のフィルタとなる。このグラフは ATSC ネットワーク プロバイダを持っている。Microsoft はまた DVB ネットワーク チューニングを提供する DVB ネットワーク プロバイダをも提供する。サードーパーティは自分自身のネットワーク プロバイダを持ち、自分自身の放送をカスタマイズする。ネットワーク プロバイダは、コンテンツ多重、変調、放送規格を含む、個々のチューニング空間でダウンストリーム フィルタを構成する。このフィルタは ITuner インターフェイスを実装し、アプリケーションはそれを使って指定したチャンネルや周波数にデバイスをチューニングする。
デジタル TV チューナー: このカーネルモードで KsProxy ベースのフィルタはハードウェア デバイス上のチューナーを表現する。アプリケーションから呼び出し可能なインターフェイスがある場合とない場合がある、それはサードパーティ のドライバの実装に依存している。BDASample アプリケーションでは、チューナー フィルタは ITuner をサポートするようには仮定されていない、それゆえチューニングはチューナー フィルタと内部的にコミュニケーションするネットワーク プロバイダを通して行われる。
デジタル TV キャプチャ フィルタ: このカーネルモードで KsProxy ベースのフィルタはハードウェア デバイス上での復調/デジタル化を表す。その 1 つの出力ピンは MPEG-2 トランスポート ストリームを MPEG-2 デマルチプレクサに出力する。
MPEG-2 デマルチプレクサ: デジタル TV グラフでは、MPEG-2 デマルチプレクサは MPEG-2 トランスポート ストリームをキャプチャ フィルタから受け取り、ストリームをデマルチプレクスする。通常 4 つの出力ピンを持つ。最初の出力ピンはロー プログラム サービス 情報 (PSI) パケットをトランスポート情報フィルタに出力する。2 つ目のピンはビデオ ストリームを MPEG-2 デコーダに出力する。3 番目のピンはオーディオをオーディオ デコーダに出力し、4 番面のピンはインタラクティブ TV 拡張のようなデータを出力する。
トランスポート情報フィルタ: 受信者が指定した番組に関するすべての基本ストリームを正しく受け取るために、また受信者がどの番組がストリームに含まれているのかを話せるために、トランスポート ストリームはトランスポート ストリーム内に含まれるカタログ情報として働く多くのテーブルのセットを持つ。ネットワーク プロバイダの方向に、MPEG-2 デマルチプレクサはトランスポート情報フィルタへ出力するテーブルを出力する、それらのテーブルをパースし、ネットワーク プロバイダへの情報を提供し、グラフ内の他の受信フィルタとノードをコントロールできるようになる。
HDTV 性能 MPEG-2 デコーダ: デジタル TV フィルタ グラフは高解像度 TV ビデオ ストリームの性能を持つサードパーティのデコーダが必要である。オーディオとビデオ両方のストリームを同じフィルタで操作するデコーダ実装もあるし、オーディオとビデオ別のフィルタを持つデコーダもある。
オーバーレイ ミキサー: この Microsoft® DirectShow® フィルタは実際にはビデオのレンダリングをシステムのビデオメモリに行う。
ビデオ レンダラ: ビデオのレンダリングにオーバーレイ ミキサーを使うすべてのグラフでは、ビデオ レンダラは単なるウィンドウ マネージャとして働き、オーバーレイ ミキサーにビデオ矩形をスクリーンのどこに置くかを伝える。
BDA MPE フィルタ: このフィルタはマルチ プロトコル カプセル化 (MPE) ストリームから IP パケットを抽出し、IP Sink にそれを出力する。
BDA IP シンク: このフィルタは IP パケットを受け取り、Winsock 経由でホスト システムにそれを出力する、アプリケーションはそれを受け取り、インタラクティブ TV 拡張のような IP データ ストリームを受信する。
DirectX 8.0 では、アプリケーションはデジタル TV グラフを手動で作成し、各フィルタの追加や接続をしなければならない。キャプチャ グラフ ビルダは使えない。サンプル アプリケーション BDASample が SDK に含まれている。これはこのセクションの後半で概説するステップに従って、基本的なデジタル TV フィルタ グラフの作成方法をデモンストレーションする。
次のセクションはおおむねランタイム時に行われる典型的なシーケンスの順に並んでいる。チューン リクエストが ITuner::put_TuneRequest メソッドでネットワーク プロバイダに送られた後で フィルタ グラフの作成を行うことに注意すること。なぜならチューン リクエストにはネットワーク タイプと、どのフィルタをグラフに読み込むかを決める他の詳細情報が含まれているからである。グラフはネットワーク プロバイダがこの情報をもつまで作成されない。チューニング空間、チューン リクエスト、関連オブジェクトの詳細については、「Microsoft® チューニング モデル」を参照すること。
DirectX 8 では、Broadcast Driver Architecture がローカル アナログ ケーブルとアンテナ、ローカル ATSC アンテナとケーブル、DVB-S に対するデフォルトのチューニング空間を提供する。アプリケーションにデジタル ケーブル サポートを実装するには、デジタル ケーブル チューニング空間を必要な値でオーバーライトし、必要ならデフォルト ロケータも提供すること。国際チューニングやデジタル衛星放送をサポートするには、自身のチューニング空間を作成する必要がある。DVB チューニング空間では、アプリケーションはユーザーインタフェイスを提供しなければならない、ユーザーはそれを使ってどのデジタル TV サービスを購読するかを指定することができる。
チューニング空間を取得するには、アプリケーションは SystemTuningSpaces オブジェクトのインスタンスを作成し、ITuningSpaceContainer::get_EnumTuningSpaces メソッドを使ってチューニング空間のリストを取得する、そのリストからチューニング空間を 1 つ選択する。この手順は BDASample アプリケーションの LoadTuningSpace メソッドでデモンストレーションされている。
Microsoft チューニング モデルはアナログ チューニング空間をサポートするために設計されたが、DirectX 8.0 には BDA フィルタ グラフ内でのアナログ TV チューニングの完全なサポートは含まれていない。このサポートは DirectX と Microsoft® Windows® の将来のリリースで追加される。一方アナログ TV グラフは DirectShow がアナログ TV キャプチャでこれまで使ってきたものと同じタイプのフィルタ グラフでサポートされる。DirectX 8.0 では、デジタル ネットワーク タイプだけが BDA フィルタ グラフでサポートされる。これは次のようなことを意味している、たとえば、デジタルとアナログ両方のチューニングをサポートするアプリケーションを書こうとすると、そのアプリケーションは 2 つの別のフィルタ グラフを作成する必要があり、ユーザーがアナログ TV チャンネルを選択したときはアナログ グラフを使い、ユーザーがデジタル チャンネルや周波数を選択したときは BDA グラフを使う。Microsoft Windows の将来のリリースでは、グラフ作成プロセスを完全に扱う Automation 互換のビデオ コントロールと共に、アナログ TV とデジタル TV とラジオ チューニング空間がすべて提供される。
アプリケーションはチューン リクエストを直接には作成しない。その代わり、アプリケーションはITuningSpace::CreateTuneRequest メソッドを呼び出し、それは空の初期化されていないチューン リクエストを返す。次にアプリケーションは特定のインターフェイスに対応したオブジェクトの標準 COM メソッド QueryInterface を呼び出す、そのインターフェイスは IATSCChannelTuneRequest のような ITuneRequest から派生したインターフェイスである。次にアプリケーションは返されたインターフェイスを使ってチューン リクエストを構成し、それを処理し、ネットワーク プロバイダにサブミットすることができる。一般「ネットワーク プロバイダ」のようなものは実際に存在しない事を理解することは重要である、そうではなく「ATSC ネットワーク プロバイダ」や「DVB ネットワーク プロバイダ」が存在するのである。作成された個別のオブジェクトはチューニング空間オブジェクトから取得したネットワーク CLSID をベースにしている。
ネットワーク プロバイダがグラフに追加された後で、QueryInterface メソッドを使ってその ITuner インターフェイスを取得する。次に ITuner::put_TuneRequest メソッドを使ってチューン リクエストをネットワーク プロバイダに渡す。この手順はBDASample の graph.cpp の LoadNetworkProvider 関数でデモンストレーションされている。
ネットワーク プロバイダがチューン リクエストで構成されると、1 つ 1 つ各フィルタを追加接続することで、残りのフィルタをグラフに追加できる。BDASample アプリケーションの graph.cpp の BuildGraph と LoadAVSegment と LoadIPSegment 関数を見ること。
注 この手順は BDASample に実装されていない。
「コンポーネント」はプログラム サブストリームを参照する。デフォルト優先コンポーネント タイプは、ユーザーがデフォルトでアクティブにしたがるようなタイプのサブストリームである。たとえば、スペイン語オーディオ ストリームが利用可能なときはいつもプレイされるべきだ、とあるユーザーは指定するかも知れない。アプリケーションは空の Components コレクション オブジェクトをインスタンス化し、それに書き込むことによって優先コンポーネント セットを作成する。次にアプリケーションはそのコンポーネント オブジェクトを処理しチューナーにサブミットする、するとチューナーは利用可能なサブストリームに変更があると必ずそれをチェックする。注 この手順は BDASample に実装されていない。
> どのサブストリームをアクティブにするかあるいは非アクティブにするを指定するには、アプリケーションは最初にチューン リクエストをチューナーにサブミットしなければならない。チューナーが指定したチャンネルや周波数をチューンすると、チューナーはチューン リクエスト内のコンポーネント コレクションに各サブストリームがアクティブあるいは非アクティブかの情報を書き込む。次にアプリケーションはこのコレクション内の各コンポーネントを調査し、IComponent::put_Status メソッドを使って個々のサブストリームをアクティブあるいは非アクティブにすることができる。最初のチューンリクエストがサブミットされた後で、次のチューニングは新しいチューン リクエストをネットワーク プロバイダにサブミットすることによって行われる、これは BDASample の graph.cpp の ChannelChange メソッドでデモンストレーションされている。