AAC Encoder
Encoder AAC Microsoft Media Foundation adalah Transformasi Yayasan Media yang mengodekan profil Advanced Audio Coding (AAC) Low Complexity (LC), sebagaimana didefinisikan oleh ISO/IEC 13818-7 (MPEG-2 Audio Part 7) .
Encoder AAC tidak mendukung pengodean ke profil AAC lainnya, seperti Main, SSR, atau LTP.
Pengidentifikasi Kelas
Pengidentifikasi kelas (CLSID) dari encoder AAC CLSID_AACMFTEncoder, didefinisikan dalam file header wmcodecdsp.h.
Jenis Media
Encoder AAC mendukung jenis media berikut. Anda dapat mengatur jenis dalam jenis input urutan terlebih dahulu, atau jenis output terlebih dahulu.
Jenis Input
Atur atribut berikut pada jenis media input.
Atribut | Deskripsi | Keterangan |
---|---|---|
MF_MT_MAJOR_TYPE | Jenis utama. | Harus MFMediaType_Audio. |
MF_MT_SUBTYPE | Subtipe. | Pasti MFAudioFormat_PCM. |
MF_MT_AUDIO_BITS_PER_SAMPLE | Bit per sampel. | Harus 16. |
MF_MT_AUDIO_SAMPLES_PER_SECOND | Sampel per detik. | Nilai berikut ini didukung:
|
MF_MT_AUDIO_NUM_CHANNELS | Jumlah saluran. | Harus 1 (mono) atau 2 (stereo), atau 6 (5,1).
Catatan: Dukungan untuk 6 saluran audio diperkenalkan dengan Windows 10 dan tidak tersedia untuk versi Windows sebelumnya. |
Setelah jenis input diatur, encoder memperoleh nilai berikut dan menambahkannya ke jenis media:
Jenis output
Atur atribut berikut pada jenis media output.
Atribut | Deskripsi | Keterangan |
---|---|---|
MF_MT_MAJOR_TYPE | Jenis utama. | Harus MFMediaType_Audio. |
MF_MT_SUBTYPE | Subjenis audio. | Pasti MFAudioFormat_AAC. |
MF_MT_AUDIO_BITS_PER_SAMPLE | Bit per sampel. | Harus 16. |
MF_MT_AUDIO_SAMPLES_PER_SECOND | Sampel per detik. | Harus cocok dengan jenis input. |
MF_MT_AUDIO_NUM_CHANNELS | Jumlah saluran. | Harus cocok dengan jenis input. |
MF_MT_AUDIO_AVG_BYTES_PER_SECOND | Laju bit aliran AAC yang dikodekan, dalam byte per detik. | Nilai berikut ini didukung:
Nilai default untuk mono dan stereo adalah 12000 (96 Kbps). Nilai default untuk 6 saluran adalah 60000. |
MF_MT_AAC_PAYLOAD_TYPE | Jenis payload AAC. | Pilihan. Jika diatur, nilainya harus nol, menunjukkan bahwa aliran hanya berisi elemen raw_data_block. Pilihan. Jika atribut tidak diatur, nilai defaultnya adalah nol, menunjukkan bahwa aliran hanya berisi elemen raw_data_block (AAC mentah). Di Windows 7, jika atribut ini diatur, nilainya harus nol. Mulai windows 8, nilainya bisa 0 (AAC mentah) atau 1 (ADTS AAC). |
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION | Profil dan tingkat audio AAC. | Pilihan. Nilai berikut ini didukung:
|
Tabel berikut mencantumkan nilai yang bisa digunakan untuk atribut MF_MT_AAC_PROFILE_LEVEL_INDICATION.
nilai MF_MT_AAC_PROFILE_LEVEL_INDICATION | Profil |
---|---|
0x29 | Profil AAC L2 |
0x2A | Profil AAC L4 |
0x2B | Profil AAC L5 |
0x2C | Profil AAC L2 Efisiensi Tinggi v1 |
0x2E | Profil AAC V1 Efisiensi Tinggi L4 |
0x2F | Efisiensi Tinggi v1 Profil AAC L5 |
0x30 | Profil AAC V2 Efisiensi Tinggi L2 |
0x31 | Profil AAC V2 Efisiensi Tinggi L3 |
0x32 | Profil AAC V2 Efisiensi Tinggi L4 |
0x33 | Profil AAC V2 Efisiensi Tinggi L5 |
Setelah jenis output diatur, encoder AAC memperbarui jenis dengan menambahkan atribut MF_MT_USER_DATA . Atribut ini berisi bagian dari struktur HEAACWAVEINFO yang muncul setelah struktur WAVEFORMATEX (yaitu, setelah anggota wfx ). Ini diikuti oleh data AudioSpecificConfig(), seperti yang didefinisikan oleh ISO/IEC 14496-3.
Setiap sampel output berisi satu bingkai AAC terkompresi tanpa header. Format ini setara dengan elemen raw_data_block() yang ditentukan oleh MPEG-2. Atribut MF_MT_AAC_PAYLOAD_TYPE , jika ada dalam jenis output, harus diatur ke nol untuk menunjukkan jenis payload ini.
Setiap sampel output berisi satu bingkai AAC terkompresi yang sesuai dengan 1024 sampel PCM. Misalnya, pada laju pengambilan sampel 48 Khz, durasi satu bingkai terkompresi adalah 21,33 msec.
Jika MF_MT_AAC_PAYLOAD_TYPE adalah nol (nilai default), setiap sampel output berisi satu elemen raw_data_block() seperti yang ditentukan oleh ISO/IEC 13818-7.
Contoh Jenis Media
Berikut adalah contoh jenis media yang diperlukan untuk mengodekan dari 44,1-kHz, audio stereo 160-Kbps ke AAC mentah
Jenis media input:
Atribut | Nilai |
---|---|
MF_MT_MAJOR_TYPE | MFMediaType_Audio |
MF_MT_SUBTYPE | MFAudioFormat_PCM |
MF_MT_AUDIO_BITS_PER_SAMPLE | 16 |
MF_MT_AUDIO_SAMPLES_PER_SECOND | 44100 |
MF_MT_AUDIO_NUM_CHANNELS | 2 |
MF_MT_AUDIO_AVG_BYTES_PER_SECOND | 176400 (opsional) |
MF_MT_AUDIO_BLOCK_ALIGNMENT | 4 (opsional) |
MF_MT_ALL_SAMPLES_INDEPENDENT | 1 (opsional) |
MF_MT_AVG_BITRATE | 1411200 (opsional) |
MF_MT_FIXED_SIZE_SAMPLES | 1 (opsional) |
Jenis media output:
Atribut | Nilai |
---|---|
MF_MT_MAJOR_TYPE | MFMediaType_Audio |
MF_MT_SUBTYPE | MFAudioFormat_AAC |
MF_MT_AUDIO_BITS_PER_SAMPLE | 16 |
MF_MT_AUDIO_SAMPLES_PER_SECOND | 44100 |
MF_MT_AUDIO_NUM_CHANNELS | 2 |
MF_MT_AUDIO_AVG_BYTES_PER_SECOND | 20000 |
MF_MT_AAC_PAYLOAD_TYPE | 0 (opsional) |
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION | 0x29 (opsional) |
MF_MT_AUDIO_BLOCK_ALIGNMENT | 1 (opsional) |
MF_MT_ALL_SAMPLES_INDEPENDENT | 0 (opsional) |
MF_MT_AVG_BITRATE | 160000 (opsional) |
MF_MT_USER_DATA | {0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10} (opsional) |
Keterangan
Dalam implementasi saat ini, setiap sampel input harus memiliki waktu dan durasi yang valid. Untuk mengatur waktu sampel, panggil IMFSample::SetSampleTime. Untuk mengatur durasi sampel, panggil IMFSample::SetSampleDuration.
Jika waktu sampel tidak diatur, metode IMFTransform::P rocessInput encoder mengembalikan MF_E_NO_SAMPLE_TIMESTAMP. Jika durasi sampel tidak diatur, metode ProcessInput mengembalikan MF_E_NO_SAMPLE_DURATION.
Durasi sampel dapat dihitung sebagai berikut:
LONGLONG hnsSampleDuration =
( nAudioSamplesPerChannel * (LONGLONG)10000000 )/nSamplesPerSec;
di mana nAudioSamplesPerChannel adalah jumlah sampel audio PCM per saluran dalam buffer input, dan nSamplesPerSec adalah laju pengambilan sampel, dalam sampel per detik.
Catatan
Karena bug dalam implementasi saat ini, jika durasi sampel diatur ke nol, panggilan ProcessInput berhasil, tetapi panggilan berikutnya ke IMFTransform::P rocessOutput akan memberikan pengecualian bagi-demi-nol. Untuk menghindari kesalahan ini, atur durasi bukan nol yang valid pada setiap sampel input.
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung |
Windows 7 [hanya aplikasi desktop] |
Server minimum yang didukung |
Windows Server 2008 R2 [hanya aplikasi desktop] |
DLL |
|