def parse_PES_START_INFO ( bs_input , data): ''' Parsing data into PES_START_INFO and append it to bs_input (BitStructre) ''' #log.debug("entering parse_PES_START_INFO") bs = BitStructure('PES_START_INFO') bs.append(BitField('packet_start_code_prefix', BYTE_SIZE * 3)) bs.append(BitField('stream_id', BYTE_SIZE * 1)) #defult 0xbd bs.append(BitField('PES_packet_length', BYTE_SIZE * 2)) bs_input.append(bs) flags = BitStructure('PES_HEADER_FLAGS') flags.append(BitField('PES_fixed_value', BIT_SIZE * 2)) flags.append(BitField('PES_scrambling_control', BIT_SIZE * 2)) flags.append(BitField('PES_priority', BIT_SIZE * 1)) flags.append(BitField('data_alignment_indicator', BIT_SIZE * 1)) flags.append(BitField('copyright', BIT_SIZE * 1)) flags.append(BitField('original_or_copy', BIT_SIZE * 1)) flags.append(BitField('PTS_DTS_flags', BIT_SIZE * 2)) flags.append(BitField('ESCR_flag', BIT_SIZE * 1)) flags.append(BitField('ES_rate_flag', BIT_SIZE * 1)) flags.append(BitField('DSM_trick_mode_flag', BIT_SIZE * 1)) flags.append(BitField('addtional_copy_info_flag', BIT_SIZE * 1)) flags.append(BitField('PES_CRC_flag', BIT_SIZE * 1)) flags.append(BitField('PES_extention_flag', BIT_SIZE * 1)) bs_input.append(flags) bs_input.set_array(data) if (bs_input.field('PES_HEADER_FLAGS').field('PTS_DTS_flags').value() == 0x2): bs_input.append(BitField('PES_HEADER_PTS_Length', BYTE_SIZE * 1)) pts = BitStructure('PES_HEADER_PTS') pts.append(BitField('Fixed_PTS_HEADER', BIT_SIZE * 4 )) pts.append(BitField('PTS 32..30', BIT_SIZE * 3 )) pts.append(BitField('marker bit 1', BIT_SIZE * 1 )) pts.append(BitField('PTS 29..15', BIT_SIZE * 15)) pts.append(BitField('marker bit 2', BIT_SIZE * 1 )) pts.append(BitField('PTS 14..0', BIT_SIZE * 15)) pts.append(BitField('marker bit 3', BIT_SIZE * 1 )) bs_input.append(pts) bs_input.set_array(data) parsed_pts = bs_input.field('PES_HEADER_PTS') decimal_pts = convert_BLOB_TO_PTS(parsed_pts) if (decimal_pts == 5426837): print "found !!!" print bs_input print curr_pack_num print "PTS in Decimal: "+str(decimal_pts) parsed_pts.desc = "PTS in Decimal: "+str(decimal_pts) else: # No PTS in header #log.error("No PTS in header") return 1 #log.debug("exit parse_PES_START_INFO") return 0
def parseTS_Packet(data): #log.debug("entering parseTS_Packet") bs = BitStructure('PACKET') bs.append(BitField('sync byte', BIT_SIZE * 8)) bs.append(BitField('Transport Error Indicator (TEI)', BIT_SIZE * 1)) #defult 0xbd bs.append(BitField('Payload Unit Start Indicator', BIT_SIZE * 1)) bs.append(BitField('Transport Priority', BIT_SIZE * 1)) bs.append(BitField('PID', BIT_SIZE * 13)) bs.append(BitField('Scrambling control', BIT_SIZE * 2)) bs.append(BitField('Adaptation field exist', BIT_SIZE * 1)) bs.append(BitField('Payload data exist', BIT_SIZE * 1)) bs.append(BitField('Continuity counter', BIT_SIZE * 4)) bs.set_array(data) pusi = bs.field('Payload Unit Start Indicator').value() pid = bs.field('PID').value() if (pusi == 0x1 and pid == 0x906): print "PUSI !!! on: " + str(pid) if (bs.field('Adaptation field exist').value() == 0x1): parseTS_Adaptation(bs, data) if (bs.field('Payload data exist').value() == 0x1) and (pusi == 0x1): parse_PES_START_INFO(bs, data)