Compartir a través de


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:
  • 44100 (44,1 KHz)
  • 48000 (48 KHz)
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:
  • 12000
  • 16000
  • 20000
  • 24000
Si usa 6 canales, multiplique estos valores por 6.
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:
  • 0x29 (valor predeterminado)
  • 0x2A
  • 0x2B
  • 0x2C
  • 0x2E
  • 0x2F
  • 0x30
  • 0x31
  • 0x32
  • 0x33

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
Mfaacenc.dll

Consulte también

Objetos de códec

Descodificador de AAC

Tipos de medios AAC

Tipos de medios de audio

Compatibilidad con MPEG-4 en Media Foundation

Formatos de medios admitidos en Media Foundation