Beispiel #1
0
 def __init__(self, data, base_cls):
     """
     Initialize our packet. Start point class required.
     """
     BitStructure.__init__(self, self.__class__.__name__)
     self.data = data
     self.base_cls = base_cls
     self.protocols = []
Beispiel #2
0
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
Beispiel #3
0
 def __init__(self, *arg, **karg):
     BitStructure.__init__(self, *arg, **karg)
Beispiel #4
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)