Condividi tramite


Codificatore AAC

Il codificatore AAC di Microsoft Media Foundation è una trasformazione di Media Foundation che codifica il profilo AAC (Advanced Audio Coding) Low Complexity (LC), come definito da ISO/IEC 13818-7 (MPEG-2 Audio Part 7).

Il codificatore AAC non supporta la codifica in altri profili AAC, ad esempio Main, SSR o LTP.

Identificatore di classe

L'identificatore di classe (CLSID) del codificatore AAC è CLSID_AACMFTEncoder, definito nel file di intestazione wmcodecdsp.h.

Tipi di supporti

Il codificatore AAC supporta i tipi di supporti seguenti. È possibile impostare prima i tipi nel tipo di input dell'ordine o nel tipo di output.

Tipi di input

Impostare gli attributi seguenti sul tipo di supporto di input.

Attributo Descrizione Osservazioni
MF_MT_MAJOR_TYPE Tipo principale. Deve essere MFMediaType_Audio.
MF_MT_SUBTYPE Sottotipo. Deve essere MFAudioFormat_PCM.
MF_MT_AUDIO_BITS_PER_SAMPLE Bit per campione. Deve essere 16.
MF_MT_AUDIO_SAMPLES_PER_SECOND Campioni al secondo. Sono supportati i valori seguenti:
  • 44100 (44,1 KHz)
  • 48000 (48 KHz)
MF_MT_AUDIO_NUM_CHANNELS Numero di canali. Deve essere 1 (mono) o 2 (stereo) o 6 (5,1). Nota: Il supporto per 6 canali audio è stato introdotto con Windows 10 e non è disponibile per le versioni precedenti di Windows.

Dopo aver impostato il tipo di input, il codificatore deriva i valori seguenti e li aggiunge al tipo di supporto:

Tipi di output

Impostare gli attributi seguenti nel tipo di supporto di output.

Attributo Descrizione Osservazioni
MF_MT_MAJOR_TYPE Tipo principale. Deve essere MFMediaType_Audio.
MF_MT_SUBTYPE Sottotipo audio. Deve essere MFAudioFormat_AAC.
MF_MT_AUDIO_BITS_PER_SAMPLE Bit per campione. Deve essere 16.
MF_MT_AUDIO_SAMPLES_PER_SECOND Campioni al secondo. Deve corrispondere al tipo di input.
MF_MT_AUDIO_NUM_CHANNELS Numero di canali. Deve corrispondere al tipo di input.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND Velocità in bit del flusso AAC codificato, in byte al secondo. Sono supportati i valori seguenti:
  • 12000
  • 16000
  • 20000
  • 24000
Se si usano 6 canali, moltiplicare questi valori per 6.
Il valore predefinito per mono e stereo è 12000 (96 Kbps). Il valore predefinito per 6 canali è 60000.
MF_MT_AAC_PAYLOAD_TYPE Tipo di payload AAC. Facoltativa. Se impostato, il valore deve essere zero, a indicare che il flusso contiene solo raw_data_block elementi.
Facoltativa. Se l'attributo non è impostato, il valore predefinito è zero, a indicare che il flusso contiene solo raw_data_block elementi (AAC non elaborato).
In Windows 7, se questo attributo è impostato, il valore deve essere zero.
A partire da Windows 8, il valore può essere 0 (AAC non elaborato) o 1 (ADTS AAC).
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION Profilo audio e livello AAC. Facoltativa. Sono supportati i valori seguenti:
  • 0x29 (impostazione predefinita)
  • 0x2A
  • 0x2B
  • 0x2C
  • 0x2E
  • 0x2F
  • 0x30
  • 0x31
  • 0x32
  • 0x33

Nella tabella seguente sono elencati i valori che è possibile usare per l'attributo MF_MT_AAC_PROFILE_LEVEL_INDICATION.

MF_MT_AAC_PROFILE_LEVEL_INDICATION valore Profilo
0x29 Profilo AAC L2
0x2A Profilo AAC L4
0x2B Profilo AAC L5
0x2C High Efficiency v1 AAC Profile L2
0x2E High Efficiency v1 AAC Profile L4
0x2F High Efficiency v1 AAC Profile L5
0x30 High Efficiency v2 AAC Profile L2
0x31 High Efficiency v2 AAC Profile L3
0x32 High Efficiency v2 AAC Profile L4
0x33 High Efficiency v2 AAC Profile L5

Dopo aver impostato il tipo di output, il codificatore AAC aggiorna il tipo aggiungendo l'attributo MF_MT_USER_DATA . Questo attributo contiene la parte della struttura HEAACWAVEINFO visualizzata dopo la struttura WAVEFORMATEX , ovvero dopo il membro wfx . Questo è seguito dai dati AudioSpecificConfig(), come definito da ISO/IEC 14496-3.

Ogni esempio di output contiene un frame AAC compresso senza intestazione. Questo formato equivale all'elemento raw_data_block() definito da MPEG-2. L'attributo MF_MT_AAC_PAYLOAD_TYPE, se presente nel tipo di output, deve essere impostato su zero per indicare questo tipo di payload.

Ogni esempio di output contiene un frame AAC compresso corrispondente a 1024 campioni PCM. Ad esempio, a 48 Khz frequenza di campionamento, la durata di un frame compresso è 21,33 msec.

Se MF_MT_AAC_PAYLOAD_TYPE è zero (valore predefinito), ogni esempio di output contiene un elemento raw_data_block() definito da ISO/IEC 13818-7.

Tipi di supporti di esempio

Ecco un esempio dei tipi di supporti necessari per codificare da 44,1 kHz, audio stereo da 160 Kbps a AAC non elaborato

Tipo di supporto di input:

Attributo Valore
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 (facoltativo)
MF_MT_AUDIO_BLOCK_ALIGNMENT 4 (facoltativo)
MF_MT_ALL_SAMPLES_INDEPENDENT 1 (facoltativo)
MF_MT_AVG_BITRATE 1411200 (facoltativo)
MF_MT_FIXED_SIZE_SAMPLES 1 (facoltativo)

Tipo di supporto di output:

Attributo Valore
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 (facoltativo)
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION 0x29 (facoltativo)
MF_MT_AUDIO_BLOCK_ALIGNMENT 1 (facoltativo)
MF_MT_ALL_SAMPLES_INDEPENDENT 0 (facoltativo)
MF_MT_AVG_BITRATE 160000 (facoltativo)
MF_MT_USER_DATA {0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10} (facoltativo)

Commenti

Nell'implementazione corrente ogni esempio di input deve avere una durata e un tempo validi. Per impostare l'ora di esempio, chiamare IMFSample::SetSampleTime. Per impostare la durata dell'esempio, chiamare IMFSample::SetSampleDuration.

Se l'ora di esempio non è impostata, il metodo IMFTransform::P rocessInput del codificatore restituisce MF_E_NO_SAMPLE_TIMESTAMP. Se la durata dell'esempio non è impostata, il metodo ProcessInput restituisce MF_E_NO_SAMPLE_DURATION.

La durata del campione può essere calcolata come segue:

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

dove nAudioSamplesPerChannel è il numero di campioni audio PCM per canale nel buffer di input e nSamplesPerSec è la frequenza di campionamento, in campioni al secondo.

Nota

A causa di un bug nell'implementazione corrente, se la durata del campione è impostata su zero, la chiamata ProcessInput ha esito positivo, ma una chiamata successiva a IMFTransform::P rocessOutput genererà un'eccezione di divisione per zero. Per evitare questo errore, impostare una durata diversa da zero valida per ogni esempio di input.

Requisiti

Requisito Valore
Client minimo supportato
Windows 7 [solo app desktop]
Server minimo supportato
Windows Server 2008 R2 [solo app desktop]
DLL
Mfaacenc.dll

Vedi anche

Oggetti codec

Decodificatore AAC

Tipi di supporti AAC

Tipi di supporti audio

Supporto MPEG-4 in Media Foundation

Formati multimediali supportati in Media Foundation