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