Bagikan melalui


Menggunakan API Transcode

Topik ini menjelaskan cara menggunakan API transcode untuk mengodekan file media.

Gambaran Umum

Sebelum menggunakan API transcode, aplikasi harus memiliki informasi berikut:

  • Jalur atau URL ke file media yang ada yang akan dikodekan ulang.
  • Nama file output.
  • Jenis kontainer untuk file output, seperti MP4 atau Advanced Streaming Format (ASF).
  • Format pengodean. Informasi ini mencakup jenis media yang menjelaskan aliran audio dan video yang dikodekan.

Untuk menggunakan API transcode, aplikasi melakukan langkah-langkah berikut.

  1. Buat sumber media untuk membaca file sumber.
  2. Membuat profil transkode. Tambahkan atribut yang menjelaskan aliran audio, aliran video, dan kontainer file.
  3. Gunakan profil transkode untuk membuat topologi pengodean. (Untuk informasi selengkapnya tentang topologi, lihat Tentang Topologi.)
  4. Atur topologi pada Sesi Media.
  5. Mulai Sesi Media dan tunggu peristiwa MESessionEnded .

Sisa topik ini menjelaskan langkah-langkah ini secara lebih rinci.

Membuat Sumber Media

Sumber media adalah objek yang membaca dan mengurai file sumber. Untuk membuat sumber media, gunakan Pemecah Masalah Sumber. Anda dapat menemukan contoh kode dalam topik Menggunakan Pemecah Masalah Sumber.

Membuat Profil Transcode

Profil transkode menjelaskan format dan pengaturan yang digunakan untuk mengodekan file output. Profil transkode berisi tiga set atribut:

  • Atribut audio: Menjelaskan format audio target dan pengaturan encoder audio.
  • Atribut video: Menjelaskan format video target dan pengaturan encoder video.
  • Atribut kontainer: Tentukan jenis kontainer file, serta beberapa pengaturan pengodean global.

Untuk membuat profil transkode, panggil fungsi MFCreateTranscodeProfile . Fungsi ini mengembalikan penunjuk ke antarmuka IMFTranscodeProfile . Objek profil awal kosong; tidak berisi atribut. Langkah selanjutnya adalah menambahkan atribut yang menentukan profil.

Atribut Audio

Untuk menambahkan atribut untuk aliran audio, panggil IMFTranscodeProfile::SetAudioAttributes. Atribut ini menentukan bagaimana aliran audio dikodekan. Jika file output tidak akan berisi aliran audio, hilangkan atribut ini.

Atribut audio termasuk dalam dua kategori:

  • Atribut yang menentukan format aliran yang dikodekan
  • Atribut yang menentukan parameter pengodean lainnya.

Atribut format hanyalah atribut jenis media, seperti yang dijelaskan di bagian Jenis Media Audio. Set atribut format yang tepat tergantung pada encoder. (Lihat Format Media yang Didukung di Media Foundation.) Berikut adalah daftar atribut format audio umum:

Format Atribut Deskripsi
MF_MT_SUBTYPE Subjenisnya. Lihat GUID Subjenis Audio.
MF_MT_AUDIO_NUM_CHANNELS Jumlah saluran audio.
MF_MT_AUDIO_SAMPLES_PER_SECOND Jumlah sampel audio per detik.
MF_MT_AUDIO_BLOCK_ALIGNMENT Perataan blok.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND Jumlah rata-rata byte per detik (laju bit yang dikodekan).

 

Parameter pengodean berikut ditentukan.

Parameter Pengodean Deskripsi
MF_TRANSCODE_DONOT_INSERT_ENCODER Mencegah API transkode menyisipkan encoder untuk aliran audio.
MF_TRANSCODE_ENCODINGPROFILE Menentukan templat kesuaian perangkat. (Hanya berlaku untuk file ASF.)
MF_TRANSCODE_QUALITYVSSPEED Menentukan trade-off antara kualitas dan kecepatan pengodean.

 

Anda harus mengatur atribut format. Parameter pengodean bersifat opsional.

Salah satu cara untuk menemukan format yang kompatibel dengan encoder adalah dengan memanggil fungsi MFTranscodeGetAudioOutputAvailableTypes . Encoder yang diinginkan ditentukan oleh subjenis. Fungsi mengembalikan kumpulan jenis media untuk encoder tersebut. Anda dapat memilih jenis dari daftar dan menyalin atribut ke profil. Misalnya kode yang menggunakan pendekatan ini, lihat Tutorial: Mengodekan File WMA.

Atribut Video

Untuk menambahkan atribut untuk aliran video, panggil IMFTranscodeProfile::SetVideoAttributes. Atribut ini menentukan bagaimana aliran video dikodekan. Jika file output tidak akan berisi aliran video, hilangkan atribut ini.

Seperti atribut audio, atribut video termasuk dalam dua kategori:

  • Atribut yang menentukan format aliran yang dikodekan
  • Atribut yang menentukan parameter pengodean lainnya.

Atribut format adalah atribut jenis media, seperti yang dijelaskan di bagian Jenis Media Video. Berikut adalah daftar atribut format video umum:

Format Atribut Deskripsi
MF_MT_SUBTYPE Subjenisnya. Lihat GUID Subjenis Video.
MF_MT_FRAME_RATE Kecepatan bingkai.
MF_MT_FRAME_SIZE Ukuran bingkai.
MF_MT_AVG_BITRATE Laju bit rata-rata.
MF_MT_PIXEL_ASPECT_RATIO Rasio aspek piksel.

 

Parameter pengodean berikut ditentukan.

Parameter Pengodean Deskripsi
MF_TRANSCODE_DONOT_INSERT_ENCODER Mencegah API transkode menyisipkan encoder untuk aliran video.
MF_TRANSCODE_ENCODINGPROFILE Menentukan templat kesuaian perangkat. (Hanya berlaku untuk file ASF.)
MF_TRANSCODE_QUALITYVSSPEED Menentukan trade-off antara kualitas dan kecepatan pengodean.

 

Anda harus mengatur atribut format. Parameter pengodean bersifat opsional.

Atribut Kontainer

Atribut kontainer menentukan karakteristik tingkat file dari file output. Untuk mengatur atribut kontainer, panggil IMFTranscodeProfile::SetContainerAttributes. Atribut berikut didefinisikan.

Atribut Deskripsi
MF_TRANSCODE_ADJUST_PROFILE Menentukan pengaturan aliran yang akan digunakan untuk topologi transkode. Anda dapat mengatur bendera untuk menggunakan pengaturan sumber input atau menggunakan atribut aliran kustom.
MF_TRANSCODE_CONTAINERTYPE Menentukan format file file output, seperti MP4 atau ASF. Berdasarkan nilai ini, sink media yang sesuai ditambahkan ke topologi.
MF_TRANSCODE_SKIP_METADATA_TRANSFER Menentukan apakah metadata dari sumber disalin ke file output.
MF_TRANSCODE_TOPOLOGYMODE Menentukan apakah codec berbasis perangkat keras dapat digunakan selama transcoding.
MFT_FIELDOFUSE_UNLOCK_Attribute Membuka kodek yang memiliki batasan bidang penggunaan. Untuk informasi selengkapnya, lihat Bidang Pembatasan Penggunaan.

 

Atribut MF_TRANSCODE_CONTAINERTYPE diperlukan. Atribut kontainer lainnya bersifat opsional.

Membuat Topologi Transkode

Topologi transkode adalah topologi parsial yang berisi sumber media, codec yang sesuai, dan sink media. Untuk membuat topologi transkode, panggil ke fungsi MFCreateTranscodeTopology . Fungsi ini mengambil parameter berikut sebagai input:

Fungsi mengembalikan penunjuk ke antarmuka IMFTopology .

Menjalankan Sesi Pengodean

Setelah membuat topologi, Anda siap untuk mengodekan file. Anda dapat membuang profil pada saat ini.

  1. Panggil MFCreateMediaSession untuk membuat Sesi Media.
  2. Panggil IMFMediaSession::SetTopology untuk mengatur topologi pada Sesi Media.
  3. Panggil IMFMediaSession::Mulai untuk memulai sesi pengodean.
  4. Tunggu peristiwa MESessionEnded .
  5. Panggil IMFMediaSession::Close untuk menutup Sesi Media.
  6. Tunggu peristiwa MESessionClosed .
  7. Hubungi IMFMediaSource::Shutdown.
  8. Panggil IMFMediaSession::Shutdown.

Sebagian besar waktu yang dihabiskan untuk pengodean terjadi antara langkah 3 dan 4.

API Transkode

Tentang Sesi Media