Microsoft DirectX 8.0

DirectShow FAQ

ここには、Microsoft® DirectShow® に関するよくある質問の答えが集められている。内容は次のとおりである。

一般的な質問

Q: DirectShow がサポートしているオペレーティング システムは?

A: DirectShow は、Microsoft® Windows® 9x、Microsoft® Windows® 2000、および Microsoft® Windows® Me をサポートしている。

Q: DirectShow プログラムするのにどのような COM 知識が必要か?

A: アプリケーション開発者にとって COM オブジェクトで処理するための基本的な理解 (インスタンス化、公開するインターフェイスへのアクセス方法、そのインターフェイスの参照カウントの正しい管理) は必要である。フィルタ開発者にはもう少し COM の知識が必要な場合がある。詳細については、このヘルプ ファイルの「DirectX 8.0 の紹介」にある「C または C++ による DirectX プログラミング」を参照すること。

Q: どのようなフォーマットを DirectShow はサポートするのか?

A: DirectShow でサポートされるフォーマット」を参照すること。

Q: DirectShow ハードウェア互換性リスト (HCL) は存在するのか?

A: いいえ。DirectShow は使用可能な場合は Microsoft® DirectDraw® および Microsoft® DirectSound® ハードウェア能力を使用する。専用ハードウェアが使用できない場合、DirectShow は GDI を使用してビデオを描画し、waveOut* マルチメディア API を使用してオーディオを再生する。

Q: DirectShow アプリケーションを書くにはどのような言語が使えるのか?

A: DirectShow は主に C++ 開発用に設計されている。(C を使うことも可能) Microsoft® Visual Basic® でDirectShow API のかなりのサブセットにアクセスできるが、Visual Basic のサポートは完全ではない。DirectShow はスクリプト ベースの DVD アプリケーションをサポートしている、これは Microsoft® JScript® あるいは Visual Basic Scripting Edition を使用する。DirectShow アプリケーションを Borland Delphi を使って書くことも可能だが、SDK ドキュメントはそれについては説明していない。

詳細については、以下のトピックを参照すること。

Q: DirectShow での開発に必要なコンパイラは?

A: コンパイラの環境を正しく設定すれば、Component Object Model (COM) オブジェクトの生成が可能な任意のコンパイラを使用できる。Microsoft® Visual C++® 以外のコンパイラを使用する場合は、コンパイラ間の相違のため基底クラス ライブラリの再ビルドが必要なことがある。

Q: DirectShow は Microsoft® Windows Media™ とどう関連しているのか?

A: Windows Media アプリケーション」を参照すること。

Q: DirectShow は Microsoft® DirectX® のほかのコンポーネントとどう関連しているのか?

A: 内部的には、ハードウェアがサポートするとき、DirectShow は DirectSound と DirectDraw を使用する。(ビデオ レンダラは DirectDraw 7 のサーフェイスを使用する。新しい Microsoft® Direct3D® API は使用しない。) DirectShow アプリケーションを書くために他の DirectX API を使う必要はない、しかしそれらを組み合わせることは可能である。たとえば、「テクスチャ 3D サンプル」を参照すること。

DirectShow の前のバージョンは 6.0 であった。それはもともと DirectX Media SDK と共に出荷された。DirectX Media SDK がなくなったので、DirectShow は DirectX SDK に移った、そしてそのため DirectShow のバージョン数は 6.0 から 8.0 にジャンプした。

Q: DirectShow は Microsoft® ActiveMovie® とどう関連しているのか?

A: ActiveMovie は DirectShow のもともとの名前だった。ActiveMovie という言葉はもう使われていない。

Q: DirectShow はマルチメディア アプリケーションに限定されているのか?

A: DirectShow に含まれているデフォルトコンポーネントはマルチメディア用に設計されている。しかしDirectShow アーキテクチャは別の種類のデータストリーミング ソリューションにも有効である。

Q: GraphEdit ユーティリティのソースは公開されているか? GraphEdit は再配布できるか?

A: ソースは公開されていない。Graphedt.exe は再配布できない。

Q: DMO は DirectShow フィルタに置き替わるのか?

A: Microsoft® DirectX® メディア オブジェクト (DMO) は DirectShow アプリケーション内で使用可能である。エンコーダ、デコーダ、エフェクトについては、DirectShow フィルタの代わりに DMO を書くことを勧める。それ以外の目的では、DirectShow フィルタがより適切かもしれない。詳細については、「DirectX Media Object」を参照すること。

Q: より詳細な情報はどこで取得できるのか?

A:

Q: アプリケーション / フィルタを開発する上で困難な問題に直面している。開発サポートはどこで受けられるのか?

A: マイクロソフト サポート技術情報」に連絡すること。

Q: DirectShow を説明する良い本はあるか?

A: 現在、DirectShow 専用の本はない、次のような既存の DirectX の本の中で DirectShow は少し説明されている。

DirectShow はこれらの本で少し触れられているが、最も優れた情報ソースは DirectX SDK で提供される DirectShow ドキュメントとサンプル コードである。

Q: フィードバックとバグレポートをするには、どのように Microsoft にコンタクトすれば良いのか?

A: 一般的な DirectX の問題についてのアドレスは directx@microsoft.com である。バグ レポートの送り先は dxbugs@microsoft.com である。

Q: Microsoft による DirectShow 改善方法のアイデアを持っている。

A: Microsoft は提案、質問、コメントを歓迎します。あなたの考えを教えてください。何が我々に欠けているのか?どの分野を最も改善すべきだと考えるのか?どのようなチュートリアルとサンプルが必要と考えるのか?あなたの提案が将来の作業の優先順位付けに役立つことでしょう。新しい DirectShow ドキュメントに関連する質問や提案があれば、メッセージを askdshow@microsoft.com に送ってください。

Q: Windows Media Player で AVI ファイル フォーマットを再生している。オーディオは聞こえるのだが、その代わりビデオを見ることができない、黒い画面だけが見える。何が悪いのか?

A: 多分そのファイルはあなたのシステムでサポートされていない CODEC でエンコードされている。AVI ファイル フォーマットは共通ではあるが、AVI ファイルは多くの異なった CODEC (coder/decoder) で作成し得る。AVI ファイルをサポートされていない CODEC を使用して再生すると、オーディオ コンポーネントは聞こえるかもしれないが、ビデオは黒いスクリーンが表示されるか、スクリーン コンテンツが変更できないままになる。

  Windows Media Player は多くの場合、システムに CODEC がない場合、その CODEC をダウンロード、インストールしようとする。

Windows 2000 に含まれているいくつかの共通の CODEC は、Radius Cinepak、Duck TrueMotion、Intel Indeo、Microsoft RLE、そして Microsoft Video 1 である。Windows 2000 システムの ビデオ CODEC のリストを見るには次のようにする。

  1. コントロール パネルを開く。
  2. [サウンドとマルチメディア] をクリックする。
  3. [ハードウェア] タブをクリックする。
  4. [ビデオ CODEC] を選択する。
  5. [プロパティ] をクリックする。
  6. [プロパティ] タブをクリックする。

Q: あるメディア ファイルにどの CODEC が使われているのかを知る方法は?

A: 以下のようにすること。

プログラミングに関する質問

Q: どのようにアプリケーションをビルドするのか?どのライブラリ ファイルとヘッダー ファイルが必要なのか?

A: ビルド環境の設定」を参照すること。

Q: GraphEdit がドキュメントにない多くのフィルタを表示する。これらのフィルタは何か?

A: GraphEdit はあるフィルタ カテゴリでシステムに登録されているすべてのフィルタを列挙する。これはサードパーティ アプリケーションがインストールしたフィルタや Windows Media のような他の Microsoft テクノロジがインストールしたフィルタを含んでいる。またある DirectShow フィルタは CODEC やハードウェア デバイスのラッパーとして動作する、各 CODEC やデバイスは別のフィルタとして表示される。詳細については、「デバイスとフィルタの列挙」を参照すること。

Q: プログラム的にフィルタの追加と接続をするカスタム グラフの構築で問題がある。どのようにしてこれに対する援助を得ることができるのか?

A: 最初にすべてを Filter Graph Editor (GraphEdit) で構築すること。このツールを使えば、多くの可能性をすばやくシミュレートでき、問題を視覚的に修正することができる。GraphEdit は通常、ソース コードで構築しようとする前にグラフを構築する優れた場所である。

追加情報: ソースとビデオレンダラの間のインテリジェント接続を行っているなら、ソースとレンダラの間に正しいメディア タイプ変換を行う一連のフィルタの挿入を DirectShow に教える。そのソース フィルタはオーディオとビデオが入る 1 つの出力を持つ。それゆえ、オーディオとビデオを別のストリームにするフィルタ (デマルチプレックス) が追加されなければならない。従ってしなければならないことはオーディオ レンダラをデマルチプレクサのオーディオ ピンに接続することである。ソース メディア タイプによって、使われるデマルチプレクサは複数のフィルタのうちの 1 つとなる場合がある。AVI については、AVI スプリッタがその仕事を行う。MPEG2 では、MPEG2 スプリッタか MPEG-2 デマルチプレクサとなるであろう。スマート接続を使用しているなら、デマルチプレクサを見つけ、オーディオ ピンを見つけ。次にレンダラに接続しなければならない。

容易な方法を希望するなら :

これはグラフ内にある出力ピンに対応するレンダラを持っている場合の "Connect" と等価である、しかし 1 つも持っていないならレンダラを追加するであろう。したがってオーディオもビデオも両方接続されるはずである。

Q: 特定のマシンに DirectShow がインストールされているかどうかを確認する方法は?

A: CoCreateInstance を呼び出してフィルタ グラフ マネージャのインスタンスを作成する。この呼び出しが成功した場合は、DirectShow がマシンにインストールされている。次のコードに呼び出しの方法を示す。

IGraphBuilder *pGraph;

HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
    NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **) &pGraph);

Q: プロパティ ページを表示せずにフィルタの設定を変更する方法は?

A: ほとんどのフィルタは、フィルタのプロパティを設定するための 1 つ以上のインターフェイスを公開している。目的のフィルタのリファレンス ページを調べること (「フィルタ」を参照)。

Q: なぜ「ASF ライタ」と「ASF リーダー」フィルタが使えないのか?

A: アプリケーションをビルドするとき、ソフトウェアの認証を提供しなければならない。「DirectShow での ASF ファイルの作成」および「 Windows Media Format SDK」を参照すること。また GraphEdit 内でこれらのフィルタを使うことはできない。

Q: DirectShow は現在の再生位置を定期的にアプリケーションに通知できるか?

A: 位置のコールバック通知は行われない。タイマを使用し、IMediaSeeking::GetCurrentPosition メソッドを使って現在の位置を取得すること。

Q: フィルタを書いたが、どのようにしてインストールすればよいか?

A: DirectShow オブジェクトの登録方法」を参照すること。

Q: GraphEdit で自分のフィルタをテストできるか?

A: フィルタ開発中に GrapEdit はフィルタ間の接続を視覚化し、援助する。GraphEdit はフィルタ機能のクイック テストをも提供する。しかし、それは豊富なテスト プラットフォームではない。詳細については、「GraphEdit によるグラフ構築のシミュレーション」を参照すること。

Q: フィルタ内のピンの数を確認する方法は?

A: S_OK 以外の値を返すまで IBaseFilter::EnumPins メソッドを呼び出し、次に IEnumPins::Next メソッドを呼び出す。詳細については、「フィルタ グラフ内のオブジェクトの列挙」を参照すること。

Q: フィルタはどの権限リングで動作するか?

A: フィルタはリング 3 で動作する。しかし、ストリーミング デバイスを制御するフィルタはリング 0 で動作するものがある。「ハードウェア デバイスがフィルタ グラフに参加する方法」を参照すること。