Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 |
|