Start

Über mich

Kontakt

Sitemap

Lizenz

Anleitungen

DVD, miniDVD

SVCD

Audio, Audio-CD (CD-DA)

AVI

Software

Von Freunden und Bekannten

Eigene Programme

Programmierung

Delphi

Lazarus

Delphi/Lazarus

Projekte

MPEG-1/2 Video

Optische Laufwerke

Audio-CD (CDDA)

Raspberry Pi Dashcam

Verschiedenes

MPEG 2 Schnitt

Project X

VCD Easy

Hardlinks

Windows

Links

Software

Projekte | MPEG - Elementar Audio Streams - MPEG-1/2 Audio Header

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

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:

Single Channel
00 
132
248Single Channel
356Single Channel
464Alle
580Single Channel
696Alle
7112Alle
8128Alle
9160Alle
10192Alle
11224Stereo, Intensity Stereo, Dual Channel
12256Stereo, Intensity Stereo, Dual Channel
13320Stereo, Intensity Stereo, Dual Channel
14384Stereo, Intensity Stereo, Dual Channel
150 

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:

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 1Layer 2Layer 3
MPEG-138411521152
MPEG-2, 2.53841152576

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

Audio Elementar Streams > MPEG-1/2 Audio Header > AC3 (Dolby Digital) Header