Os arquivos MPEG-2 têm um formato que não é muito fácil de achar na Internet. Cada arquivo é formado por uma série de packs, de tipos diversos. Cada pack tem um header, seguido do seu conteúdo. O formato dos packs é o seguinte:
Pack header:
- 0..3: 00 00 01 ba
- 4..9: 01SSS1SS SSSSSSSS SSSSS1SS SSSSSSSS SSSSS1EE EEEEEEE1
- 10..12: MMMMMMMM MMMMMMMM MMMMMM11
- 13: xxxxxLLL
- ?: ff ...
S = SCR (System Clock Reference), 33 bits, 90 kHz
E = SCR extension, 9 bits, 27 MHz (0-299, somado a SCR)
M = Program Mux Rate, 22 bits, unidades de 50 bits por segundo (> 0)
x = Reservado, 5 bits
L = Pack stuffing length, 3 bits: Número de bytes de enchimento (ff) que seguem
System header:
- 0..3: 00 00 01 bb
- 4..5: HHHHHHHH HHHHHHHH
- 6..8: 1RRRRRRR RRRRRRRR RRRRRRR1
- 9: AAAAAAFC
- 10: LK1VVVVV
- 11: Pxxxxxxx
- ?: NLoop
H = Header length, 16 bits (número de bytes)
R = Rate bound, 22 bits
A = Audio bound, 6 bits
F = Fixed flag
C = CSPS flag
L = Audio lock flag
K = Video lock flag
V = Video bound, 5 bits
P = Packet rate restriction flag
x = Reservado, 7 bits
NLoop:
- 0: IIIIIIII
- 1..2: 11SZZZZZ ZZZZZZZZ
- 3: IIIIIIII
- 4..5: 11SZZZZZ ZZZZZZZZ
- ...
I = Stream ID
S = P-STD buffer bound scale
Z = P-STD buffer size bound
http://www.ietf.org/mail-archive/web/avt/current/msg01807.html
http://www.cs.ucl.ac.uk/teaching/GZ05/10-system-streams.pdf
http://www.codeproject.com/KB/audio-video/program_stream_analyzer.aspx
http://osdir.com/ml/video.dvbcut.user/2006-01/msg00006.html
http://dvd.sourceforge.net/dvdinfo/index.html
http://en.wikipedia.org/wiki/Program_Stream
http://www.codeproject.com/KB/audio-video/mpegaudioinfo.aspx