Bagikan melalui


Aliran Opsional

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

DMO dapat menunjuk beberapa aliran outputnya sebagai opsional. Aliran opsional menghasilkan data yang dapat dibuang aplikasi, baik sepenuhnya atau pada sampel sesekali. Misalnya, aliran opsional mungkin berisi informasi tambahan tentang aliran utama.

Untuk mengkueri apakah aliran bersifat opsional, panggil metode IMediaObject::GetOutputStreamInfo dan periksa parameter pdwFlags . Aliran opsional mengembalikan bendera DMO_OUTPUT_STREAMF_DISCARDABLE atau bendera DMO_OUTPUT_STREAMF_OPTIONAL. Bendera-bendera ini berarti hal yang hampir sama; satu perbedaan kecil di antara mereka akan segera dijelaskan.

Jika aliran bersifat opsional, klien dapat menginstruksikan DMO untuk membuang data dari aliran tersebut saat memproses output. Untuk melakukannya, panggil metode IMediaObject::P rocessOutput dan atur buffer output ke NULL untuk setiap aliran yang ingin Anda buang. (Buffer output ditentukan dalam anggota pBufferdari DMO_OUTPUT_DATA_BUFFER.) Atur juga bendera DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER di parameter dwFlags .

Untuk setiap aliran di mana penunjuk pBuffer adalah NULL, DMO akan mencoba membuang data. Jika aliran bersifat opsional, DMO dijamin akan membuang data. Jika aliran tidak opsional, DMO membuang data jika memungkinkan, tetapi tidak dijamin melakukannya. Jika tidak dapat membuang data, ia mengatur bendera DMO_OUTPUT_DATA_BUFFERF_INCOMPLETE. Jika Anda mengatur penunjuk pBuffer ke NULL tetapi tidak mengatur bendera DMO_PROCESS_OUTPUT_DISCARD_WHEN_NO_BUFFER, DMO tidak membuang data. Dalam hal ini, DMO akan menyangga output secara internal, atau hanya gagal dalam panggilan ProcessOutput .

Satu-satunya perbedaan fungsi antara bendera DMO_OUTPUT_STREAMF_OPTIONAL dan bendera DMO_OUTPUT_STREAMF_DISCARDABLE adalah sebagai berikut:

  • Bendera DMO_OUTPUT_STREAMF_OPTIONAL menunjukkan bahwa klien tidak perlu mengatur jenis media pada aliran tersebut. Namun, jika klien mulai memproses data tanpa mengatur jenis media untuk aliran tersebut, maka klien harus membuang data dari aliran tersebut selama seluruh durasi streaming. Jika Anda ingin membuang sampel secara selektif, maka Anda harus mengatur jenis media.
  • Bendera DMO_OUTPUT_STREAMF_DISCARDABLE menunjukkan bahwa, meskipun aliran bersifat opsional, bendera tersebut selalu memerlukan jenis media.

Langsung Hosting DMO