編集

次の方法で共有


DirectShowに関する FAQ

この記事では、Microsoft DirectShowについてよく寄せられる質問に回答します。

どのようなオペレーティング システムDirectShowサポートされていますか?

DirectShowは、サポートされているすべてのバージョンのWindowsで使用できます。

DirectShowを使用してプログラミングするには、どのくらいの COM 知識が必要ですか?

アプリケーション開発では、COM オブジェクトの操作の基本 (インスタンス化、公開されているインターフェイスへのアクセス、それらのインターフェイスの参照カウントの管理) を理解する必要があります。 フィルターの開発には、より多くの COM 知識が必要です。

どのような形式DirectShowサポートされていますか?

DirectShowハードウェア互換性リスト (HCL) はありますか?

いいえ。 DirectShowは、Microsoft DirectDraw と Microsoft DirectSound ハードウェア機能が使用可能な場合に使用します。 特別なハードウェアが使用できない場合、DirectShowは GDI を使用してビデオを描画し、waveOut * マルチメディア API を使用してオーディオを再生します。

DirectShow アプリケーションを記述するために使用できる言語は何ですか?

DirectShowは主に C++ 開発用に設計されています。 DirectShow API の小さなサブセットは、Visual Basic 6.0 を通じて公開されますが、この機能は非推奨です。

DirectShowマネージド コードを使用してアクセスできますか?

Microsoft には、マネージド DirectShow API を実装する現在の計画はありません。

DirectShow開発に必要なコンパイラは何ですか?

コンポーネント オブジェクト モデル (COM) オブジェクトを生成できるコンパイラは、コンパイラの環境が正しく構成されたら機能する必要があります。

DirectShowは Microsoft DirectX とどのように関連していますか?

内部的には、DirectShowは、ハードウェアでサポートされている場合に DirectSound と DirectDraw を使用します。 ビデオ レンダラーとオーバーレイ Mixer フィルターでは、DirectDraw 3 サーフェスと DirectDraw 5 サーフェスが使用されます。 ビデオ ミキシング レンダラー 7 (Windows XP のみ) は DirectDraw 7 サーフェスを使用します。 ビデオ ミキシング レンダラー 9 と拡張ビデオ レンダラーでは、最新の Microsoft Direct3D API が使用されます。 他の DirectX API を使用してDirectShow アプリケーションを作成する必要はありませんが、それらを組み合わせることができます。

DirectShowは Microsoft ActiveMovie とどのように関連していますか?

ActiveMovie は、DirectShowの元の名前でした。 ActiveMovie という用語は使用されなくなりました。

GraphEdit ユーティリティのソース コードは使用できますか? GraphEdit は再配布できますか?

いいえ。ソースは使用できず、Graphedt.exeは再頒布可能ではありません。

DMO は DirectShow フィルターを置き換えますか?

Microsoft DirectX Media Objects (DTO) は、DirectShow アプリケーションで使用できます。 エンコーダー、デコーダー、エフェクトの場合は、DirectShow フィルターではなくDMOを記述することをお勧めします。 (注: デコーダーで DirectX ビデオ アクセラレータを使用する場合は、フィルターとして実装する必要があります)。その他の目的では、DirectShow フィルターの方が適切な場合があります。 DMO の詳細については、「 DirectX メディア オブジェクト」を参照してください。

Windows メディア プレーヤーでAVIフォーマットファイルを再生しています。 私はオーディオを聞くことができますが、代わりにビデオがないようです、私はちょうど黒を見る。 理由

おそらく、ファイルは、システムに存在しないコーデックでエンコードされました。 AVI ファイル形式は一般的ですが、AVI ファイルはさまざまな圧縮形式 (コーデック) で作成できます。 サポートされていないコーデックを使用する AVI ファイルを再生しようとすると、オーディオ コンポーネントが読み上げられる可能性がありますが、ビデオは黒い画面として表示されるか、画面の内容は変更されません。

Note

Windows メディア プレーヤーは、コーデックがシステムに存在しない場合に、コーデックのダウンロードとインストールを試みることがよくあります。

 

アプリケーション操作方法ビルドしますか? 必要なライブラリとヘッダー ファイル

ビルド環境の設定を参照してください。

GraphEdit には、文書化されていないフィルターが多数表示されます。 これらのフィルターとは

GraphEdit は、システムに登録されているすべてのフィルターをフィルター カテゴリに列挙します。 これには、サード パーティ製アプリケーションによってインストールされたフィルターや、Windows Media や NetMeeting などの他の Microsoft テクノロジによってインストールされたフィルターが含まれる場合があります。 また、一部のDirectShow フィルターはコーデックまたはハードウェア デバイスのラッパーとして機能し、各コーデックまたはデバイスは個別のフィルターとして表示されます。 Microsoft H.263 ビデオ コーデックは NetMeeting によって使用され、DirectShowではサポートされなくなりました。 詳細については、「 デバイスとフィルターの列挙」を参照してください。

カスタム グラフをプログラムで作成する際に問題が発生しています。

最初に、GraphEdit を使用してフィルター グラフを構築してみてください。 このツールを使用すると、多くの可能性をすばやくシミュレートできます。 GraphEdit は、ソース コードを使用してグラフをビルドする前に、グラフをテストするのに常に最適な場所です。

グラフの作成の詳細については、次の記事を参照してください。

特定のコンピューターにDirectShowがインストールされているかどうかを検出するにはどうすればよいですか?

CoCreateInstance を呼び出して、フィルター Graph マネージャーのインスタンスを作成します。 この呼び出しが成功すると、DirectShowがコンピューターにインストールされます。 この処理方法を、次のコードで示します。

IGraphBuilder *pGraph;

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

プロパティ ページを表示せずにフィルターの設定を変更操作方法。

ほとんどのフィルターでは、フィルターにプロパティを設定するための 1 つ以上のインターフェイスが公開されます。 該当するフィルターについては、参照ページを参照してください。 (「DirectShow フィルター」を参照してください)。

GraphEdit でフィルターをテストできますか?

フィルターの開発中に、GraphEdit はフィルター間の接続を視覚化するのに役立ちます。 また、フィルターの機能を簡単にテストすることもできます。 ただし、堅牢なテスト プラットフォームとして意図されていません。

フィルターはどのような特権リングで実行されますか?

フィルターはリング 3 で実行されますが、一部のフィルターはリング 0 で実行されるストリーミング デバイスを制御します。 詳細については、「ハードウェア デバイスがフィルター Graphに参加する方法」を参照してください。

カーネル デバッガーを使用する必要がありますか?

これは、特定のプロジェクトによって異なります。 DirectX デバッグ ランタイム ライブラリをインストールすると、デバッグ ドライバーやその他のカーネル モード コンポーネントがインストールされ、アプリケーションによってこれらのコンポーネントのいずれかでデバッグ アサートが発生した場合、プロセスにカーネル デバッガーがアタッチされていない限り、マシンは自動的に再起動されます。

デバッガーでアプリケーションを実行すると、アプリケーションがクラッシュします。

一部のデコーダーは、アプリケーションがデバッガーにアタッチされている間は動作しないように設計されています。 デバッガーの外部でアプリケーションを実行してみてください。

DEFINE\_GUID マクロのしくみ

DEFINE_GUID マクロは、ソース コードで GUID 値への参照を宣言するextern問題を解決します。 たとえば、プロジェクトに Src1.cpp、Src2.cpp、Src3.cpp の 3 つのソース ファイルがあり、3 つのファイルすべてが定義した特定の GUID 値を使用しているとします。 GUID 値はプロジェクト内で 1 回だけ定義する必要があり、他のソース ファイルはそれに対する参照を宣言 extern する必要があります。 DEFINE_GUID マクロを使用すると、両方の目的で同じヘッダー ファイルを使用できます。 ヘッダー ファイルで、次のように GUID を宣言します。

DEFINE_GUID(CLSID_MyObject, 
0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);

(この例にゼロがある場合は、実際の GUID 値を配置します)。Guidgen.exe ユーティリティを使用して新しい GUID を作成し、 DEFINE_GUID 形式でヘッダー ファイルに貼り付けることができます。 GUID を参照するすべてのソース ファイルにこのヘッダー ファイルを含めます。 ソース ファイルの 1 つに、ヘッダー ファイルの前にヘッダー ファイル Initguid.h を含めます。 次に例を示します。

// Src1.cpp
#include <initguid.h>
#include "MyGuids.h"

// Src2.cpp
#include "MyGuids.h"

// Src3.cpp
#include "MyGuids.h"

Initguid.h ヘッダー ファイルが含まれていない場合は、 DEFINE_GUID マクロによって GUID 値への参照が作成 extern されます。 Initguid.h ヘッダー ファイルを含めると、 DEFINE_GUID マクロが再定義され、 GUID の 定義宣言DEFINE_GUID作成されます。

いずれかのソース ファイルに Initguid.h を含めなかった場合は、リンク エラー "未解決の外部シンボル" が表示されます。同じ GUID に Initguid.h を 2 回含める場合は、コンパイル エラー "redefinition; " が発生します。複数の初期化。これらのエラーを解決するには、Initguid.h が 1 回だけ含まれていることを確認します。 また、プリコンパイル済みヘッダー ファイル内に Initguid.h を含めないでください。これは、実質的にすべてのソース ファイルにプリコンパイル済みヘッダーが含まれるためです。

DirectShowの概要