Untuk Mengambil Sampel Media dengan Pembaca Sinkron

[Fitur yang terkait dengan halaman ini, Windows Media Format 11 SDK, adalah fitur warisan. Ini telah digantikan oleh Pembaca Sumber dan Penulis Sink. Pembaca Sumber dan Penulis Sink telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan Pembaca Sumber dan Penulis Sink alih-alih Windows Media Format 11 SDK, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Anda harus meminta setiap sampel satu per satu dari pembaca sinkron. Ini memberi Anda lebih banyak kontrol atas sampel yang Anda terima dan ketika Anda menerimanya.

Gunakan metode IWMSyncReader::GetNextSample untuk mengambil sampel. Anda sebagian besar perlu meneruskan pointer ke variabel yang akan diisi dengan informasi tentang sampel yang diambil sebagai parameter. Satu-satunya parameter input adalah wStreamNum. Jika Anda meneruskan nomor streaming, GetNextSample akan mengambil sampel berikutnya dengan nomor aliran yang ditentukan. Jika Anda meneruskan nol untuk wStreamNum, sampel berikutnya yang terjadi secara kronologis dalam file diambil.

Secara default, pembaca sinkron mengambil semua sampel dari output dalam file dalam urutan kronologis. Jika Anda memanggil GetNextSample dan tidak ada lagi sampel yang akan diperoleh, itu akan mengembalikan NS_E_NO_MORE_SAMPLES, yang merupakan kode kesalahan yang gagal. Oleh karena itu, saat pengodean, Anda cukup mengulang sampel hingga metode gagal.

Catatan

Untuk memastikan bahwa pembaca sinkron memberikan durasi sampel yang benar untuk streaming video, Anda harus terlebih dahulu mengonfigurasi output aliran. Panggil metode IWMSyncReader::SetOutputSetting untuk mengatur pengaturan g_wszVideoSampleDurations ke TRUE.

 

Contoh Kode

Contoh kode berikut menunjukkan cara menggunakan GetNextSample untuk mengambil semua sampel dalam file.

// Loop through all the samples in the file.
do
{
   // Get the next sample.
   hr = pSyncReader->GetNextSample(0,
                                   &pMyBuffer,
                                   &cnsSampleTime,
                                   &cnsSampleDuration,
                                   &dwFlags,
                                   &dwOutputNumber,
                                   NULL);

   if(SUCCEEDED(hr))
   {
      // TODO: Process the sample in whatever way is appropriate 
      // to your application. When finished, clean up.
      pMyBuffer->Release();
      pMyBuffer = NULL;
      cnsSampleTime     = 0;
      cnsSampleDuration = 0;
      dwFlags           = 0;
      dwOutputNumber    = 0;
   }
} 
while (SUCCEEDED(hr));

Antarmuka IWMSyncReader

Membaca File dengan Pembaca Sinkron