This is a quick reference to the various headers and streams found in MPEG/DVD. For a complete description you should get a copy of ISO/IEC 13818.
This is an incomplete work-in-progress The header
Every stream or table begins with a 32-bit start code, codes 00 through B8 are video stream start codes (fully defined in 13818-2), and codes B9-FF are stream-id's
| byte 0 | byte 1 | byte 2 | byte 3 |
0000 0000 0000 0000 0000 0001 Start code prefix | Stream ID |
|---|
| | | Stream ID | used for | | 0xB9 | Program end (terminates a program stream) | | 0xBA | Pack header | | 0xBB | System Header | | 0xBC | Program Stream Map | | 0xBD | Private stream 1 | | 0xBE | Padding stream | | 0xBF | Private stream 2 | | 0xC0 - 0xDF | MPEG-1 or MPEG-2 audio stream | | 0xE0 - 0xEF | MPEG-1 or MPEG-2 video stream | | 0xF0 | ECM Stream | | 0xF1 | EMM Stream | | 0xF2 | ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Annex A or ISO/IEC 13818-6_DSMCC_stream | | 0xF3 | ISO/IEC_13522_stream | | 0xF4 | ITU-T Rec. H.222.1 type A | | 0xF5 | ITU-T Rec. H.222.1 type B | | 0xF6 | ITU-T Rec. H.222.1 type C | | 0xF7 | ITU-T Rec. H.222.1 type D | | 0xF8 | ITU-T Rec. H.222.1 type E | | 0xF9 | ancillary_stream | | 0xFA - 0xFE | reserved | | 0xFF | Program Stream Directory | |
Variable length. | byte 4 | byte 5 | byte 6 | byte 7 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| temperal sequence number | frame type 1=I, 2=P 3=B, 4=D | VBV delay | --- |
additional fields appended beginning at byte 7 bit 2:
If frame type = 2 (P) or 3 (B) the following 4 bits are appended to the header:
| 3 | 2 | 1 | 0 |
| full_pel_forward_vector | forward_f_code |
This field is used by MPEG-1 only, for MPEG-2 it should be set to 0 1 1 1 If frame type = 3 (B) the following 4 bits are appended to the header:
| 3 | 2 | 1 | 0 |
| full_pel_backward_vector | backward_f_code |
This field is used by MPEG-1 only, for MPEG-2 it should be set to 0 1 1 1 additionally if the next bit is "1" (extra_bit_picture) it is followed by 8 bits of "extra" data (discarded by decoders). This continues until a "0" bit is encountered.
Variable length. | byte 4 | byte 5 | byte 6 | byte 7 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| horizontal size | vertical size | aspect ratio | frame rate |
| byte 8 | byte 9 | byte 10 | byte 11 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| bit rate | 1 | VBV buffer size | constrained parameters flag | load intra quantiser matrix | (load non-intra quantiser matrix) |
If either load quantiser matrix flag is =1, it is immediately followed by the 64 byte table (moving the "load non-intra quantiser matrix" flag, in the case of "load intra quantiser matrix") | Code | Aspect Ratio | Frame Rate |
| 0 | forbidden | forbidden |
| 1 | 1:1 | 24000/1001 (23.976) |
| 2 | 4:3 | 24 |
| 3 | 16:9 | 25 |
| 4 | 2.21:1(not used in DVD) | 30000/1001 (29.97) |
| 5 | reserved | 30 |
| 6 | reserved | 50 |
| 7 | reserved | 60000/1001 (59.94) |
| 8 | reserved | 60 |
| 9 | reserved | reserved |
| : |
| 15 | reserved | reserved |
There are a variety of extensions, denoted by the first 4 bits. Fixed length. | byte 4 | byte 5 | byte 6 | byte 7 | byte 8 | byte 9 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 0001 | profile and level | progressive_sequence | chroma_format | horizontal size extension | vertical size extension | bit rate extension | 1 | vbv buffer size extension | low delay | frame rate extension n | frame rate extension d |
Variable length. | byte 4 | byte 5 | byte 6 | byte 7 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 0010 | video format | color description flag =0 | (not present) |
| =1 | color primaries | transfer characteristics | matrix coefficients |
byte 5 byte 8 | byte 6 byte 9 | byte 7 byte 10 | byte 8 byte 11 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| display horizontal size | 1 | display vertical size | 0 0 0 |
Variable length. | byte 4 | byte 5 | byte 6 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 1000 | f_code[0][0] (forward horizontal) | f_code[0][1] (forward vertical) | f_code[1][0] (backward horizontal) | f_code[1][1] (backward vertical) | intra_DC_precision | picture_structure |
| byte 7 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| Top_Field_First | frame_pred_frame_dct | concealment_motion_vectors | q_scale_type | intra_vlc_format | alternate_scan | Repeat_First_Field | chroma_420_type |
| byte 8 | byte 9 | byte 10 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| progressive_frame | composite_display =0 | 0 0 0 0 0 0 | (not present) |
| =1 | v_axis | field_sequence | sub_carrier | burst_amplitude | sub_carrier_phase | 0 0 |
Fixed length, contains 3 flags and the time stamp for the first frame. | byte 4 | byte 5 | byte 6 | byte 7 |
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| drop frame flag | hour (0-23) | minute (0-59) | 1 | second (0-59) | frame (0-59) | closed GOP | broken GOP | 0 0 0 0 0 |
Source
Comments