Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Setiap file ASF berisi satu atau beberapa aliran. Objek Profil ASF mewakili kumpulan aliran ASF. Untuk pengodean ASF, Anda harus membuat dan mengonfigurasi aliran yang ingin Anda enkode.
Aplikasi dapat melakukan tugas berikut dengan objek profil ASF:
- Menambahkan atau menghapus aliran.
- Mendapatkan pengaturan konfigurasi aliran.
- Mengonfigurasi ekstensi payload.
- Tambahkan, hapus, atau ubah objek pengecualian bersama ASF.
Topik ini berisi bagian berikut.
- Membuat Aliran Baru
- Menetapkan Nomor Aliran
- Mengatur Nilai Wadah Bocor
- Ekstensi Payload
- Menambahkan Stream ke Profil
- Topik terkait
Membuat Aliran Baru
Objek profil ASF harus berisi pengaturan konfigurasi untuk setidaknya satu aliran ASF. Setiap aliran diwakili oleh objek konfigurasi aliran, yang mengekspos antarmuka IMFASFStreamConfig . Informasi dalam objek konfigurasi aliran sesuai dengan Objek Properti Aliran dan Objek Properti Aliran yang Diperluas di header file ASF. (Lihat Struktur File ASF.)
Untuk menambahkan aliran ke profil ASF, lakukan langkah-langkah berikut:
- Buat objek konfigurasi aliran kosong.
- Konfigurasikan aliran sesuai dengan persyaratan aplikasi.
- Tambahkan aliran ke profil.
Untuk membuat aliran untuk profil, panggil IMFASFProfile::CreateStream untuk membuat objek konfigurasi aliran kosong dan menerima penunjuk di parameter ppIStream. CreateStream perlu mengetahui jenis aliran yang akan dibuat. Jenis aliran yang paling umum digunakan dalam file ASF adalah aliran audio dan video. Di Media Foundation, jenis aliran ditandai oleh objek jenis media yang mengekspos antarmuka IMFMediaType . Jenis utama jenis media menentukan kategori aliran media digital, seperti audio atau video. Subjenis menentukan format jenis utama. Jenis media awal yang diatur oleh CreateStream dapat diubah dengan menggunakan objek konfigurasi uap. Untuk mengambil jenis media untuk aliran, panggil IMFASFStreamConfig::GetMediaType atau untuk mengambil panggilan jenis utama IMFASFStreamConfig::GetStreamType. Jenis media awal untuk aliran dapat diganti dengan jenis media baru yang dikonfigurasi dengan memanggil IMFASFStreamConfig::SetMediaType.
Jika aplikasi membuat profil dari deskriptor presentasi yang valid dengan memanggil MFCreateASFProfileFromPresentationDescriptor. Fungsi ini secara otomatis mengatur objek konfigurasi aliran untuk setiap aliran dan mengaturnya di profil. Jenis media aliran diatur berdasarkan deskriptor aliran yang terkait dengan deskriptor presentasi.
Menetapkan Nomor Aliran
Aliran dari semua jenis harus diberi nomor streaming. Nomor streaming tidak perlu berurutan tetapi harus dalam kisaran 1 hingga 127. Untuk menetapkan nomor aliran, panggil IMFASFStreamConfig::SetStreamNumber. Untuk mendapatkan panggilan nomor aliran, IMFASFStreamConfig::GetStreamNumber.
Catatan
Nomor streaming berbeda dari indeks aliran, yang Anda gunakan saat mendapatkan streaming di profil dengan menggunakan IMFASFProfile::GetStream. Indeks aliran adalah angka yang ditetapkan ke aliran oleh objek profil. Indeks aliran berkisar antara 0 dan satu kurang dari jumlah aliran yang diambil oleh IMFASFProfile::GetStreamCount. Anda juga bisa mendapatkan streaming dari profil dengan nomor streaming dengan memanggil IMFASFProfile::GetStreamByNumber.
Mengatur Nilai Wadah Bocor
Setiap objek konfigurasi aliran yang mewakili aliran harus memiliki parameter wadah kebocoran terkait, laju bit, dan nilai jendela buffer.
Nilai-nilai ini tersedia untuk aplikasi melalui atribut MF_ASFSTREAMCONFIG_LEAKYBUCKET1 dan atribut MF_ASFSTREAMCONFIG_LEAKYBUCKET2. Untuk pengodean file, nilai aktual bergantung pada jenis pengodean dan diputuskan oleh encoder. Jika Anda sudah memiliki encoder yang dikonfigurasi dan jenis output diatur pada encoder, aplikasi harus mengkueri encoder untuk parameter wadah bocor dan mengatur nilai dalam atribut ini.
Jika Anda menggunakan komponen lapisan alur dan mengonfigurasi aliran untuk sink media ASF, kemungkinan besar, Anda tidak memiliki encoder yang dikonfigurasi. Dalam hal ini, Anda harus mengkueri negosiasi jenis pasca-media encoder dan menetapkan nilai yang diperbarui di properti MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET penyimpanan properti sink media ASF. Penyimpanan properti pengodean diambil melalui objek ContentInfo yang terkait dengan profil. Nilai yang diperbarui tercermin dalam nilai atribut wadah kebocoran aliran secara otomatis. Untuk informasi umum tentang wadah bocor dan cara mendapatkan nilai wadah bocor dari encoder, lihat Model Buffer Wadah Bocor.
Ekstensi Payload
Data media untuk aliran ditambahkan ke Objek Data ASF sebagai Sampel Media oleh Multiplexer ASF. Sampel media ini dapat berisi data ekstensi payload: data kode waktu SMPTE, rasio aspek piksel non-persegi, durasi sampel, dan jika sampel berisinya, bingkai kunci video. Untuk daftar jenis ekstensi payload yang didukung, lihat GUID Ekstensi Payload ASF.
Aliran harus dikonfigurasi untuk menerima ekstensi payload sehingga selama pembuatan sampel multiplexer dapat menambahkan data tambahan ke setiap sampel untuk aliran tersebut.
Untuk mendapatkan jumlah total ekstensi payload yang ditetapkan pada aliran, panggil IMFASFStreamConfig::GetPayloadExtensionCount lalu hitung daftar dengan memanggil IMFASFStreamConfig::GetPayloadExtension. Untuk menambahkan ekstensi payload untuk aliran, panggil IMFASFStreamConfig::AddPayloadExtension. Ini akan menambahkan data tambahan ke sampel media individual yang dihasilkan untuk aliran.
Untuk menghapus ekstensi payload yang ada yang terkait dengan aliran, panggil IMFASFStreamConfig::RemoveAllPayloadExtensions.
Menambahkan Stream ke Profil
Setelah aliran dikonfigurasi, panggil IMFASFProfile::SetStream untuk menambahkan aliran ke profil.
Untuk menghapus aliran yang ada di profil, panggil IMFASFProfile::RemoveStream.
Profil yang dikonfigurasi harus diatur pada objek ContentInfo dengan memanggil IMFASFContentInfo::SetProfile. Jika membuat perubahan pada aliran yang ada, Anda harus menambahkannya lagi ke profil dan mengatur profil pada objek ContentInfo.
Topik terkait