Codificador AAC
El codificador AAC de Microsoft Media Foundation es una transformación de Media Foundation que codifica el perfil de baja complejidad (LC) de codificación avanzada de audio (AAC), tal como se define en ISO/IEC 13818-7 (MPEG-2 Audio Part 7).
El codificador AAC no admite la codificación en ningún otro perfil de AAC, como Main, SSR o LTP.
Identificador de clase
El identificador de clase (CLSID) del codificador AAC se CLSID_AACMFTEncoder, definido en el archivo de encabezado wmcodecdsp.h.
Tipos de medios
El codificador AAC admite los siguientes tipos de medios. Puede establecer primero los tipos en el tipo de entrada del orden o en el tipo de salida.
Tipos de entrada
Establezca los siguientes atributos en el tipo de medio de entrada.
Atributo | Descripción | Observaciones |
---|---|---|
MF_MT_MAJOR_TYPE | Tipo principal. | Debe ser MFMediaType_Audio. |
MF_MT_SUBTYPE | Subtipo. | Debe ser MFAudioFormat_PCM. |
MF_MT_AUDIO_BITS_PER_SAMPLE | Bits por ejemplo. | Debe ser 16. |
MF_MT_AUDIO_SAMPLES_PER_SECOND | Muestras por segundo. | Se admiten los valores siguientes:
|
MF_MT_AUDIO_NUM_CHANNELS | Número de canales. | Debe ser 1 (mono) o 2 (estéreo) o 6 (5.1).
Nota: La compatibilidad con 6 canales de audio se introdujo con Windows 10 y no está disponible para versiones anteriores de Windows. |
Una vez establecido el tipo de entrada, el codificador deriva los siguientes valores y los agrega al tipo de medio:
Tipos de salida
Establezca los siguientes atributos en el tipo de medio de salida.
Atributo | Descripción | Observaciones |
---|---|---|
MF_MT_MAJOR_TYPE | Tipo principal. | Debe ser MFMediaType_Audio. |
MF_MT_SUBTYPE | Subtipo de audio. | Debe ser MFAudioFormat_AAC. |
MF_MT_AUDIO_BITS_PER_SAMPLE | Bits por ejemplo. | Debe ser 16. |
MF_MT_AUDIO_SAMPLES_PER_SECOND | Muestras por segundo. | Debe coincidir con el tipo de entrada. |
MF_MT_AUDIO_NUM_CHANNELS | Número de canales. | Debe coincidir con el tipo de entrada. |
MF_MT_AUDIO_AVG_BYTES_PER_SECOND | Velocidad de bits de la secuencia AAC codificada, en bytes por segundo. | Se admiten los valores siguientes:
El valor predeterminado para mono y estéreo es 12000 (96 Kbps). El valor predeterminado de 6 canales es 60000. |
MF_MT_AAC_PAYLOAD_TYPE | Tipo de carga de AAC. | Opcional. Si se establece, el valor debe ser cero, lo que indica que la secuencia solo contiene raw_data_block elementos. Opcional. Si el atributo no está establecido, el valor predeterminado es cero, lo que indica que la secuencia contiene solo elementos raw_data_block (AAC sin formato). En Windows 7, si se establece este atributo, el valor debe ser cero. A partir de Windows 8, el valor puede ser 0 (AAC sin formato) o 1 (ADTS AAC). |
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION | El perfil y el nivel de audio de AAC. | Opcional. Se admiten los valores siguientes:
|
En la tabla siguiente se enumeran los valores que se pueden usar para el atributo MF_MT_AAC_PROFILE_LEVEL_INDICATION.
MF_MT_AAC_PROFILE_LEVEL_INDICATION valor | Perfil |
---|---|
0x29 | Perfil de AAC L2 |
0x2A | Perfil de AAC L4 |
0x2B | Perfil de AAC L5 |
0x2C | Alto rendimiento v1 perfil AAC L2 |
0x2E | Alto rendimiento v1 perfil AAC L4 |
0x2F | Alto rendimiento v1 perfil AAC L5 |
0x30 | Alto rendimiento v2 perfil AAC L2 |
0x31 | Alto rendimiento v2 perfil AAC L3 |
0x32 | Alto rendimiento v2 perfil AAC L4 |
0x33 | Alto rendimiento v2 perfil AAC L5 |
Una vez establecido el tipo de salida, el codificador AAC actualiza el tipo agregando el atributo MF_MT_USER_DATA . Este atributo contiene la parte de la estructura HEAACWAVEINFO que aparece después de la estructura WAVEFORMATEX (es decir, después del miembro wfx ). Esto va seguido de los datos AudioSpecificConfig(), tal y como se define en ISO/IEC 14496-3.
Cada ejemplo de salida contiene un marco AAC comprimido sin encabezado. Este formato es equivalente al elemento raw_data_block() definido por MPEG-2. El atributo MF_MT_AAC_PAYLOAD_TYPE , si está presente en el tipo de salida, debe establecerse en cero para indicar este tipo de carga.
Cada muestra de salida contiene un marco AAC comprimido correspondiente a 1024 muestras de PCM. Por ejemplo, a una velocidad de muestreo de 48 Khz, la duración de un marco comprimido es de 21,33 msec.
Si MF_MT_AAC_PAYLOAD_TYPE es cero (el valor predeterminado), cada muestra de salida contiene un elemento raw_data_block() definido por ISO/IEC 13818-7.
Tipos de medios de ejemplo
Este es un ejemplo de los tipos de medios necesarios para codificar de 44,1 kHz, audio estéreo de 160 Kbps a AAC sin formato.
Tipo de medio de entrada:
Atributo | Valor |
---|---|
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 (opcional) |
MF_MT_AUDIO_BLOCK_ALIGNMENT | 4 (opcional) |
MF_MT_ALL_SAMPLES_INDEPENDENT | 1 (opcional) |
MF_MT_AVG_BITRATE | 1411200 (opcional) |
MF_MT_FIXED_SIZE_SAMPLES | 1 (opcional) |
Tipo de medio de salida:
Atributo | Valor |
---|---|
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 (opcional) |
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION | 0x29 (opcional) |
MF_MT_AUDIO_BLOCK_ALIGNMENT | 1 (opcional) |
MF_MT_ALL_SAMPLES_INDEPENDENT | 0 (opcional) |
MF_MT_AVG_BITRATE | 160000 (opcional) |
MF_MT_USER_DATA | {0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10} (opcional) |
Comentarios
En la implementación actual, cada ejemplo de entrada debe tener un tiempo y una duración válidos. Para establecer la hora de ejemplo, llame a IMFSample::SetSampleTime. Para establecer la duración de la muestra, llame a IMFSample::SetSampleDuration.
Si no se establece el tiempo de muestra, el método IMFTransform::P rocessInput del codificador devuelve MF_E_NO_SAMPLE_TIMESTAMP. Si no se establece la duración del ejemplo, el método ProcessInput devuelve MF_E_NO_SAMPLE_DURATION.
La duración de la muestra se puede calcular de la siguiente manera:
LONGLONG hnsSampleDuration =
( nAudioSamplesPerChannel * (LONGLONG)10000000 )/nSamplesPerSec;
donde nAudioSamplesPerChannel es el número de muestras de audio PCM por canal en el búfer de entrada y nSamplesPerSec es la frecuencia de muestreo, en muestras por segundo.
Nota:
Debido a un error en la implementación actual, si la duración de la muestra está establecida en cero, la llamada ProcessInput se realiza correctamente, pero una llamada posterior a IMFTransform::P rocessOutput producirá una excepción de división por cero. Para evitar este error, establezca una duración no cero válida en cada ejemplo de entrada.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible |
Windows 7 [solo aplicaciones de escritorio] |
Servidor mínimo compatible |
Windows Server 2008 R2 [solo aplicaciones de escritorio] |
Archivo DLL |
|