正在显示
2 个修改的文件
包含
43 行增加
和
29 行删除
trunk/doc/aac-iso-13818-7.pdf
0 → 100644
不能预览此文件类型
| @@ -48,6 +48,11 @@ SECTION 2 C TECHNICAL ELEMENTS | @@ -48,6 +48,11 @@ SECTION 2 C TECHNICAL ELEMENTS | ||
| 48 | 2.4.4.6 Conditional access Table | 48 | 2.4.4.6 Conditional access Table |
| 49 | 2.5 Program Stream bitstream requirements | 49 | 2.5 Program Stream bitstream requirements |
| 50 | 2.6 Program and program element descriptors | 50 | 2.6 Program and program element descriptors |
| 51 | + 2.6.2 Video stream descriptor | ||
| 52 | + 2.6.4 Audio stream descriptor | ||
| 53 | + 2.6.34 IBP descriptor | ||
| 54 | + 2.6.37 Semantic definition of fields in MPEG-4 video descriptor | ||
| 55 | + 2.6.38 MPEG-4 audio descriptor | ||
| 51 | 2.7 Restrictions on the multiplexed stream semantics | 56 | 2.7 Restrictions on the multiplexed stream semantics |
| 52 | Annex A ¨C CRC Decoder Model | 57 | Annex A ¨C CRC Decoder Model |
| 53 | */ | 58 | */ |
| @@ -129,7 +134,9 @@ public: | @@ -129,7 +134,9 @@ public: | ||
| 129 | int finish(); | 134 | int finish(); |
| 130 | }; | 135 | }; |
| 131 | 136 | ||
| 132 | -// TSHeader declares. | 137 | +/** |
| 138 | +* 2.4.3.2 Transport Stream packet layer. page 36. | ||
| 139 | +*/ | ||
| 133 | class TSHeader | 140 | class TSHeader |
| 134 | { | 141 | { |
| 135 | public: | 142 | public: |
| @@ -367,6 +374,7 @@ public: | @@ -367,6 +374,7 @@ public: | ||
| 367 | 374 | ||
| 368 | TSPayloadPMT(); | 375 | TSPayloadPMT(); |
| 369 | virtual ~TSPayloadPMT(); | 376 | virtual ~TSPayloadPMT(); |
| 377 | + TSPMTESInfo* at(int index); | ||
| 370 | int demux(TSContext* ctx, TSPacket* pkt, u_int8_t* start, u_int8_t* last, u_int8_t*& p, TSMessage*& pmsg); | 378 | int demux(TSContext* ctx, TSPacket* pkt, u_int8_t* start, u_int8_t* last, u_int8_t*& p, TSMessage*& pmsg); |
| 371 | }; | 379 | }; |
| 372 | 380 | ||
| @@ -375,10 +383,10 @@ public: | @@ -375,10 +383,10 @@ public: | ||
| 375 | */ | 383 | */ |
| 376 | enum TSPESStreamId | 384 | enum TSPESStreamId |
| 377 | { | 385 | { |
| 378 | - PES_program_stream_map = 0b10111100, | ||
| 379 | - PES_private_stream_1 = 0b10111101, | ||
| 380 | - PES_padding_stream = 0b10111110, | ||
| 381 | - PES_private_stream_2 = 0b10111111, | 386 | + PES_program_stream_map = 0b10111100, // 0xbc |
| 387 | + PES_private_stream_1 = 0b10111101, // 0xbd | ||
| 388 | + PES_padding_stream = 0b10111110, // 0xbe | ||
| 389 | + PES_private_stream_2 = 0b10111111, // 0xbf | ||
| 382 | 390 | ||
| 383 | // 110x xxxx | 391 | // 110x xxxx |
| 384 | // ISO/IEC 13818-3 or ISO/IEC 11172-3 or ISO/IEC 13818-7 or ISO/IEC | 392 | // ISO/IEC 13818-3 or ISO/IEC 11172-3 or ISO/IEC 13818-7 or ISO/IEC |
| @@ -389,24 +397,24 @@ enum TSPESStreamId | @@ -389,24 +397,24 @@ enum TSPESStreamId | ||
| 389 | // 1110 xxxx | 397 | // 1110 xxxx |
| 390 | // ITU-T Rec. H.262 | ISO/IEC 13818-2 or ISO/IEC 11172-2 or ISO/IEC | 398 | // ITU-T Rec. H.262 | ISO/IEC 13818-2 or ISO/IEC 11172-2 or ISO/IEC |
| 391 | // 14496-2 video stream number xxxx | 399 | // 14496-2 video stream number xxxx |
| 392 | - // (stream_id>>5)&0x07 == PES_audio_prefix | 400 | + // (stream_id>>4)&0x0f == PES_audio_prefix |
| 393 | PES_video_prefix = 0b1110, | 401 | PES_video_prefix = 0b1110, |
| 394 | 402 | ||
| 395 | - PES_ECM_stream = 0b11110000, | ||
| 396 | - PES_EMM_stream = 0b11110001, | ||
| 397 | - PES_DSMCC_stream = 0b11110010, | ||
| 398 | - PES_13522_stream = 0b11110011, | ||
| 399 | - PES_H_222_1_type_A = 0b11110100, | ||
| 400 | - PES_H_222_1_type_B = 0b11110101, | ||
| 401 | - PES_H_222_1_type_C = 0b11110110, | ||
| 402 | - PES_H_222_1_type_D = 0b11110111, | ||
| 403 | - PES_H_222_1_type_E = 0b11111000, | ||
| 404 | - PES_ancillary_stream = 0b11111001, | ||
| 405 | - PES_SL_packetized_stream = 0b11111010, | ||
| 406 | - PES_FlexMux_stream = 0b11111011, | 403 | + PES_ECM_stream = 0b11110000, // 0xf0 |
| 404 | + PES_EMM_stream = 0b11110001, // 0xf1 | ||
| 405 | + PES_DSMCC_stream = 0b11110010, // 0xf2 | ||
| 406 | + PES_13522_stream = 0b11110011, // 0xf3 | ||
| 407 | + PES_H_222_1_type_A = 0b11110100, // 0xf4 | ||
| 408 | + PES_H_222_1_type_B = 0b11110101, // 0xf5 | ||
| 409 | + PES_H_222_1_type_C = 0b11110110, // 0xf6 | ||
| 410 | + PES_H_222_1_type_D = 0b11110111, // 0xf7 | ||
| 411 | + PES_H_222_1_type_E = 0b11111000, // 0xf8 | ||
| 412 | + PES_ancillary_stream = 0b11111001, // 0xf9 | ||
| 413 | + PES_SL_packetized_stream = 0b11111010, // 0xfa | ||
| 414 | + PES_FlexMux_stream = 0b11111011, // 0xfb | ||
| 407 | // reserved data stream | 415 | // reserved data stream |
| 408 | // 1111 1100 … 1111 1110 | 416 | // 1111 1100 … 1111 1110 |
| 409 | - PES_program_stream_directory= 0b11111111, | 417 | + PES_program_stream_directory= 0b11111111, // 0xff |
| 410 | }; | 418 | }; |
| 411 | 419 | ||
| 412 | 420 | ||
| @@ -1005,6 +1013,11 @@ TSPayloadPMT::~TSPayloadPMT() | @@ -1005,6 +1013,11 @@ TSPayloadPMT::~TSPayloadPMT() | ||
| 1005 | ES_info.clear(); | 1013 | ES_info.clear(); |
| 1006 | } | 1014 | } |
| 1007 | 1015 | ||
| 1016 | +TSPMTESInfo* TSPayloadPMT::at(int index) | ||
| 1017 | +{ | ||
| 1018 | + return ES_info.at(index); | ||
| 1019 | +} | ||
| 1020 | + | ||
| 1008 | int TSPayloadPMT::demux(TSContext* ctx, TSPacket* pkt, u_int8_t* start, u_int8_t* last, u_int8_t*& p, TSMessage*& pmsg) | 1021 | int TSPayloadPMT::demux(TSContext* ctx, TSPacket* pkt, u_int8_t* start, u_int8_t* last, u_int8_t*& p, TSMessage*& pmsg) |
| 1009 | { | 1022 | { |
| 1010 | int ret = 0; | 1023 | int ret = 0; |
| @@ -1192,6 +1205,17 @@ int TSPayloadPES::demux(TSContext* ctx, TSPacket* pkt, u_int8_t* start, u_int8_t | @@ -1192,6 +1205,17 @@ int TSPayloadPES::demux(TSContext* ctx, TSPacket* pkt, u_int8_t* start, u_int8_t | ||
| 1192 | { | 1205 | { |
| 1193 | int ret = 0; | 1206 | int ret = 0; |
| 1194 | 1207 | ||
| 1208 | + if (!pkt->header->payload_unit_start_indicator) { | ||
| 1209 | + TSMessage* msg = ctx->get_msg(pkt->header->pid); | ||
| 1210 | + if (msg->packet_start_code_prefix != 0x01) { | ||
| 1211 | + trace("ts+pes decode continous packet error, msg is empty."); | ||
| 1212 | + return -1; | ||
| 1213 | + } | ||
| 1214 | + msg->append(p, last - p); | ||
| 1215 | + msg->detach(ctx, pmsg); | ||
| 1216 | + return ret; | ||
| 1217 | + } | ||
| 1218 | + | ||
| 1195 | char* pp = (char*)&packet_start_code_prefix; | 1219 | char* pp = (char*)&packet_start_code_prefix; |
| 1196 | pp[2] = *p++; | 1220 | pp[2] = *p++; |
| 1197 | pp[1] = *p++; | 1221 | pp[1] = *p++; |
| @@ -1478,16 +1502,6 @@ int TSPayload::demux(TSContext* ctx, TSPacket* pkt, u_int8_t* start, u_int8_t* l | @@ -1478,16 +1502,6 @@ int TSPayload::demux(TSContext* ctx, TSPacket* pkt, u_int8_t* start, u_int8_t* l | ||
| 1478 | return pmt->demux(ctx, pkt, start, last, p, pmsg); | 1502 | return pmt->demux(ctx, pkt, start, last, p, pmsg); |
| 1479 | } | 1503 | } |
| 1480 | if (pid && (pid->type == TSPidTypeVideo || pid->type == TSPidTypeAudio)) { | 1504 | if (pid && (pid->type == TSPidTypeVideo || pid->type == TSPidTypeAudio)) { |
| 1481 | - if (!pkt->header->payload_unit_start_indicator) { | ||
| 1482 | - TSMessage* msg = ctx->get_msg(pkt->header->pid); | ||
| 1483 | - if (msg->packet_start_code_prefix != 0x01) { | ||
| 1484 | - trace("ts+pes decode continous packet error, msg is empty."); | ||
| 1485 | - return -1; | ||
| 1486 | - } | ||
| 1487 | - msg->append(p, last - p); | ||
| 1488 | - msg->detach(ctx, pmsg); | ||
| 1489 | - return ret; | ||
| 1490 | - } | ||
| 1491 | type = pid->type; | 1505 | type = pid->type; |
| 1492 | pes = new TSPayloadPES(); | 1506 | pes = new TSPayloadPES(); |
| 1493 | return pes->demux(ctx, pkt, start, last, p, pmsg); | 1507 | return pes->demux(ctx, pkt, start, last, p, pmsg); |
-
请 注册 或 登录 后发表评论