AAC-Encoder

Der Microsoft Media Foundation-AAC-Encoder ist eine Media Foundation-Transformation , die AAC-Profil (Advanced Audio Coding, LC) mit niedriger Komplexität codiert, wie in ISO/IEC 13818-7 (MPEG-2 Audio Part 7) definiert.

Der AAC-Encoder unterstützt keine Codierung für andere AAC-Profile, z. B. Main, SSR oder LTP.

Klassenbezeichner

Der Klassenbezeichner (CLSID) des AAC-Encoders ist CLSID_AACMFTEncoder, definiert in der Headerdatei wmcodecdsp.h.

Medientypen

Der AAC-Encoder unterstützt die folgenden Medientypen. Sie können die Typen entweder in reihenfolge eingabetyp first oder output type first festlegen.

Eingabetypen

Legen Sie die folgenden Attribute für den Eingabemedientyp fest.

attribute BESCHREIBUNG Bemerkungen
MF_MT_MAJOR_TYPE Haupttyp. Muss MFMediaType_Audio sein.
MF_MT_SUBTYPE Untertyp. Muss MFAudioFormat_PCM sein.
MF_MT_AUDIO_BITS_PER_SAMPLE Bits pro Beispiel. Muss 16 sein.
MF_MT_AUDIO_SAMPLES_PER_SECOND Beispiele pro Sekunde. Die folgenden Werte werden unterstützt:
  • 44100 (44,1 KHz)
  • 48000 (48 KHz)
MF_MT_AUDIO_NUM_CHANNELS Anzahl der Kanäle. Muss 1 (Mono) oder 2 (Stereo) oder 6 (5.1) sein. Hinweis: Die Unterstützung für 6 Audiokanäle wurde mit Windows 10 eingeführt und ist für frühere Versionen von Windows nicht verfügbar.

Nachdem der Eingabetyp festgelegt wurde, leitet der Encoder die folgenden Werte ab und fügt sie dem Medientyp hinzu:

Ausgabetypen

Legen Sie die folgenden Attribute für den Ausgabemedientyp fest.

attribute BESCHREIBUNG Bemerkungen
MF_MT_MAJOR_TYPE Haupttyp. Muss MFMediaType_Audio sein.
MF_MT_SUBTYPE Audiountertyp. Muss MFAudioFormat_AAC sein.
MF_MT_AUDIO_BITS_PER_SAMPLE Bits pro Beispiel. Muss 16 sein.
MF_MT_AUDIO_SAMPLES_PER_SECOND Beispiele pro Sekunde. Muss mit dem Eingabetyp übereinstimmen.
MF_MT_AUDIO_NUM_CHANNELS Anzahl der Kanäle. Muss mit dem Eingabetyp übereinstimmen.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND Bitrate des codierten AAC-Datenstroms in Bytes pro Sekunde. Die folgenden Werte werden unterstützt:
  • 12000
  • 16000
  • 20000
  • 24.000
Wenn Sie 6 Kanäle verwenden, multiplizieren Sie diese Werte mit 6.
Der Standardwert für Mono und Stereo beträgt 12000 (96 KBit/s). Der Standardwert für 6 Kanäle ist 60000.
MF_MT_AAC_PAYLOAD_TYPE Der AAC-Nutzlasttyp. Optional. Wenn festgelegt, muss der Wert null sein, was angibt, dass der Stream nur raw_data_block-Elemente enthält.
Optional. Wenn das Attribut nicht festgelegt ist, ist der Standardwert 0, was angibt, dass der Stream nur raw_data_block Elemente (unformatiertes AAC) enthält.
Wenn dieses Attribut in Windows 7 festgelegt ist, muss der Wert 0 sein.
Ab Windows 8 kann der Wert 0 (raw AAC) oder 1 (ADTS AAC) sein.
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION Das AAC-Audioprofil und -Level. Optional. Die folgenden Werte werden unterstützt:
  • 0x29 (Standard)
  • 0x2A
  • 0x2B
  • 0x2C
  • 0x2E
  • 0x2F
  • 0x30
  • 0x31
  • 0x32
  • 0x33

In der folgenden Tabelle sind die Werte aufgeführt, die für das Attribut MF_MT_AAC_PROFILE_LEVEL_INDICATION verwendet werden können.

MF_MT_AAC_PROFILE_LEVEL_INDICATION Wert Profil
0x29 AAC-Profil L2
0x2A AAC-Profil L4
0x2B AAC-Profil L5
0x2C Hohe Effizienz v1 AAC-Profil L2
0x2E Hohe Effizienz v1 AAC-Profil L4
0x2F Hohe Effizienz v1 AAC-Profil L5
0x30 Hocheffizienz v2 AAC-Profil L2
0x31 Hocheffizienz v2 AAC-Profil L3
0x32 Hocheffizienz v2 AAC-Profil L4
0x33 Hocheffizienz v2 AAC-Profil L5

Nachdem der Ausgabetyp festgelegt wurde, aktualisiert der AAC-Encoder den Typ, indem er das attribut MF_MT_USER_DATA hinzufügt. Dieses Attribut enthält den Teil der HEAACWAVEINFO-Struktur , der nach der WAVEFORMATEX-Struktur (also nach dem wfx-Element ) angezeigt wird. Es folgen die AudioSpecificConfig()-Daten gemäß ISO/IEC 14496-3.

Jedes Ausgabebeispiel enthält einen komprimierten AAC-Frame ohne Header. Dieses Format entspricht dem von MPEG-2 definierten raw_data_block()-Element. Wenn das attribut MF_MT_AAC_PAYLOAD_TYPE im Ausgabetyp vorhanden ist, muss auf null festgelegt werden, um diesen Nutzlasttyp anzugeben.

Jedes Ausgabebeispiel enthält einen komprimierten AAC-Frame, der 1024 PCM-Beispiele entspricht. Bei einer Samplingrate von 48 Khz beträgt die Dauer eines komprimierten Frames beispielsweise 21,33 msec.

Wenn MF_MT_AAC_PAYLOAD_TYPE 0 (Standardwert) ist, enthält jedes Ausgabebeispiel ein raw_data_block()-Element gemäß ISO/IEC 13818-7.

Beispielmedientypen

Hier sehen Sie ein Beispiel für die Medientypen, die zum Codieren von 44,1 kHz und 160 KBit/s Stereoaudio in Roh-AAC erforderlich sind.

Eingabemedientyp:

attribute Wert
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 (optional)
MF_MT_AUDIO_BLOCK_ALIGNMENT 4 (optional)
MF_MT_ALL_SAMPLES_INDEPENDENT 1 (optional)
MF_MT_AVG_BITRATE 1411200 (optional)
MF_MT_FIXED_SIZE_SAMPLES 1 (optional)

Ausgabemedientyp:

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

Bemerkungen

In der aktuellen Implementierung muss jedes Eingabebeispiel eine gültige Zeit und Dauer aufweisen. Um die Beispielzeit festzulegen, rufen Sie IMFSample::SetSampleTime auf. Um die Beispieldauer festzulegen, rufen Sie IMFSample::SetSampleDuration auf.

Wenn die Beispielzeit nicht festgelegt ist, gibt die IMFTransform::P rocessInput-Methode des EncodersMF_E_NO_SAMPLE_TIMESTAMP zurück. Wenn die Beispieldauer nicht festgelegt ist, gibt die ProcessInput-MethodeMF_E_NO_SAMPLE_DURATION zurück.

Die Stichprobendauer kann wie folgt berechnet werden:

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

wobei nAudioSamplesPerChannel die Anzahl der PCM-Audiobeispiele pro Kanal im Eingabepuffer und nSamplesPerSec die Samplingrate in Stichproben pro Sekunde darstellt.

Hinweis

Wenn die Beispieldauer aufgrund eines Fehlers in der aktuellen Implementierung auf 0 festgelegt ist, ist der ProcessInput-Aufruf erfolgreich, aber ein nachfolgender Aufruf von IMFTransform::P rocessOutput löst eine Divide-by-Zero-Ausnahme aus. Um diesen Fehler zu vermeiden, legen Sie für jedes Eingabebeispiel eine gültige Dauer ohne Zero fest.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 7 [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2008 R2 [nur Desktop-Apps]
DLL
Mfaacenc.dll

Weitere Informationen

Codec-Objekte

AAC-Decoder

AAC-Medientypen

Audiomedientypen

MPEG-4-Unterstützung in Media Foundation

Unterstützte Medienformate in Media Foundation