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 saat membuat 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 metode IGraphBuilder berikut:
- IGraphBuilder::AddSourceFilter
- IGraphBuilder::Render
- IGraphBuilder::RenderFile
- IGraphBuilder::Connect
IGraphBuilder::AddSourceFilter
Metode IGraphBuilder::AddSourceFilter menambahkan filter sumber yang dapat merender file tertentu. Pertama terlihat di registri dan cocok 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 mungkin mencadangkan dan mencoba lagi, menggunakan sekumpulan filter yang berbeda.
Untuk menyambungkan setiap pin output, metode Render melakukan hal berikut:
Jika pin mendukung antarmuka IStreamBuilder , 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.
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.)
Jika grafik filter berisi filter apa pun dengan pin input yang tidak tersambung, Filter Graph Manager akan mencobanya berikutnya. Anda dapat memaksa metode Render untuk mencoba filter tertentu dengan menambahkan filter tersebut ke grafik sebelum memanggil Render.
Mulai dari Windows 7, DirectShow memiliki daftar filter pilihan untuk subtipe 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 antarmuka IAMPluginControl . Perubahan pada daftar memengaruhi proses aplikasi saat ini, dan dibuang setelah proses berakhir.
Terakhir, jika tidak ada filter yang sesuai yang ditemukan, Filter Graph Manager mencari registri, menggunakan metode IFilterMapper2::EnumMatchingFilters . Ini mencoba mencocokkan jenis media pilihan pin output dengan jenis media yang tercantum dalam registri.
Setiap filter terdaftar dengan manfaat, 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 manfaat, dan metode EnumMatchingFilters mengabaikan kategori apa pun dengan manfaat MERIT_DO_NOT_USE atau kurang, bahkan jika filter dalam kategori tersebut memiliki nilai merit yang lebih tinggi.
Mulai dari Windows 7, DirectShow memiliki daftar filter yang diblokir untuk subjenis media tertentu. Filter Graph Manager melompati filter pada daftar ini. Aplikasi dapat mengubah daftar filter yang diblokir dengan menggunakan antarmuka IAMPluginControl . Perubahan pada daftar ini memengaruhi proses aplikasi saat ini, dan dibuang setelah proses berakhir.
Untuk meringkas, metode Render mencoba memfilter dalam urutan berikut:
- Gunakan IStreamBuilder.
- Coba filter yang di-cache.
- Coba filter dalam grafik.
- Windows 7 atau yang lebih baru: Coba filter pilihan untuk jenis media, jika ada.
- 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 metode Render :
- Coba koneksi langsung antara filter, tanpa filter perantara.
- Coba filter yang di-cache.
- Coba filter dalam grafik.
- Windows 7 atau yang lebih baru: Coba filter pilihan untuk jenis media, jika ada.
- Cari filter di registri.
Topik terkait