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