1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

update ts_info, parse header, adaption field and PAT

This commit is contained in:
winlin 2013-11-17 23:34:36 +08:00
parent 611d2a7e46
commit 89332789d1

View file

@ -117,7 +117,7 @@ struct TSPacket
return ret; return ret;
} }
}header; } *header;
// variant ts packet adation field. // variant ts packet adation field.
struct AdaptionField struct AdaptionField
@ -334,7 +334,7 @@ struct TSPacket
return ret; return ret;
} }
}adaption_field; } *adaption_field;
// variant ts packet payload. // variant ts packet payload.
// PES packet or PSI table. // PES packet or PSI table.
@ -384,7 +384,7 @@ struct TSPacket
{ {
int ret = 0; int ret = 0;
size = ppkt->payload.size - ppkt->payload.pointer_field_size; size = ppkt->payload->size - ppkt->payload->pointer_field_size;
// not parsed bytes. // not parsed bytes.
if (size > 0) { if (size > 0) {
@ -526,12 +526,12 @@ struct TSPacket
{ {
int ret = 0; int ret = 0;
if (ppkt->header.payload_unit_start_indicator) { if (ppkt->header->payload_unit_start_indicator) {
pointer_field = *p++; pointer_field = *p++;
pointer_field_size = 1; pointer_field_size = 1;
} }
if (ppkt->header.pid == PID_PAT) { if (ppkt->header->pid == PID_PAT) {
type = TypePAT; type = TypePAT;
pat = new PAT(); pat = new PAT();
return pat->demux(ppkt, start, last, p); return pat->demux(ppkt, start, last, p);
@ -546,29 +546,43 @@ struct TSPacket
return ret; return ret;
} }
}payload; } *payload;
TSPacket()
{
header = new Header();
adaption_field = new AdaptionField();
payload = new Payload();
}
virtual ~TSPacket()
{
srs_freep(header);
srs_freep(adaption_field);
srs_freep(payload);
}
int demux(u_int8_t* start, u_int8_t* last, u_int8_t*& p) int demux(u_int8_t* start, u_int8_t* last, u_int8_t*& p)
{ {
int ret = 0; int ret = 0;
if ((ret = header.demux(this, start, last, p)) != 0) { if ((ret = header->demux(this, start, last, p)) != 0) {
return ret; return ret;
} }
if (header.adaption_field_control == AFC_ADAPTION_ONLY || header.adaption_field_control == AFC_BOTH) { if (header->adaption_field_control == AFC_ADAPTION_ONLY || header->adaption_field_control == AFC_BOTH) {
if ((ret = adaption_field.demux(this, start, last, p)) != 0) { if ((ret = adaption_field->demux(this, start, last, p)) != 0) {
trace("ts+header af(adaption field) decode error. ret=%d", ret); trace("ts+header af(adaption field) decode error. ret=%d", ret);
return ret; return ret;
} }
trace("ts+header af(adaption field decoded."); trace("ts+header af(adaption field) decoded.");
} }
// calc the user defined data size for payload. // calc the user defined data size for payload.
payload.size = TS_PACKET_SIZE - header.get_size() - adaption_field.get_size(); payload->size = TS_PACKET_SIZE - header->get_size() - adaption_field->get_size();
if (header.adaption_field_control == AFC_PAYLOAD_ONLY || header.adaption_field_control == AFC_BOTH) { if (header->adaption_field_control == AFC_PAYLOAD_ONLY || header->adaption_field_control == AFC_BOTH) {
if ((ret = payload.demux(this, start, last, p)) != 0) { if ((ret = payload->demux(this, start, last, p)) != 0) {
trace("ts+header payload decode error. ret=%d", ret); trace("ts+header payload decode error. ret=%d", ret);
return ret; return ret;
} }
@ -576,8 +590,8 @@ struct TSPacket
} }
trace("ts+header parsed finished. parsed: %d left: %d header: %d payload: %d(%d+%d)", trace("ts+header parsed finished. parsed: %d left: %d header: %d payload: %d(%d+%d)",
(int)(p - start), (int)(last - p), header.get_size(), payload.size, payload.pointer_field_size, (int)(p - start), (int)(last - p), header->get_size(), payload->size, payload->pointer_field_size,
payload.size - payload.pointer_field_size); payload->size - payload->pointer_field_size);
return finish(); return finish();
} }