Untuk Menulis Sampel
[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.]
Ketika Anda telah mengidentifikasi dan mengonfigurasi input untuk file yang Anda tulis, Anda dapat mulai meneruskan sampel ke penulis. Anda harus meneruskan sampel dalam urutan waktu presentasi, jika memungkinkan, untuk membuat proses penulisan lebih efisien.
Sebelum meneruskan sampel apa pun, Anda harus mengatur penulis untuk menerimanya dengan memanggil IWMWriter::BeginWriting.
Untuk meneruskan sampel ke penulis, lakukan langkah-langkah berikut:
- Alokasikan buffer dan ambil pointer ke antarmuka INSSBuffer dengan memanggil IWMWriter::AllocateSample.
- Ambil alamat buffer yang dibuat di langkah 1 dengan memanggil INSSBuffer::GetBuffer.
- Salin data sampel Anda ke lokasi buffer, pastikan sampel yang diteruskan akan pas di buffer yang dialokasikan. Anda dapat menggunakan fungsi penyalinan memori apa pun untuk menyalin data Anda. Pilihan umum adalah memcpy, yang disertakan dalam pustaka run-time C standar.
- Perbarui jumlah data yang digunakan dalam buffer untuk mencerminkan ukuran sampel yang sebenarnya dengan memanggil INSSBuffer::SetLength.
- Teruskan antarmuka buffer ke penulis bersama dengan nomor input dan waktu sampel menggunakan metode IWMWriter::WriteSample . Semua sampel audio untuk input mewakili durasi konten yang sama, sehingga Anda dapat mencari tahu waktu sampel dengan menambahkan durasi sampel ke total yang sedang berjalan. Untuk video, Anda perlu menghitung waktu berdasarkan kecepatan bingkai.
WriteSample bekerja secara asinkron dan mungkin tidak selesai menulis data dari buffer sebelum aplikasi Anda siap untuk memanggil metode lagi. Oleh karena itu, penting untuk memanggil AllocateSample sekali untuk setiap panggilan ke WriteSample. Namun, Anda dapat merilis antarmuka INSSBuffer segera setelah memanggil WriteSample.
Setelah Anda selesai meneruskan sampel, panggil IWMWriter::EndWriting.
Catatan Penting bahwa sampel dari semua aliran dalam file diteruskan ke penulis dalam sinkronisasi satu sama lain. Artinya, jika memungkinkan Anda harus meneruskan sampel ke penulis dalam urutan waktu presentasi dalam toleransi sinkronisasi yang ditentukan dalam IWMWriterAdvanced::SetSyncTolerance. Hasil terbaik dicapai ketika data dikirimkan ke setiap aliran dalam satuan satu detik atau kurang.
Aliran juga harus berakhir pada waktu yang kira-kira sama. Misalnya, Anda tidak boleh menulis file dengan aliran audio yang panjangnya 45 detik dan streaming video yang panjangnya 50 detik. Jika Anda mengodekan file tersebut dengan input yang tidak diubah, beberapa data audio di akhir aliran akan dihilangkan (meskipun itu adalah aliran yang lebih pendek). Untuk membuat pengodean file berfungsi, Anda harus menambahkan keheningan 5 detik ke input audio sehingga satu aliran tidak berakhir beberapa detik sebelum yang lain. Tidak perlu untuk jenis aliran dengan sampel terputus-terputus, seperti aliran teks atau gambar, untuk di-padding dengan cara ini. Aliran perintah skrip juga harus mengikuti semua aturan ini.
Topik terkait