Bagikan melalui


Intelligent Connect

[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.]

Intelligent Connect adalah mekanisme yang digunakan Filter Graph Manager untuk membangun grafik filter. Ini terdiri dari beberapa algoritma terkait yang memilih filter dan menambahkannya ke grafik filter.

Baca topik ini jika Anda mengalami masalah dalam membangun grafik filter tertentu dan ingin memecahkan masalah, atau jika Anda menulis filter Anda sendiri dan ingin membuatnya tersedia untuk pembuatan grafik otomatis.

Intelligent Connect melibatkan metodeIGraphBuilderberikut:

IGraphBuilder::AddSourceFilter

Metode IGraphBuilder::AddSourceFilter menambahkan filter sumber yang dapat merender file tertentu. Pertama terlihat di registri dan kecocokan dengan protokol (seperti https://), ekstensi nama file, atau sekumpulan byte pemeriksaan yang telah ditentukan, yang merupakan byte pada offset tertentu dalam file yang cocok dengan pola tertentu. Untuk detailnya, lihat Mendaftarkan Jenis File Kustom. Dengan asumsi bahwa metode menemukan filter sumber yang sesuai, metode tersebut kemudian membuat instans filter tersebut, menambahkannya ke grafik, dan memanggil metode IFileSourceFilter::Load filter dengan nama file.

IGraphBuilder::Render

Metode IGraphBuilder::Render membangun sub bagian dari grafik. Ini dimulai dari pin output yang tidak terhubung dan berfungsi di hilir, menambahkan filter baru sesuai kebutuhan. Filter awal harus sudah ada di grafik. Pada setiap langkah, metode Render mencari filter yang dapat tersambung ke filter sebelumnya. Aliran dapat bercabang jika filter penghubung memiliki beberapa pin output. Pencarian berhenti ketika setiap aliran memiliki perender. Jika metode Render macet, metode tersebut mungkin mencadangkan dan mencoba lagi, menggunakan sekumpulan filter yang berbeda.

Untuk menyambungkan setiap pin output, metode Render melakukan hal berikut:

  1. Jika pin mendukung antarmukaIStreamBuilder, Filter Graph Manager mendelegasikan seluruh proses ke metode IStreamBuilder::Render pin. Dengan mengekspos antarmuka ini, pin bertanggung jawab untuk membangun sisa grafik, ke perender. Namun, sangat sedikit pin yang mendukung antarmuka ini.

  2. Filter Graph Manager mencoba menggunakan filter yang di-cache dalam memori, jika ada. Selama proses Intelligent Connect, Filter Graph Manager dapat menyimpan filter dari langkah-langkah sebelumnya dalam proses. (Juga, lihat Dynamic Graph Building.)

  3. Jika grafik filter berisi filter apa pun dengan pin input yang tidak tersambung, Filter Graph Manager akan mencobanya berikutnya. Anda dapat memaksa metodeRender untuk mencoba filter tertentu dengan menambahkan filter tersebut ke grafik sebelum memanggil Render.

  4. Mulai dari Windows 7, DirectShow memiliki daftar filter pilihan untuk subjenis media tertentu. Jika ada filter pilihan untuk jenis media yang sedang dirender, Filter Graph Manager mencoba filter tersebut berikutnya. Aplikasi dapat memodifikasi daftar filter pilihan dengan menggunakan antarmukaIAMPluginControl. Perubahan pada daftar memengaruhi proses aplikasi saat ini, dan dibuang setelah proses berakhir.

  5. Terakhir, jika tidak ada filter yang sesuai yang ditemukan, Filter Graph Manager mencari registri, menggunakan metodeIFilterMapper2::EnumMatchingFilters. Ini mencoba mencocokkan jenis media pilihan pin output dengan jenis media yang tercantum dalam registri.

    Setiap filter terdaftar dengan berjasa, nilai numerik yang menunjukkan seberapa disukai filter, relatif terhadap filter lain. Metode EnumMatchingFilters mengembalikan filter dalam urutan berjasa, dengan manfaat minimum MERIT_DO_NOT_USE + 1. Ini mengabaikan filter dengan manfaat MERIT_DO_NOT_USE atau kurang. Filter juga dikelompokkan ke dalam kategori, yang ditentukan oleh GUID. Kategori itu sendiri memiliki prestasi, dan metode enumMatchingFilters mengabaikan kategori apa pun dengan manfaat MERIT_DO_NOT_USE atau kurang, bahkan jika filter dalam kategori tersebut memiliki nilai prestasi yang lebih tinggi.

    Mulai dari Windows 7, DirectShow memiliki daftar filter yang diblokir untuk subjenis media tertentu. Filter Graph Manager melewati filter pada daftar ini. Aplikasi dapat mengubah daftar filter yang diblokir dengan menggunakan antarmukaIAMPluginControl. Perubahan pada daftar ini memengaruhi proses aplikasi saat ini, dan dibuang setelah proses berakhir.

Untuk meringkas, metode Render mencoba filter dalam urutan berikut:

  1. GunakanIStreamBuilder .
  2. Coba filter yang di-cache.
  3. Coba filter dalam grafik.
  4. Windows 7 atau yang lebih baru: Coba filter pilihan untuk jenis media, jika ada.
  5. Cari filter di registri.

IGraphBuilder::RenderFile

Metode IGraphBuilder::RenderFile membangun grafik pemutaran default dari nama file. Secara internal, metode ini menggunakan AddSourceFilter untuk menemukan filter sumber yang benar, dan Render untuk membangun grafik lainnya.

IGraphBuilder::Connect

Metode IGraphBuilder::Connect menyambungkan pin output ke pin input. Metode ini menambahkan filter perantara jika diperlukan, menggunakan variasi algoritma yang dijelaskan untuk metodeRender:

  1. Coba koneksi langsung antara filter, tanpa filter perantara.
  2. Coba filter yang di-cache.
  3. Coba filter dalam grafik.
  4. Windows 7 atau yang lebih baru: Coba filter pilihan untuk jenis media, jika ada.
  5. Cari filter di registri.

Kategori Filter

Merit

Simulating Graph Building dengan GraphEdit

Membangun Grafik Filter