mpeg PMT 的 stream type汇总

Value    Description
0x00     ITU-T | ISO/IEC Reserved
0x01     ISO/IEC 11172-2 Video
0x02     ITU-T Rec. H.262 | ISO/IEC 13818-2 Video or ISO/IEC 11172-2 constrained parameter video stream
0x03     ISO/IEC 11172-3 Audio
0x04     ISO/IEC 13818-3 Audio
0x05     ITU-T Rec. H.222.0 | ISO/IEC 13818-1 private_sections
0x06     ITU-T Rec. H.222.0 | ISO/IEC 13818-1 PES packets containing private data
0x07     ISO/IEC 13522 MHEG
0x08     ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Annex A DSM-CC
0x09     ITU-T Rec. H.222.1
0x0A     ISO/IEC 13818-6 type A
0x0B     ISO/IEC 13818-6 type B
0x0C     ISO/IEC 13818-6 type C
0x0D     ISO/IEC 13818-6 type D
0x0E     ITU-T Rec. H.222.0 | ISO/IEC 13818-1 auxiliary
0x0F     ISO/IEC 13818-7 Audio with ADTS transport syntax
0x10     ISO/IEC 14496-2 Visual
0x11     ISO/IEC 14496-3 Audio with the LATM transport syntax as defined in ISO/IEC 14496-3/Amd.1
0x12     ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in PES packets
0x13     ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in ISO/IEC 14496_sections
0x14     ISO/IEC 13818-6 Synchronized Download Protocol
0x15     Metadata carried in PES packets
0x16     Metadata carried in metadata_sections
0x17     Metadata carried in ISO/IEC 13818-6 Data Carousel
0x18     Metadata carried in ISO/IEC 13818-6 Object Carousel
0x19     Metadata carried in ISO/IEC 13818-6 Synchronized Download Protocol
0x1A     IPMP stream (defined in ISO/IEC 13818-11, MPEG-2 IPMP)
0x1B     AVC video stream as defined in ITU-T Rec. H.264 | ISO/IEC 14496-10 Video
0x1C     ISO/IEC 14496-3 Audio, without using any additional transport syntax, such as DST, ALS and SLS
0x1D     ISO/IEC 14496-17 Text
0x1E     Auxiliary video stream as defined in ISO/IEC 23002-3
0x1F-0x7E ITU-T Rec. H.222.0 | ISO/IEC 13818-1 Reserved
0x7F     IPMP stream
0x80-0xFF User Private
 
如上就是PMT表的stream_type的汇总,具体也可以查看13818-1标准的Table 2-36,第64页,有相关的详细说明。
我们以coretv为例子来做说明:
 
#define   STREAMTYPE_11172_VIDEO                  0x01
#define   STREAMTYPE_13818_VIDEO                  0x02
#define   STREAMTYPE_11172_AUDIO                  0x03
#define   STREAMTYPE_13818_AUDIO                  0x04
#define   STREAMTYPE_13818_PRIVATE                0x05
#define   STREAMTYPE_13818_PES_PRIVATE            0x06
#define   STREAMTYPE_13522_MHPEG                  0x07
#define   STREAMTYPE_13818_DSMCC                  0x08
#define   STREAMTYPE_ITU_222_1                    0x09
#define   STREAMTYPE_13818_A                      0x0a
#define   STREAMTYPE_13818_B                      0x0b
#define   STREAMTYPE_13818_C                      0x0c
#define   STREAMTYPE_13818_D                      0x0d
#define   STREAMTYPE_13818_AUX                    0x0e
#define   STREAMTYPE_AAC_AUDIO     0x0f
#define   STREAMTYPE_MPEG4_AUDIO     0x11
#define   STREAMTYPE_H264_VIDEO     0x1b
#define   STREAMTYPE_AVS_VIDEO     0x42
#define   STREAMTYPE_AC3_AUDIO                    0x81
#define   STREAMTYPE_DTS_AUDIO                    0x82
 
 switch(streamType)
 {
      case STREAMTYPE_11172_AUDIO:
      case STREAMTYPE_13818_AUDIO:
      case STREAMTYPE_AC3_AUDIO:
      case STREAMTYPE_AAC_AUDIO:
      case STREAMTYPE_MPEG4_AUDIO:
              break;
      case STREAMTYPE_11172_VIDEO:
      case STREAMTYPE_13818_VIDEO:
      case STREAMTYPE_H264_VIDEO:
      case STREAMTYPE_AVS_VIDEO:
             break;
      case STREAMTYPE_13818_PES_PRIVATE:
             break;
      case STREAMTYPE_13818_B:
             break;
      default:
             break;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TITLE PAGE PROVIDED BY ISOCD 11172-1 CODING OF MOVING PICTURES AND ASSOCIATED AUDIO -- FOR DIGITAL STORAGE MEDIA AT UP TO ABOUT 1.5 Mbit/s -- Part 1: Systems CONTENTS FOREWORD 4 INTRODUCTION - PART 1: SYSTEMS 5 I.1 Multiplex-wide Operations (Pack layer) 6 I.2 Individual Stream Operations (Packet Layer) 6 I.2.1 Demultiplexing 6 I.2.2 Synchronization 6 I.2.3 Relation to Compression Layer 6 I.3 System Reference Decoder 7 1 GENERAL NORMATIVE ELEMENTS 8 1.1 Scope 8 1.2 References 8 2 TECHNICAL NORMATIVE ELEMENTS 9 2.1 Definitions 9 2.2 Symbols and Abbreviations 16 2.2.1 Arithmetic Operators 16 2.2.2 Logical Operators 16 2.2.3 Relational Operators 17 2.2.4 Bitwise Operators 17 2.2.5 Assignment 17 2.2.6 Mnemonics 17 2.2.7 Constants 18 2.3 Method of Describing Bit Stream Syntax 18 2.4 Requirements 20 2.4.1 Coding Structure and Parameters 20 2.4.2 System Target Decoder 20 2.4.3 Specification of the System Stream Syntax 24 2.4.4 Semantic Definition of Fields in Syntax 27 2.4.5 Restrictions on the Multiplexed Stream Semantics 31 2.4.6 Constrained System Parameter Stream 33 1-ANNEX A (informative) 1 1-A.1 Overview 1 1-A.2 Encoder Operations 1 1-A.2.1 Degrees of freedom 1 1-A.2.2 Synchronization 2 1-A.2.3 Multiplexing 3 1-A.2.4 Encoder Constraints caused by Decoder Buffering 4 1-A.3 Data Stream Characteristics 5 1-A.4 Decoder Operations 5 1-A.4.1 Decoder synchronization 5 1-A.4.2 Decoder Start-up Synchronization 8 1-A.4.3 Buffer Management in the Decoder 9 1-A.4.4 Time Identification 9 1-A.5 Parameters for CD-ROM multiplexing 9 1-A.6 Example of an ISO 11172 stream 11 1-A.6.1 Audio 11 1-A.6.2 Video 11 1-A.6.3 Multiplexing strategy 11 1-A.6.4 System Clock Reference (SCR) 12 1-A.6.5 Presentation Time-stamps (PTS) 13 1-A.6.6 Decoding Time-stamp (DTS) 13 1-A.6.7 Buffer Sizes 14 1-A.6.8 Adherence to System Target Decoder (STD) 14 1-A.6.9 Sample data stream 15
PAT(Program Association Table)和PMT(Program Map Table)是数字视频广播领域中的两个协议。 在C语言中,提取PAT和PMT需要进行以下步骤: 1. 打开TS文件,读取TS包,获取PAT表的PID值。 2. 读取TS包,判断PID是否为PAT表的PID值,如果是则解析PAT表。 3. 解析PAT表,获取PMT表的PID值。 4. 读取TS包,判断PID是否为PMT表的PID值,如果是则解析PMT表。 5. 解析PMT表,获取视频流和音频流的PID值。 6. 读取TS包,判断PID是否为视频流或音频流的PID值,如果是则提取数据。 下面是示例代码: ```c #include <stdio.h> typedef struct { unsigned char table_id; unsigned char section_syntax_indicator; unsigned short section_length; unsigned short transport_stream_id; unsigned char version_number; unsigned char current_next_indicator; unsigned char section_number; unsigned char last_section_number; unsigned int program_number; unsigned char reserved_3; unsigned int network_PID; unsigned int program_map_PID; } PAT; typedef struct { unsigned char table_id; unsigned char section_syntax_indicator; unsigned short section_length; unsigned int program_number; unsigned char reserved_3; unsigned char version_number; unsigned char current_next_indicator; unsigned char section_number; unsigned char last_section_number; unsigned short PCR_PID; unsigned short program_info_length; unsigned int stream_type; unsigned short elementary_PID; unsigned short ES_info_length; } PMT; int main() { FILE *fp = fopen("test.ts", "rb"); if (fp == NULL) { printf("Open file failed!\n"); return -1; } unsigned char buffer[188]; PAT pat; PMT pmt; while (fread(buffer, 1, 188, fp) == 188) { // 判断PID是否为PAT表的PID值 if (buffer[1] == 0x00) { pat.table_id = buffer[0]; pat.section_syntax_indicator = (buffer[1] >> 7) & 0x01; pat.section_length = ((buffer[1] & 0x0f) << 8) | buffer[2]; pat.transport_stream_id = (buffer[3] << 8) | buffer[4]; pat.version_number = (buffer[5] >> 1) & 0x1f; pat.current_next_indicator = buffer[5] & 0x01; pat.section_number = buffer[6]; pat.last_section_number = buffer[7]; pat.network_PID = ((buffer[8] & 0x1f) << 8) | buffer[9]; pat.program_map_PID = ((buffer[10] & 0x1f) << 8) | buffer[11]; } // 判断PID是否为PMT表的PID值 else if (buffer[1] == pmt.program_map_PID) { pmt.table_id = buffer[0]; pmt.section_syntax_indicator = (buffer[1] >> 7) & 0x01; pmt.section_length = ((buffer[1] & 0x0f) << 8) | buffer[2]; pmt.program_number = (buffer[3] << 8) | buffer[4]; pmt.version_number = (buffer[5] >> 1) & 0x1f; pmt.current_next_indicator = buffer[5] & 0x01; pmt.section_number = buffer[6]; pmt.last_section_number = buffer[7]; pmt.PCR_PID = ((buffer[8] & 0x1f) << 8) | buffer[9]; pmt.program_info_length = ((buffer[10] & 0x0f) << 8) | buffer[11]; int i = 12 + pmt.program_info_length; while (i < 12 + pmt.section_length - 4) { pmt.stream_type = buffer[i]; pmt.elementary_PID = ((buffer[i+1] & 0x1f) << 8) | buffer[i+2]; pmt.ES_info_length = ((buffer[i+3] & 0x0f) << 8) | buffer[i+4]; i += 5 + pmt.ES_info_length; } } // 提取视频流或音频流的数据 else if (buffer[1] == pmt.elementary_PID) { // TODO: 提取数据 } } fclose(fp); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值