Encodeur AAC
L’encodeur AAC Microsoft Media Foundation est une transformation Media Foundation qui encode le profil LC (Advanced Audio Coding) Low Complexity (LC), tel que défini par ISO/IEC 13818-7 (MPEG-2 Audio Part 7) .
L’encodeur AAC ne prend pas en charge l’encodage vers d’autres profils AAC, tels que Main, SSR ou LTP.
Identificateur de classe
L’identificateur de classe (CLSID) de l’encodeur AAC est CLSID_AACMFTEncoder, défini dans le fichier d’en-tête wmcodecdsp.h.
Types de média
L’encodeur AAC prend en charge les types de médias suivants. Vous pouvez définir les types dans l’ordre type d’entrée en premier ou type de sortie en premier.
Types d’entrée
Définissez les attributs suivants sur le type de média d’entrée.
Attribut | Description | Notes |
---|---|---|
MF_MT_MAJOR_TYPE | Type principal. | Doit être MFMediaType_Audio. |
MF_MT_SUBTYPE | Sous-type. | Doit être MFAudioFormat_PCM. |
MF_MT_AUDIO_BITS_PER_SAMPLE | Bits par exemple. | Doit être 16. |
MF_MT_AUDIO_SAMPLES_PER_SECOND | Exemples par seconde. | Les valeurs suivantes sont admises :
|
MF_MT_AUDIO_NUM_CHANNELS | Nombre de canaux. | Doit être 1 (mono) ou 2 (stéréo) ou 6 (5.1).
Note: La prise en charge de 6 canaux audio a été introduite avec Windows 10 et n’est pas disponible pour les versions antérieures de Windows. |
Une fois le type d’entrée défini, l’encodeur dérive les valeurs suivantes et les ajoute au type de média :
Types de sortie
Définissez les attributs suivants sur le type de média de sortie.
Attribut | Description | Notes |
---|---|---|
MF_MT_MAJOR_TYPE | Type principal. | Doit être MFMediaType_Audio. |
MF_MT_SUBTYPE | Sous-type audio. | Doit être MFAudioFormat_AAC. |
MF_MT_AUDIO_BITS_PER_SAMPLE | Bits par exemple. | Doit être 16. |
MF_MT_AUDIO_SAMPLES_PER_SECOND | Exemples par seconde. | Doit correspondre au type d’entrée. |
MF_MT_AUDIO_NUM_CHANNELS | Nombre de canaux. | Doit correspondre au type d’entrée. |
MF_MT_AUDIO_AVG_BYTES_PER_SECOND | Débit binaire du flux AAC encodé, en octets par seconde. | Les valeurs suivantes sont admises :
La valeur par défaut pour mono et stéréo est 12000 (96 Kbits/s). La valeur par défaut pour 6 canaux est 60000. |
MF_MT_AAC_PAYLOAD_TYPE | Type de charge utile AAC. | Optionnel. Si elle est définie, la valeur doit être égale à zéro, ce qui indique que le flux contient raw_data_block éléments uniquement. Optionnel. Si l’attribut n’est pas défini, la valeur par défaut est zéro, ce qui indique que le flux contient raw_data_block éléments uniquement (AAC brut). Dans Windows 7, si cet attribut est défini, la valeur doit être zéro. À compter de Windows 8, la valeur peut être 0 (AAC brute) ou 1 (ADTS AAC). |
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION | Profil et niveau audio AAC. | Optionnel. Les valeurs suivantes sont admises :
|
Le tableau suivant répertorie les valeurs qui peuvent être utilisées pour l’attribut MF_MT_AAC_PROFILE_LEVEL_INDICATION.
MF_MT_AAC_PROFILE_LEVEL_INDICATION valeur | Profil |
---|---|
0x29 | Profil AAC L2 |
0x2A | Profil AAC L4 |
0x2B | Profil AAC L5 |
0x2C | Profil AAC v1 haute efficacité L2 |
0x2E | Profil AAC v1 haute efficacité L4 |
0x2F | Profil AAC v1 haute efficacité L5 |
0x30 | Profil AAC v2 haute efficacité L2 |
0x31 | Profil AAC v2 à haute efficacité L3 |
0x32 | Profil AAC v2 à haute efficacité L4 |
0x33 | Profil AAC v2 haute efficacité L5 |
Une fois le type de sortie défini, l’encodeur AAC met à jour le type en ajoutant l’attribut MF_MT_USER_DATA . Cet attribut contient la partie de la structure HEAACWAVEINFO qui apparaît après la structure WAVEFORMATEX (c’est-à-dire après le membre wfx ). Cette opération est suivie des données AudioSpecificConfig(), telles que définies par la norme ISO/IEC 14496-3.
Chaque exemple de sortie contient une trame AAC compressée sans en-tête. Ce format équivaut à l’élément raw_data_block() défini par MPEG-2. L’attribut MF_MT_AAC_PAYLOAD_TYPE, s’il est présent dans le type de sortie, doit être défini sur zéro pour indiquer ce type de charge utile.
Chaque exemple de sortie contient une trame AAC compressée correspondant à 1 024 exemples PCM. Par exemple, à un taux d’échantillonnage de 48 Khz, la durée d’une image compressée est de 21,33 msec.
Si MF_MT_AAC_PAYLOAD_TYPE est égal à zéro (valeur par défaut), chaque échantillon de sortie contient un élément raw_data_block() tel que défini par la norme ISO/IEC 13818-7.
Exemples de types de média
Voici un exemple des types de médias nécessaires pour encoder de l’audio stéréo de 44,1 kHz, 160 Kbits/s en AAC brut
Type de média d’entrée :
Attribut | Valeur |
---|---|
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 (facultatif) |
MF_MT_AUDIO_BLOCK_ALIGNMENT | 4 (facultatif) |
MF_MT_ALL_SAMPLES_INDEPENDENT | 1 (facultatif) |
MF_MT_AVG_BITRATE | 1411200 (facultatif) |
MF_MT_FIXED_SIZE_SAMPLES | 1 (facultatif) |
Type de média de sortie :
Attribut | Valeur |
---|---|
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 (facultatif) |
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION | 0x29 (facultatif) |
MF_MT_AUDIO_BLOCK_ALIGNMENT | 1 (facultatif) |
MF_MT_ALL_SAMPLES_INDEPENDENT | 0 (facultatif) |
MF_MT_AVG_BITRATE | 160000 (facultatif) |
MF_MT_USER_DATA | {0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10} (facultatif) |
Notes
Dans l’implémentation actuelle, chaque exemple d’entrée doit avoir une durée et une durée valides. Pour définir l’heure de l’exemple, appelez IMFSample::SetSampleTime. Pour définir la durée de l’exemple, appelez IMFSample::SetSampleDuration.
Si l’heure de l’exemple n’est pas définie, la méthode IMFTransform::P rocessInput de l’encodeur retourne MF_E_NO_SAMPLE_TIMESTAMP. Si la durée de l’exemple n’est pas définie, la méthode ProcessInput retourne MF_E_NO_SAMPLE_DURATION.
La durée de l’échantillon peut être calculée comme suit :
LONGLONG hnsSampleDuration =
( nAudioSamplesPerChannel * (LONGLONG)10000000 )/nSamplesPerSec;
où nAudioSamplesPerChannel est le nombre d’exemples audio PCM par canal dans la mémoire tampon d’entrée, et nSamplesPerSec est le taux d’échantillonnage, en échantillons par seconde.
Notes
En raison d’un bogue dans l’implémentation actuelle, si la durée de l’exemple est définie sur zéro, l’appel ProcessInput réussit, mais un appel ultérieur à IMFTransform::P rocessOutput lève une exception de division par zéro. Pour éviter cette erreur, définissez une durée différente de zéro valide sur chaque exemple d’entrée.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge |
Windows 7 [applications de bureau uniquement] |
Serveur minimal pris en charge |
Windows Server 2008 R2 [applications de bureau uniquement] |
DLL |
|