Bagikan melalui


Membangun Grafik Filter VMR-9

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Pengambilan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine , dan Pengambilan Audio/Video di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Karena Filter Video Mixing Renderer 9 (VMR-9) bukan perender video default, aplikasi yang menggunakan VMR-9 harus secara eksplisit menambahkannya ke grafik dan menyambungkannya. Bagian ini menyajikan dua pendekatan berbeda untuk membangun grafik filter dengan VMR-9.

Menggunakan Capture Graph Builder

Capture Graph Builder adalah objek pembantu untuk membangun grafik filter kustom. Anda dapat menggunakannya untuk membangun grafik VMR-9 sebagai berikut:

  1. Buat dan inisialisasi Capture Graph Builder, seperti yang dijelaskan dalam topik Tentang Capture Graph Builder.

  2. Panggil CoCreateInstance untuk membuat VMR-9:

    IBaseFilter *pVmr = NULL;
    hr = CoCreateInstance(CLSID_VideoMixingRenderer9, 0, 
        CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pVmr);
    
  3. Panggil IFilterGraph::AddFilter pada Filter Graph Manager untuk menambahkan VMR-9 ke grafik filter:

    hr = pGraph->AddFilter(pVmr, L"VMR9");
    
  4. Panggil IGraphBuilder::AddSourceFilter untuk menambahkan filter sumber untuk file video:

    IBaseFilter *pSource;
    hr = pGraph->AddSourceFilter(L"C:\\Example.avi", L"Source1", &pSource);
    
  5. Panggil metode ICaptureGraphBuilder2::RenderStream untuk merender aliran video ke VMR:

    hr = pBuild->RenderStream(0, 0, pSource, 0, pVmr);  
    
  6. Secara opsional, panggil RenderStream lagi untuk merender aliran audio:

    hr = pBuild->RenderStream(0, &MEDIATYPE_Audio, pSource, 0, NULL);
    

Anda dapat mencampur beberapa aliran video dengan memanggil AddSourceFilter dan RenderStream untuk setiap file sumber.

Menggunakan Filter Graph Manager

Jika Anda lebih suka tidak menggunakan Capture Graph Builder, Anda dapat membuat grafik VMR-9 hanya menggunakan metode pada Filter Graph Manager, sebagai berikut:

  1. Buat VMR-9 dan tambahkan ke grafik, seperti yang ditunjukkan pada prosedur sebelumnya.
  2. Gunakan AddSourceFilter untuk menambahkan filter sumber untuk file video, seperti yang ditunjukkan pada prosedur sebelumnya.
  3. Jika Anda ingin merender audio, buat instans filter DirectSound Renderer dan tambahkan ke grafik filter.
  4. Gunakan metode IBaseFilter::EnumPins untuk menemukan pin output pada filter sumber. Lihat Menghitung pin untuk detailnya.
  5. Kueri Filter Graph Manager untuk antarmuka IFilterGraph2.
  6. Panggil IFilterGraph2::RenderEx dengan bendera AM_RENDEREX_RENDERTOEXISTINGRENDERERS. Panggilan ini merender pin output, hanya menggunakan filter perender yang sudah ada dalam grafik — dalam hal ini, VMR-9 dan DirectSound Renderer. Ini mencegah logika Intelligent Connect menambahkan perender video default ke grafik, yang akan membuat VMR-9 tidak terhubung.

Membangun Grafik dengan Capture Graph Builder