Как рассчитать N1 и N2 в транспорте mpeg2 для разбора (demux) - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь написать свой собственный демакс.я достиг пакета PES

Я собрал команду getbit (s), getbyte (s) для извлечения каждой записи в пакет pes.

Я не могу вычислить N1 (начинка)) и N2 (фактическая полезная нагрузка) при достижении этой точки.

Может ли кто-нибудь помочь понять, что такое N1 и N2 для LOOP прямо в байтах?

PES_packet() {
 packet_start_code_prefix 24 bslbf
 stream_id 8 uimsbf
 PES_packet_length 16 uimsbf
 if (stream_id != program_stream_map
 && stream_id != padding_stream
 && stream_id != private_stream_2
 && stream_id != ECM
 && stream_id != EMM
 && stream_id != program_stream_directory
 && stream_id != DSMCC_stream
 && stream_id != ITU-T Rec. H.222.1 type E stream) {

 '10' 2 bslbf
 PES_scrambling_control 2 bslbf
 PES_priority 1 bslbf
 data_alignment_indicator 1 bslbf
 copyright 1 bslbf
 original_or_copy 1 bslbf
 PTS_DTS_flags 2 bslbf
 ESCR_flag 1 bslbf
 ES_rate_flag 1 bslbf
 DSM_trick_mode_flag 1 bslbf
 additional_copy_info_flag 1 bslbf
 PES_CRC_flag 1 bslbf
 PES_extension_flag 1 bslbf
 PES_header_data_length 8 uimsbf
 if (PTS_DTS_flags == '10') {
 '0010' 4 bslbf
 PTS [32..30] 3 bslbf
 marker_bit 1 bslbf
 PTS [29..15] 15 bslbf
 marker_bit 1 bslbf
 PTS [14..0] 15 bslbf
 marker_bit 1 bslbf
 } 
ISO/IEC 13818-1 : 2000 (E)
32 ITU-T Rec. H.222.0 (2000 E)
Table 2-17 – PES packet (continued)
Syntax No. of bits Mnemonic
 if (PTS_DTS_flags == '11') {
 '0011' 4 bslbf
 PTS [32..30] 3 bslbf
 marker_bit 1 bslbf
 PTS [29..15] 15 bslbf
 marker_bit 1 bslbf
 PTS [14..0] 15 bslbf
 marker_bit 1 bslbf
 '0001' 4 bslbf
 DTS [32..30] 3 bslbf
 marker_bit 1 bslbf
 DTS [29..15] 15 bslbf
 marker_bit 1 bslbf
 DTS [14..0] 15 bslbf
 marker_bit 1 bslbf
 }
 if (ESCR_flag == '1') {
 reserved 2 bslbf
 ESCR_base[32..30] 3 bslbf
 marker_bit 1 bslbf
 ESCR_base[29..15] 15 bslbf
 marker_bit 1 bslbf
 ESCR_base[14..0] 15 bslbf
 marker_bit 1 bslbf
 ESCR_extension 9 uimsbf
 marker_bit 1 bslbf
 }
 if (ES_rate_flag == '1') {
 marker_bit 1 bslbf
 ES_rate 22 uimsbf
 marker_bit 1 bslbf
 }
 if (DSM_trick_mode_flag == '1') {
 trick_mode_control 3 uimsbf
 if ( trick_mode_control == fast_forward ) {
 field_id 2 bslbf
 intra_slice_refresh 1 bslbf
 frequency_truncation 2 bslbf
 }
 else if ( trick_mode_control == slow_motion ) {
 rep_cntrl 5 uimsbf
 }
 else if ( trick_mode_control == freeze_frame ) {
 field_id 2 uimsbf
 reserved 3 bslbf
 }
 else if ( trick_mode_control == fast_reverse ) {
 field_id 2 bslbf
 intra_slice_refresh 1 bslbf
 frequency_truncation 2 bslbf
 else if ( trick_mode_control == slow_reverse ) {
 rep_cntrl 5 uimsbf
 }
 else
 reserved 5 bslbf
 }
 if ( additional_copy_info_flag == '1') {
 marker_bit 1 bslbf
 additional_copy_info 7 bslbf
 }
 if ( PES_CRC_flag == '1') {
 previous_PES_packet_CRC 16 bslbf
 } 
 ISO/IEC 13818-1 : 2000 (E)
 ITU-T Rec. H.222.0 (2000 E) 33
Table 2-17 – PES packet (concluded)
Syntax No. of bits Mnemonic
 if ( PES_extension_flag == '1') {
 PES_private_data_flag 1 bslbf
 pack_header_field_flag 1 bslbf
 program_packet_sequence_counter_flag 1 bslbf
 P-STD_buffer_flag 1 bslbf
 reserved 3 bslbf
 PES_extension_flag_2 1 bslbf
 if ( PES_private_data_flag == '1') {
 PES_private_data 128 bslbf
 }
 if (pack_header_field_flag == '1') {
 pack_field_length 8 uimsbf
 pack_header()
 }
 if (program_packet_sequence_counter_flag == '1') {
 marker_bit 1 bslbf
 program_packet_sequence_counter 7 uimsbf
 marker_bit 1 bslbf
 MPEG1_MPEG2_identifier 1 bslbf
 original_stuff_length 6 uimsbf
 }
 if ( P-STD_buffer_flag == '1') {
 '01' 2 bslbf
 P-STD_buffer_scale 1 bslbf
 P-STD_buffer_size 13 uimsbf
 }
 if ( PES_extension_flag_2 == '1') {
 marker_bit 1 bslbf
 PES_extension_field_length 7 uimsbf
 for (i = 0; i < PES_extension_field_length; i++) {
 reserved 8 bslbf
 }
 }
 }
 for (i = 0; i < **N1**; i++) {
 stuffing_byte 8 bslbf
 }
 for (i = 0; i < **N2**; i++) {
 PES_packet_data_byte 8 bslbf
 }
 }
 else if ( stream_id == program_stream_map
 || stream_id == private_stream_2
 || stream_id == ECM
 || stream_id == EMM
 || stream_id == program_stream_directory
 || stream_id == DSMCC_stream
 || stream_id == ITU-T Rec. H.222.1 type E stream ) {
 for (i = 0; i < PES_packet_length; i++) {
 PES_packet_data_byte 8 bslbf
 }
 }
 else if ( stream_id == padding_stream) {
 for (i = 0; i < PES_packet_length; i++) {
 padding_byte 8 bslbf
 }
 }
}
...