Projekte > MPEG-1/2 Video > Elementar Audio Streams

MPEG-1/2 Audio Header

MPEG-1/2 Audio ist in der Norm ISO/IEC 11172-3 beschrieben. Das MPEG Audio besteht aus Frames.

Aufbau

  • 12 Bit: Syncword FFF
  • 1 Bit: MPEG ID.
  • 2 Bit: Layer.
  • 1 Bit: Protection.
  • 4 Bit: Bitrate Index
  • 2 Bit: Samplerate.
  • 1 Bit: Padding.
  • 1 Bit: Private.
  • 2 Bit: Mode.
  • 2 Bit: Mode extension.
  • 1 Bit: Copyright.
  • 1 Bit: Original.
  • 2 Bit: Emphasis.

Wenn das Protection Flag nicht gesetzt ist, folgen 2 Byte für die CRC-Prüfung.

Als Schema:

 76543210
0Syncword = FFF
1noch SyncwordMPEG IDLayerProtection
2Bitrate IndexSample RatePaddingPrivate
3ModeMode ExtensionCopyrightOriginalEmphasis

Wenn das Protection Flag nicht gesetzt ist:

 76543210
4CRC Check Bits
5noch CRC Check Bits

Die MPEG ID ist:

  1. MPEG-2
  2. MPEG-1

Die Layer sind:

  1. Reserviert.
  2. Layer 3
  3. Layer 2
  4. Layer 1

Die Sample Rate ist die Abtastfrequenz und die Werte (0 bedeutet reserviert) sind:

(22050, 24000, 16000, 0)        // MPEG-2
(44100, 48000, 32000, 0)        // MPEG-1

Die Modes sind:

  1. Stereo
  2. Joint Stereo - Verbundenes Stereo
  3. Dual Channel - Zweimal Mono (Zweikanalton)
  4. Single Channel - Mono

Die Mode Extension beschreibt bei Mode 1 (Stereo) das Stereo Schema.

Die Bitraten lassen sich unter Berücksichtigung der MPEG-Version und des Layers aus der nachfolgenden Tabelle ermitteln:

// MPEG-2
( 0,  0,  0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0)  // Reserviert
( 0,  8, 16, 24,  32,  40,  48,  56,  64,  80,  96, 112, 128, 144, 160, 0)  // Layer 3
( 0,  8, 16, 24,  32,  40,  48,  56,  64,  80,  96, 112, 128, 144, 160, 0)  // Layer 2
( 0, 32, 48, 56,  64,  80,  96, 112, 128, 144, 160, 176, 192, 224, 256, 0)  // Layer 1

// MPEG-1
( 0,  0,  0,  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0)
( 0, 32, 40, 48,  56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 0)  // Layer 3
( 0, 32, 48, 56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 384, 0)  // Layer 2
( 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 0)  // Layer 1

Für Layer II habe ich die folgende Tabelle mit den möglichen Modes gefunden:

  1. 0
  2. 32
  3. 48
  4. 56
  5. 64
  6. 80
  7. 96
  8. 112
  9. 128
  10. 160
  11. 192
  12. 224
  13. 256
  14. 320
  15. 384
  16. 0

 
Single Channel
Single Channel
Single Channel
Alle
Single Channel
Alle
Alle
Alle
Alle
Alle
Stereo, Intensity Stereo, Dual Channel
Stereo, Intensity Stereo, Dual Channel
Stereo, Intensity Stereo, Dual Channel
Stereo, Intensity Stereo, Dual Channel
 

Das Padding Flag ist gesetzt, wenn das Frame Padding Bits enthält. Das bedeutet, das Frame ist ein Byte größer. Das Private Flag wird bei ISO(?) nicht benutzt.

Das Copyright Flag ist gesetzt, wenn die Datei urheberrechtlich geschützt ist. Beim Original ist das Original Flag gesetzt.

Die Werte der Emphasis sind:

  1. Keine
  2. 50/15 Microsekunden
  3. Reserviert
  4. CCITT J.17

Inoffizielle Erweiterung:

Die MPEG Version 2.5 war im Standard nicht vorgesehen. Bei Version 2 ist die MPEG ID 0. Für Version 2.5 wird zusätzlich das letzte Bit des Syncwords auf 0 gesetzt und somit das Syncword auf FFE geändert. Unter Berücksichtigung der Version 2.5 sieht der Header dann so aus:

  • 11 Bit: Syncword (alle Bits: 1)
  • 2 Bit: MPEG Version.
  • 2 Bit: Layer.
  • 1 Bit: Protection.
  • 4 Bit: Bitrate Index.
  • 2 Bit: Samplerate.
  • 1 Bit: Padding.
  • 1 Bit: Private.
  • 2 Bit: Mode.
  • 2 Bit: Mode extension.

Als Schema:

 76543210
0Syncword
1noch SyncwordMPEG IDLayerProtection
2Bitrate IndexSample RatePaddingPrivate
3ModeMode ExtensionCopyrightOriginalEmphasis

Die MPEG-Versionen sind dann:

  1. 'MPEG Version 2.5'
  2. Reserviert
  3. 'MPEG Version 2'
  4. 'MPEG Version 1'

Für MPEG-2.5 gelten die selben Bitraten wie für MPEG-2::

// MPEG-2, MPEG-2.5
( 0,  0,  0,  0,  0,  0,  0,   0,   0,   0,   0,   0,   0,   0,   0, 0 )  // Reserviert
( 0,  8, 16, 24, 32, 40, 48,  56,  64,  80,  96, 112, 128, 144, 160, 0 )  // Layer 3
( 0,  8, 16, 24, 32, 40, 48,  56,  64,  80,  96, 112, 128, 144, 160, 0 )  // Layer 2
( 0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 0 )  // Layer 1

Die Sample Raten halbieren sich gegenüber MPEG-2:

( 11025, 12000,  8000, 0 )        // MPEG-2.5
(     0,     0,     0, 0 )        // Reserviert
( 22050, 24000, 16000, 0 )        // MPEG-2
( 44100, 48000, 32000, 0 )        // MPEG-1

Spieldauer, Framegröße

Der Stream enthält keine Angaben zur Spieldauer oder Framegröße. Deshalb muss diese wie folgt errechnet werden:

Spieldauer = Dateigröße / Bitrate * 8

Die Spieldauer ist der Quotient aus der Dateigröße und der Bitrate. Die Dateigröße wird in Byte (B) und die Bitrate in Bit je Sekunde (b/s) angegeben. Für die Umrechnung von Bit in Byte sorgt der Faktor 8. Das Ergebnis liegt dann in Sekunden vor.

Framegröße = ( (Samples je Frame / 8 * Bitrate) / Samplingrate) + Paddinggröße

Jedes Frame enthält in Abhängigkeit von der MPEG Version und dem Layer eine bestimmte Anzahl Samples:

  Layer 1 Layer 2 Layer 3
MPEG-1 384 1152 1152
MPEG-2, 2.5 384 1152 576

Die Bitrate und Samplingrate werden beide mit oder ohne "Kilo" angegeben. Das Ergebnis trägt die Einheit Byte. Die 8 dient wiederum der Umrechnung von Bit auf Byte. Ohne Paddinggröße ist das Ergebnis in der Regel keine Ganzzahl. Die Paddinggröße hat keinen festen Wert. Sie dient dazu, das Ergebnis in Abhängigkeit vom Padding Flag im Header auf den nächsten ganzzahligen Wert ab- bzw aufzurunden.

Hinweis: Beachtet man die Framegröße nicht und scannt nur nach dem Syncword, findet man mehr Frames als tatsächlich enthalten sind. Diese erkennt man in der Regel an abweichenden Headerwerten.

Testprogramm

Mit dem folgenden kleinen Testprogramm können MPEG Audio Streams gescannt werden.

MPA Audio Test (164 kb) - MD5 (1 kb)
Stand: 17. September 2009