Sumber Langsung
[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.]
Sumber langsung, juga disebut sumber dorong , menerima data secara real time. Contohnya termasuk pengambilan video dan siaran jaringan. Secara umum, sumber langsung tidak dapat mengontrol laju saat data tiba.
Filter dianggap sebagai sumber langsung jika salah satu dari berikut ini benar:
- Filter mengembalikan bendera AM_FILTER_MISC_FLAGS_IS_SOURCE dari metodeIAMFilterMiscFlags::GetMiscFlags, DAN setidaknya salah satu pin outputnya mengekspos antarmukaIAMPushSource.
- Filter mengekspos antarmukaIKsPropertySet dan memiliki pin tangkapan (PIN_CATEGORY_CAPTURE). Lihat Set Properti Pin untuk informasi selengkapnya.
Jika filter sumber langsung menyediakan jam, Manajer Grafik Filter akan lebih memilih jam tersebut saat memilih jam referensi grafik. Lihat Jam Referensi untuk informasi selengkapnya.
Latensi
Latensi filter adalah jumlah waktu yang dibutuhkan filter untuk memproses sampel. Untuk sumber langsung, latensi ditentukan oleh ukuran buffer yang digunakan untuk menyimpan sampel. Misalnya, grafik filter memiliki sumber video dengan latensi 33 milidetik (mdtk) dan sumber audio dengan latensi 500 mdtk. Setiap bingkai video tiba di perender video sekitar 470 md sebelum sampel audio yang cocok mencapai perender audio. Kecuali grafik mengimbangi perbedaannya, audio dan video tidak akan disinkronkan.
Sumber langsung dapat disinkronkan melalui antarmukaIAMPushSource. Filter Graph Manager tidak menyinkronkan sumber langsung kecuali aplikasi mengaktifkan sinkronisasi dengan memanggil metode IAMGraphStreams::SyncUsingStreamOffset. Jika sinkronisasi diaktifkan, Filter Graph Manager meminta setiap filter sumber untuk IAMPushSource. Jika filter mendukung IAMPushSource, Filter Graph Manager memanggil IAMLatency::GetLatency untuk mengambil latensi filter yang diharapkan. (Antarmuka IAMPushSource mewarisi IAMLatency.) Dari nilai latensi gabungan, Manajer Grafik Filter menentukan latensi maksimum yang diharapkan dalam grafik. Kemudian memanggil IAMPushSource::SetStreamOffset untuk memberi setiap filter sumber offset aliran, yang ditambahkan filter ke stempel waktu yang dihasilkannya.
Metode ini ditujukan terutama untuk pratinjau langsung. Namun, perhatikan bahwa pin pratinjau pada perangkat penangkapan langsung (seperti kamera) tidak mengatur stempel waktu pada sampel yang dikirimkannya. Oleh karena itu, untuk menggunakan metode ini dengan perangkat penangkapan langsung, Anda harus melihat pratinjau dari pin pengambilan. Untuk informasi selengkapnya, lihat Filter Pengambilan Video DirectShow.
Saat ini antarmukaIAMPushSourcedidukung oleh filter VFW Capture dan filter Audio Capture.
Pencocokan Laju
Jika filter perender menjadwalkan sampel menggunakan satu jam referensi, tetapi filter sumber menghasilkannya menggunakan jam yang berbeda, gangguan dapat terjadi di pemutaran. Perender mungkin berjalan lebih cepat daripada sumbernya, menyebabkan celah dalam data. Atau mungkin berjalan lebih lambat dari sumbernya, menyebabkan sampel "bunch up", sampai pada titik tertentu grafik akan menghilangkan sampel. Biasanya, sumber langsung tidak dapat mengontrol tingkat produksinya, jadi sebaliknya perender harus mencocokkan tingkat dengan sumbernya.
Saat ini, hanya perender audio yang melakukan pencocokan laju, karena gangguan dalam pemutaran audio lebih terlihat daripada gangguan dalam video. Untuk melakukan pencocokan laju, perender audio harus memilih sesuatu yang akan cocok dengan tarif. Ini menggunakan algoritma berikut:
- Jika grafik tidak menggunakan jam referensi, perender audio tidak mencoba mencocokkan tarif. (Setiap kali grafik tidak memiliki jam referensi, sampel selalu dirender segera saat tiba.)
- Jika tidak, jika ada jam referensi untuk grafik, perender audio memeriksa apakah ada sumber langsung di hulu, menggunakan kriteria yang dijelaskan sebelumnya. Jika tidak, perender audio tidak cocok dengan tarif.
- Jika ada sumber langsung di hulu, dan sumber tersebut mengekspos antarmuka IAMPushSource pada pin outputnya, perender audio memanggil IAMPushSource::GetPushSourceFlags. Ini mencari salah satu bendera berikut:
- AM_PUSHSOURCECAPS_INTERNAL_RM. Bendera ini berarti filter sumber memiliki mekanisme pencocokan laju sendiri, sehingga perender audio tidak cocok dengan tarif.
- AM_PUSHSOURCECAPS_NOT_LIVE. Bendera ini berarti filter sumber bukan benar-benar sumber langsung, meskipun mengekspos antarmukaIAMPushSource. Oleh karena itu, perender audio tidak cocok dengan tarif.
- AM_PUSHSOURCECAPS_PRIVATE_CLOCK. Bendera ini berarti filter sumber menggunakan jam privat untuk menghasilkan stempel waktu. Dalam hal ini, perender audio cocok dengan laju terhadap stempel waktu. (Namun, jika sampel tidak memiliki stempel waktu, perender mengabaikan bendera ini.)
- Jika GetPushSourceFlags tidak mengembalikan bendera (nol), perilaku perender audio tergantung pada jam grafik dan apakah sampel memiliki stempel waktu:
- Jika perender audio bukan jam grafik, DAN sampel memiliki stempel waktu, perender audio cocok dengan laju terhadap stempel waktu.
- Jika sampel tidak memiliki stempel waktu, perender audio mencoba mencocokkan laju data audio masuk.
- Jika perender audio adalah jam grafik, perender audio mencoba mencocokkan laju data masuk.
Alasan untuk kasus terakhir adalah sebagai berikut: Jika perender audio adalah jam referensi, dan filter sumber menggunakan jam yang sama untuk menghasilkan stempel waktu, maka perender audio tidak dapat mencocokkan laju terhadap stempel waktu. Jika ya, akibatnya akan mencoba mencocokkan tarif dengan dirinya sendiri, yang dapat menyebabkan jam melayang. Oleh karena itu, dalam hal ini perender cocok dengan tingkat data audio masuk.
Topik terkait