2023年12月29日发(作者:)
HRESULT CTS_Stream_Parse::adjust_PMT_table(TS_PMT *packet, unsigned char* buffer) {
packet->table_id = buffer[0];
packet->section_syntax_indicator = buffer[1] >> 7;
packet->zero = buffer[1] >> 6 & 0x01;
packet->reserved_1 = buffer[1] >> 4 & 0x03;
packet->section_length = (buffer[1] & 0x0F) << 8 | buffer[2];
packet->program_number = buffer[3] << 8 | buffer[4]; packet->reserved_2 = buffer[5] >> 6;
packet->version_number = buffer[5] >> 1 & 0x1F;
packet->current_next_indicator = (buffer[5] << 7) >> 7;
packet->section_number = buffer[6];
packet->last_section_number = buffer[7];
packet->reserved_3 = buffer[8] >> 5;
packet->PCR_PID = ((buffer[8] << 8) | buffer[9]) & 0x1FFF;
packet->reserved_4 = buffer[10] >> 4;
packet->program_info_length = (buffer[10] & 0x0F) << 8 | buffer[11];
// Get CRC_32
int len = 0;
len = packet->section_length + 3;
packet->CRC_32 = (buffer[len-4] & 0x000000FF) << 24
| (buffer[len-3] & 0x000000FF) << 16
| (buffer[len-2] & 0x000000FF) << 8
| (buffer[len-1] & 0x000000FF);
int pos = 12;
// program info descriptor
if (packet->program_info_length != 0)
pos += packet->program_info_length;
// Get stream type and PID
for ( ; pos <= (packet->section_length + 2) - 4; ) {
TS_PMT_Stream pmt_stream;
pmt__type = buffer[pos];
packet->reserved_5 = buffer[pos+1] >> 5;
pmt_tary_PID = ((buffer[pos+1] << 8) | buffer[pos+2]) & 0x1FFF;
packet->reserved_6 = buffer[pos+3] >> 4;
pmt__info_length = (buffer[pos+3] & 0x0F) << 8 | buffer[pos+4];
pmt_ptor = 0x00;
if (pmt__info_length != 0) {
pmt_ptor = buffer[pos + 5];
for (int len = 2; len <= pmt__info_length; len ++) {
pmt_ptor = pmt_ptor<< 8 | buffer[pos + 4 + len];
}
pos += pmt__info_length;
}
pos += 5;
packet->PMT__back( pmt_stream );
TS_Stream__back( pmt_stream );
}
return 0;
}


发布评论