Menggunakan Pengecualian Timbal Balik untuk Aliran ASF
Konten ASF dapat berisi beberapa aliran yang saling eksklusif. Aliran ini tidak dapat dibaca secara bersamaan tetapi hanya satu dari mereka yang dibaca pada satu waktu. Misalnya, file dapat berisi sekumpulan aliran yang menyertakan konten yang sama yang dikodekan pada laju bit yang berbeda. Aliran yang digunakan ditentukan oleh bandwidth yang tersedia untuk aplikasi yang mengalirkan konten. Objek Pengecualian Timbal Balik ASF, yang merupakan bagian dari Objek Header, menyimpan informasi tentang grup aliran yang saling eksklusif.
Di Media Foundation, objek pengecualian timbal balik yang mengekspos antarmuka IMFASFMutualExclusion ada untuk setiap Objek Pengecualian Timbal Balik ASF. Objek profil menyimpan referensi ke semua objek pengecualian bersama.
Objek pengecualian bersama menyimpan informasi tentang grup aliran yang saling eksklusif sebagai rekaman. Objek pengecualian timbal balik dapat memiliki beberapa rekaman yang dapat digunakan untuk membuat skenario kompleks. Setiap rekaman berisi satu atau beberapa aliran yang tidak dapat hidup berdampingan dengan aliran di rekaman lain, dikelola oleh objek pengecualian timbal balik, tergantung pada jenis pengecualian timbal balik, seperti laju bit.
Contoh umum pengecualian timbal balik yang kompleks adalah file yang berisi tiga aliran audio dari konten yang sama pada berbagai laju bit di masing-masing dari tiga bahasa. Hanya satu dari sembilan aliran yang harus dimainkan pada satu waktu, tetapi ada dua jenis yang saling eksklusif: bahasa dan laju bit.
Untuk contoh ini, sembilan aliran diberi nomor aliran berikut:
- 1 - Bahasa 1, laju bit 1 2 - Bahasa 1, laju bit 2 3 - Bahasa 1, laju bit 3 4 - Bahasa 2, laju bit 1 5 - Bahasa 2, laju bit 2 6 - Bahasa 2, laju bit 3 7 - Bahasa 3, laju bit 1 8 - Bahasa 3, laju bit 2 9 - Bahasa 3, laju bit 3
Skenario ini dapat diimplementasikan dengan menggunakan empat objek pengecualian bersama berikut:
- Objek pengecualian timbal balik pertama mencakup aliran 1, 2, dan 3, saling eksklusif dengan laju bit. Setiap aliran memiliki catatannya sendiri.
- Objek pengecualian timbal balik kedua mencakup aliran 4, 5, dan 6, saling eksklusif dengan laju bit. Setiap aliran memiliki catatannya sendiri.
- Objek pengecualian timbal balik ketiga mencakup 7, 8, dan 9, saling eksklusif dengan laju bit. Setiap aliran memiliki catatannya sendiri.
- Objek pengecualian timbal balik keempat berisi tiga rekaman, yang pertama termasuk aliran 1, 2, dan 3; yang kedua termasuk aliran 4, 5, dan 6; dan yang ketiga termasuk aliran 7, 8, dan 9. Catatan ini saling eksklusif berdasarkan bahasa.
Saat memutar file yang dibuat dengan cara ini, aplikasi streaming memilih bahasa terlebih dahulu karena cenderung tidak berubah di tengah presentasi dan kemudian memilih laju bit.
Pembuatan dan Konfigurasi Objek Pengecualian Timbal Balik
Daftar berikut ini meringkas proses konfigurasi objek pengecualian bersama:
- Buat objek pengecualian timbal balik.
- Atur jenis pengecualian timbal balik.
- Konfigurasikan objek pengecualian timbal balik dengan menambahkan rekaman dan aliran terkait.
- Tambahkan objek pengecualian timbal balik ke profil.
Untuk membuat dan mengonfigurasi objek pengecualian timbal balik
Panggil IMFASFProfile::CreateMutualExclusion untuk membuat objek pengecualian timbal balik kosong.
Panggil IMFASFMutualExclusion::SetType untuk mengatur kriteria aliran yang saling eksklusif.
Aliran dapat saling eksklusif berdasarkan bahasa, laju bit, presentasi, dan kriteria kustom. Jenis direpresentasikan sebagai GUID. Untuk daftar konstanta ini, lihat GUID Jenis Pengecualian Timbal Balik ASF.
Panggil IMFASFMutualExclusion::AddRecord untuk menambahkan rekaman ke objek pengecualian timbal balik.
Metode ini menambahkan catatan kosong dan menetapkan indeks rekaman yang dimulai dengan nol.
Panggil IMFASFMutualExclusion::AddStreamForRecord untuk menambahkan nomor aliran ke rekaman yang ditentukan oleh indeks rekaman.
Setiap rekaman mencakup satu atau beberapa aliran. Setiap aliran dalam rekaman saling eksklusif dari semua aliran di setiap rekaman lainnya. Untuk mendapatkan jumlah aliran dalam rekaman, panggil IMFASFMutualExclusion::GetStreamsForRecord dengan menentukan indeks rekaman.
Untuk menghapus aliran dari rekaman, panggil IMFASFMutualExclusion::RemoveStreamFromRecord dan tentukan indeks rekaman dan nomor aliran.
Panggil IMFASFProfile::AddMutualExclusion untuk menambahkan objek pengecualian timbal balik yang dikonfigurasi ke profil.
Menghitung Objek Pengecualian Timbal Balik dalam Profil
Jika IMFASFProfile::AddMutualExclusion berhasil, imFASFProfile akan menetapkan indeks ke objek yang ditentukan, dimulai dari nol.
Untuk menghitung objek pengecualian timbal balik yang terkait dengan profil, panggil IMFASFProfile::GetMutualExclusionCount dan loop melalui daftar dengan memanggil IMFASFProfile::GetMutualExclusion. Indeks pengecualian timbal balik berurutan dan berkisar antara 0 dan satu kurang dari jumlah aliran yang diambil oleh GetMutualExclusionCount.
Objek pengecualian timbal balik dihapus dari profil dengan memanggil IMFASFProfile::RemoveMutualExclusion. Profil menetapkan ulang indeks pengecualian timbal balik sehingga berurutan dimulai dengan nol. Ini menimpa indeks yang disimpan sebelumnya, yang tidak lagi valid setelah memanggil metode ini. Ini merilis rekaman aliran pengecualian timbal balik terkait.
Menghapus Rekaman dalam Objek Pengecualian Timbal Balik
Untuk menghapus rekaman dari objek pengecualian timbal balik, panggil IMFASFMutualExclusion::RemoveRecord. Jika metode ini berhasil, objek pengecualian timbal balik mengindeks rekaman yang tersisa sehingga berurutan dimulai dengan nol. Aplikasi harus menghitung catatan untuk memastikan indeks yang benar untuk setiap rekaman. Untuk melakukannya, panggil IMFASFMutualExclusion::GetRecordCount dan ulangi rekaman dengan memanggil IMFASFMutualExclusion::GetStreamsForRecord.
Menghapus rekaman dengan indeks tertinggi tidak berpengaruh pada indeks lain.
Memodifikasi Objek Pengecualian Timbal Balik
Untuk mengubah konfigurasi objek pengecualian timbal balik di profil, aplikasi harus mengganti objek pengecualian timbal balik yang ada dengan objek lain yang berisi pengaturan baru.
Untuk mengubah konfigurasi objek pengecualian timbal balik di profil
Hitung objek pengecualian timbal balik di profil untuk mendapatkan objek yang perlu diubah.
Panggil IMFASFMutualExclusion::Clone untuk mengkloning objek pengecualian bersama.
Konfigurasikan objek kloning sesuai kebutuhan.
Panggil IMFASFProfile::RemoveMutualExclusion untuk menghapus objek pengecualian timbal balik lama dari profil.
Panggil IMFASFProfile::AddMutualExclusion untuk menambahkan objek pengecualian timbal balik yang diperbarui ke profil.
Topik terkait