次の方法で共有


グラフ ビルダーのキャプチャについて

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

ビデオまたはオーディオのキャプチャを実行するフィルター グラフは、 キャプチャ グラフと呼ばれます。 キャプチャ グラフは、多くの場合、ファイル再生グラフよりも複雑です。 アプリケーションでキャプチャ グラフを簡単に作成できるようにするために、DirectShow には、Capture Graph Builder と呼ばれるヘルパー オブジェクトが用意されています。 Capture Graph Builder は、キャプチャ グラフを構築および制御するためのメソッドを含む ICaptureGraphBuilder2 インターフェイスを公開します。 次の図は、グラフ ビルダーのキャプチャと ICaptureGraphBuilder2 インターフェイスを 示しています。

キャプチャ グラフ ビルダーを使用する

まず、CoCreateInstance を呼び出して、Capture Graph Builder と Filter Graph Manager の新しいインスタンスを作成します。 次に、フィルター グラフ マネージャーの IGraphBuilder インターフェイスへのポインターを使用して ICaptureGraphBuilder2::SetFiltergraph を呼び出して、Capture Graph Builder を 初期化します。 このプロセスを説明する図を次に示します。

キャプチャ グラフ ビルダーの初期化

次のコードは、これらの手順を実行するヘルパー関数を示しています。

HRESULT InitCaptureGraphBuilder(
  IGraphBuilder **ppGraph,  // Receives the pointer.
  ICaptureGraphBuilder2 **ppBuild  // Receives the pointer.
)
{
    if (!ppGraph || !ppBuild)
    {
        return E_POINTER;
    }
    IGraphBuilder *pGraph = NULL;
    ICaptureGraphBuilder2 *pBuild = NULL;

    // Create the Capture Graph Builder.
    HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, 
        CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild );
    if (SUCCEEDED(hr))
    {
        // Create the Filter Graph Manager.
        hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER,
            IID_IGraphBuilder, (void**)&pGraph);
        if (SUCCEEDED(hr))
        {
            // Initialize the Capture Graph Builder.
            pBuild->SetFiltergraph(pGraph);

            // Return both interface pointers to the caller.
            *ppBuild = pBuild;
            *ppGraph = pGraph; // The caller must release both interfaces.
            return S_OK;
        }
        else
        {
            pBuild->Release();
        }
    }
    return hr; // Failed
}

ビデオ キャプチャに関するこのセクションでは、キャプチャ グラフ ビルダーを使用してキャプチャ グラフを作成していることを前提としています。 ただし、IGraphBuilder メソッドを使用してキャプチャ グラフを完全に構築することはできます。 ただし、これは高度なトピックと見なされ、Graph Builder のキャプチャ メソッドが推奨されます。 詳細については、「 高度なキャプチャ トピック」を参照してください。

DirectShow でのビデオ キャプチャについて