Intelligent Connect

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

Intelligent Connect は、フィルター グラフ マネージャーがフィルター グラフの作成に使用するメカニズムです。 フィルターを選択し、フィルター グラフに追加するいくつかの関連アルゴリズムで構成されています。

特定のフィルター グラフの作成に問題があり、問題のトラブルシューティングを行いたい場合、または独自のフィルターを作成して自動グラフ作成に使用できるようにする場合は、このトピックを参照してください。

Intelligent Connect には、次の IGraphBuilder メソッドが含まれます。

IGraphBuilder::AddSourceFilter

IGraphBuilder::AddSourceFilter メソッドは、指定したファイルをレンダリングできるソース フィルターを追加します。 最初に、レジストリを検索し、プロトコル (などhttps://)、ファイル名拡張子、または特定のパターンに一致するファイル内の特定のオフセットにあるバイトである事前に定義されたチェック バイトのセットと一致します。 詳細については、「 カスタム ファイルの種類の登録」を参照してください。 メソッドが適切なソース フィルターを見つけると仮定すると、そのフィルターのインスタンスを作成し、グラフに追加して、フィルターの IFileSourceFilter::Load メソッドをファイル名で呼び出します。

IGraphBuilder::Render

IGraphBuilder::Render メソッドは、グラフのサブセクションを作成します。 接続されていない出力ピンから始まり、ダウンストリームで動作し、必要に応じて新しいフィルターを追加します。 開始フィルターは既にグラフに含まれている必要があります。 各ステップで、 Render メソッドは前のフィルターに接続できるフィルターを検索します。 接続フィルターに複数の出力ピンがある場合、ストリームは分岐できます。 すべてのストリームにレンダラーがある場合、検索は停止します。 Render メソッドがスタックした場合は、別のフィルター セットを使用して、バックアップしてやり直す可能性があります。

各出力ピンを接続するために、 Render メソッドは次の処理を行います。

  1. ピンが IStreamBuilder インターフェイスをサポートしている場合、フィルター グラフ マネージャーはプロセス全体をピンの IStreamBuilder::Render メソッドに委任します。 このインターフェイスを公開することで、ピンはグラフの残りの部分をレンダラーまで構築する責任を負います。 ただし、このインターフェイスをサポートするピンはごくわずかです。

  2. フィルター グラフ マネージャーは、メモリにキャッシュされているフィルター (存在する場合) の使用を試みます。 インテリジェント接続プロセス全体を通じて、フィルター グラフ マネージャーは、プロセスの以前の手順のフィルターをキャッシュする場合があります。 (「 動的グラフの作成」も参照してください)。

  3. フィルター グラフに未接続の入力ピンを含むフィルターが含まれている場合、フィルター グラフ マネージャーは次にそれらを試みます。 Render メソッドを強制的に実行するには、Render を呼び出す前にそのフィルターをグラフに追加します。

  4. Windows 7 以降、DirectShow には、特定のメディア サブタイプに適したフィルターの一覧が含まれています。 レンダリングされるメディアの種類に対して優先フィルターがある場合、フィルター グラフ マネージャーはそのフィルターを次に試みます。 アプリケーションでは、 IAMPluginControl インターフェイスを使用して、優先フィルターの一覧を変更できます。 リストに対する変更は、アプリケーションの現在のプロセスに影響し、プロセスの終了後に破棄されます。

  5. 最後に、適切なフィルターが見つからない場合、Filter Graph Manager は IFilterMapper2::EnumMatchingFilters メソッドを 使用してレジストリを検索します。 レジストリに一覧表示されているメディアの種類に対して、出力ピンの優先メディアの種類を照合しようとします。

    各フィルタは、他のフィルタに対して、フィルタがどの程度好ましいかを示す数値である メリットに登録される。 EnumMatchingFilters メソッドは、MERIT_DO_NOT_USE + 1 の最小メリットを持つ、メリットの順序でフィルターを返します。 MERIT_DO_NOT_USE以下のメリットを持つフィルターを無視します。 フィルターは、GUID によって定義されるカテゴリにもグループ化されます。 カテゴリ自体にはメリットがあり、 EnumMatchingFilters メソッドは、そのカテゴリ内のフィルターのメリット値が高い場合でも、 MERIT_DO_NOT_USE 以下のメリットを持つカテゴリを無視します。

    Windows 7 以降、DirectShow には、特定のメディア サブタイプに対するブロックされたフィルターの一覧が含まれています。 フィルター グラフ マネージャーは、この一覧のフィルターをスキップします。 アプリケーションでは、 IAMPluginControl インターフェイスを使用して、ブロックされたフィルターの一覧を変更できます。 このリストに対する変更は、アプリケーションの現在のプロセスに影響し、プロセスの終了後に破棄されます。

要約すると、 Render メソッドは次の順序でフィルターを試行します。

  1. IStreamBuilder を使用します
  2. キャッシュされたフィルターを試します。
  3. グラフでフィルターを試します。
  4. Windows 7 以降: メディアの種類に適したフィルター (存在する場合) をお試しください。
  5. レジストリでフィルターを検索します。

IGraphBuilder::RenderFile

IGraphBuilder::RenderFile メソッドは、ファイル名から既定の再生グラフを構築します。 内部的には、このメソッドは AddSourceFilter を使用して正しいソース フィルターを見つけ、 Render を 使用してグラフの残りの部分を作成します。

IGraphBuilder::Connect

IGraphBuilder::Connect メソッドは、出力ピンを入力ピンに接続します。 このメソッドは、 Render メソッドで説明されているアルゴリズムのバリエーションを使用して、必要に応じて中間フィルターを追加します。

  1. 中間フィルターを使用しないフィルター間の直接接続を試します。
  2. キャッシュされたフィルターを試します。
  3. グラフでフィルターを試します。
  4. Windows 7 以降: メディアの種類に適したフィルター (存在する場合) をお試しください。
  5. レジストリでフィルターを検索します。

カテゴリのフィルター処理

メリット

Graph を使用したグラフ作成のシミュレートEdit

フィルター グラフの構築