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:
|
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:
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:
|
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 |
|