Codificador AAC

O codificador do Microsoft Media Foundation AAC é uma Transformação do Media Foundation que codifica o perfil de LC (Codificação Avançada de Áudio) (AAC), conforme definido por ISO/IEC 13818-7 (MPEG-2 Audio Part 7).

O codificador AAC não dá suporte à codificação para nenhum outro perfil do AAC, como Main, SSR ou LTP.

Identificador de Classe

O CLSID (identificador de classe) do codificador AAC é CLSID_AACMFTEncoder, definido no arquivo de cabeçalho wmcodecdsp.h.

Tipos de mídia

O codificador AAC dá suporte aos seguintes tipos de mídia. Você pode definir os tipos em tipo de entrada de ordem primeiro ou tipo de saída primeiro.

Tipos de entrada

Defina os atributos a seguir no tipo de mídia de entrada.

Atributo Descrição Comentários
MF_MT_MAJOR_TYPE Tipo principal. Deve ser MFMediaType_Audio.
MF_MT_SUBTYPE Subtipo. Deve ser MFAudioFormat_PCM.
MF_MT_AUDIO_BITS_PER_SAMPLE Bits por exemplo. Deve ser 16.
MF_MT_AUDIO_SAMPLES_PER_SECOND Exemplos por segundo. Os seguintes valores têm suporte:
  • 44100 (44,1 KHz)
  • 48000 (48 KHz)
MF_MT_AUDIO_NUM_CHANNELS Número de canais. Deve ser 1 (mono) ou 2 (estéreo) ou 6 (5.1). Nota: O suporte para 6 canais de áudio foi introduzido com o Windows 10 e não está disponível para versões anteriores do Windows.

Depois que o tipo de entrada é definido, o codificador deriva os seguintes valores e os adiciona ao tipo de mídia:

Tipos de saída

Defina os atributos a seguir no tipo de mídia de saída.

Atributo Descrição Comentários
MF_MT_MAJOR_TYPE Tipo principal. Deve ser MFMediaType_Audio.
MF_MT_SUBTYPE Subtipo de áudio. Deve ser MFAudioFormat_AAC.
MF_MT_AUDIO_BITS_PER_SAMPLE Bits por exemplo. Deve ser 16.
MF_MT_AUDIO_SAMPLES_PER_SECOND Exemplos por segundo. Deve corresponder ao tipo de entrada.
MF_MT_AUDIO_NUM_CHANNELS Número de canais. Deve corresponder ao tipo de entrada.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND Taxa de bits do fluxo AAC codificado, em bytes por segundo. Os seguintes valores têm suporte:
  • 12000
  • 16000
  • 20000
  • 24.000
Se estiver usando 6 canais, multiplique esses valores por 6.
O valor padrão para mono e estéreo é 12000 (96 Kbps). O valor padrão para 6 canais é 60000.
MF_MT_AAC_PAYLOAD_TYPE O tipo de conteúdo do AAC. Opcional. Se definido, o valor deverá ser zero, indicando que o fluxo contém apenas elementos raw_data_block.
Opcional. Se o atributo não estiver definido, o valor padrão será zero, indicando que o fluxo contém apenas elementos raw_data_block (AAC bruto).
No Windows 7, se esse atributo for definido, o valor deverá ser zero.
A partir do Windows 8, o valor pode ser 0 (AAC bruto) ou 1 (ADTS AAC).
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION O perfil e o nível de áudio do AAC. Opcional. Os seguintes valores têm suporte:
  • 0x29 (padrão)
  • 0x2A
  • 0x2B
  • 0x2C
  • 0x2E
  • 0x2F
  • 0x30
  • 0x31
  • 0x32
  • 0x33

A tabela a seguir lista os valores que podem ser usados para o atributo MF_MT_AAC_PROFILE_LEVEL_INDICATION.

MF_MT_AAC_PROFILE_LEVEL_INDICATION valor Perfil
0x29 Perfil L2 do AAC
0x2A Perfil L4 do AAC
0x2B Perfil L5 do AAC
0x2C Perfil L2 de Alta Eficiência v1 AAC
0x2E Perfil do AAC L4 de alta eficiência v1
0x2F Perfil do AAC L5 de alta eficiência v1
0x30 Perfil AAC L2 de alta eficiência v2
0x31 Perfil AAC L3 de alta eficiência v2
0x32 Perfil do AAC L4 de alta eficiência v2
0x33 Perfil AAC L5 de alta eficiência v2

Depois que o tipo de saída é definido, o codificador AAC atualiza o tipo adicionando o atributo MF_MT_USER_DATA . Esse atributo contém a parte da estrutura HEAACWAVEINFO que aparece após a estrutura WAVEFORMATEX (ou seja, após o membro wfx ). Isso é seguido pelos dados AudioSpecificConfig(), conforme definido por ISO/IEC 14496-3.

Cada exemplo de saída contém um quadro AAC compactado sem cabeçalho. Esse formato é equivalente ao elemento raw_data_block() definido por MPEG-2. O atributo MF_MT_AAC_PAYLOAD_TYPE , se presente no tipo de saída, deve ser definido como zero para indicar esse tipo de conteúdo.

Cada exemplo de saída contém um quadro AAC compactado correspondente a 1024 amostras de PCM. Por exemplo, na taxa de amostragem de 48 Khz, a duração de um quadro compactado é de 21,33 msec.

Se MF_MT_AAC_PAYLOAD_TYPE for zero (o valor padrão), cada amostra de saída conterá um elemento raw_data_block(), conforme definido por ISO/IEC 13818-7.

Tipos de mídia de exemplo

Aqui está um exemplo dos tipos de mídia necessários para codificar de áudio estéreo de 44,1 kHz, 160 Kbps para AAC bruto

Tipo de mídia 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 mídia de saída:

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)

Comentários

Na implementação atual, cada exemplo de entrada deve ter um tempo e uma duração válidos. Para definir o tempo de amostra, chame IMFSample::SetSampleTime. Para definir a duração da amostra, chame IMFSample::SetSampleDuration.

Se o tempo de amostra não estiver definido, o método IMFTransform::P rocessInput do codificador retornará MF_E_NO_SAMPLE_TIMESTAMP. Se a duração da amostra não estiver definida, o método ProcessInput retornará MF_E_NO_SAMPLE_DURATION.

A duração da amostra pode ser calculada da seguinte maneira:

LONGLONG hnsSampleDuration = 
    ( nAudioSamplesPerChannel * (LONGLONG)10000000 )/nSamplesPerSec;

em que nAudioSamplesPerChannel é o número de amostras de áudio PCM por canal no buffer de entrada e nSamplesPerSec é a taxa de amostragem, em amostras por segundo.

Observação

Devido a um bug na implementação atual, se a duração da amostra for definida como zero, a chamada ProcessInput terá êxito, mas uma chamada subsequente para IMFTransform::P rocessOutput gerará uma exceção divide-por-zero. Para evitar esse erro, defina uma duração diferente de zero válida em cada exemplo de entrada.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 7 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows Server 2008 R2 [somente aplicativos da área de trabalho]
DLL
Mfaacenc.dll

Confira também

Objetos Codec

Decodificador do AAC

Tipos de mídia do AAC

Tipos de mídia de áudio

Suporte do MPEG-4 na Media Foundation

Formatos de mídia compatíveis com o Media Foundation