概要については、MPEG-2解説@Pioneerが詳しい。

以下、MPEG-2の規格を見ていくと…
MPEG-2 Program Streamは、
MPEG2_program_stream() {
    do {
        pack()
    } while (nextbits()==pack_start_code)
    MPEG_program_end_code                   // 32 bslbf 
}
と、1個以上のpackが連続したもので、最後に、MPEG_Program_end_codeが付く。
※MPEG_program_end_codeは、0x000001B9

packは、
pack() {
    pack_header()
    while (nextbits()==pack_start_code) {
        PES_packet()
    }
}
と、pack_headerから始まり、0個以上のPES_packetが連続するデータ。
※pack_start_codeは、0x000001BA

pack_headerは、
pack_header() {
    pack_start_code                       // 32 bslbf
    '01'                                  //  2 bslbf
    system_clock_reference_base[32..30]   //  3 bslbf
    marker_bit                            //  1 bslbf
    system_clock_reference_base[29..15]   // 15 bslbf
    marker_bit                            //  1 bslbf
    system_clock_reference_base[14..0]    // 15 bslbf
    marker_bit                            //  1 bslbf
    system_clock_reference_extension      //  9 uimsbf
    marker_bit                            //  1 bslbf
    program_mux_rate                      // 22 uimsbf
    marker_bit                            //  1 bslbf
    marker_bit                            //  1 bslbf
    Reserved                              //  5 bslbf
    pack_staffing_length                  //  3 uimsbf
    for(i=0;i<pack_staffing_length;i++) {
        stuffing_byte                     //  8 bslbf
    }
    for(nextbits()==system_header_start_code) {
        system_header()
    }
}
と、system_clock_referenceと、program_mux_rateの情報を持ち、オプションとして、system_headerを持つ。
※system_clock_reference_baseは、90kHz
※system_clock_reference_extenstionは、0~299
※system_header_start_codeは、0x000001BB
最終更新:2007年03月03日 21:02