Aracılığıyla paylaş


Yakalama Grafiği Oluşturucusu hakkında

[DirectShow bu sayfayla ilişkilendirilmiş özellik eski bir özelliktir. Yerine MediaPlayer, IMFMediaEngineve Media Foundation 'de Ses/Video Yakalamaalmıştır. Bu özellikler Windows 10 ve Windows 11 için iyileştirilmiştir. Microsoft, mümkün olduğunda, yeni kodun DirectShowyerine, MediaPlayer, IMFMediaEngine ve Media Foundation'daki Audio/Video Capture kullanmasını kesinlikle önerir. Microsoft, mümkünse yeni API'leri kullanmak için eski API'leri kullanan mevcut kodun yeniden yazılmasını önerir.]

Video veya ses yakalama gerçekleştiren bir filtre grafı, yakalama grafı olarak adlandırılır. Yakalama grafikleri genellikle dosya çalma grafiklerinden daha karmaşıktır. Uygulamaların yakalama grafikleri oluşturmasını kolaylaştırmak için DirectShow, Yakalama Grafı Oluşturucusu adlı bir yardımcı nesne sağlar. Capture Graph Builder, yakalama grafı oluşturma ve denetleme yöntemlerini içeren ICaptureGraphBuilder2 arabirimini kullanıma sunar. Aşağıdaki diyagramda Capture Graph Builder ve ICaptureGraphBuilder2 arabirimi gösterilmektedir.

Yakalama grafı oluşturucusu

Capture Graph Builder ve Filter Graph Manager'ın yeni örneklerini oluşturmak için CoCreateInstance'ı çağırarak başlayın. Ardından, Filter Graph Manager'ın IGraphBuilder arabirimine bir işaretçiyle ICaptureGraphBuilder2::SetFiltergraph çağırarak Capture Graph Builder'ı başlatın. Aşağıdaki diyagramda bu işlem gösterilmektedir.

Yakalama grafı oluşturucusunu başlatma

Aşağıdaki kodda aşağıdaki adımları gerçekleştirmek için bir yardımcı işlev gösterilmektedir:

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
}

Video yakalamayla ilgili bu bölüm boyunca yakalama grafiğini oluşturmak için Yakalama Grafı Oluşturucusu'nu kullandığınız varsayılır. Ancak, IGraphBuilder yöntemlerini kullanarak yakalama graflarını tamamen oluşturmak mümkündür. Ancak bu, gelişmiş bir konu olarak kabul edilir ve Capture Graph Builder yöntemleri tercih edilir. Daha fazla bilgi için bkz. Gelişmiş Yakalama Konuları.

DirectShow 'da Video Yakalama Hakkında