MPEG2-TS 简单理解

一、概念

(1)ES- Elementary Streams (原始流)

    对视频、音频信号及其他数据进行编码压缩后的数据流称为原始流。原始流包括访问单元,比如视频原始流的访问单元就是一副图像的编码数据。

(2) PES- Packetized Elementary Streams (打包的原始流)

   原始流形成的分组称为PES分组,是用来传递原始流的一种数据结构,分为首部(header )和有效负载(payload )

(3)节目是节目元素的集合。

    节目元素可能是原始流,这些原始流有共同的时间基点,用来做同步显示。

    PSProgram Stream,程序流。它是一种数据流的定义。一个或多个具有相同时间基点的数据流的PES分组称为程序流。程序流失针对错误较少的环境设计的,适用于一些设计软件处理系统信息的应用。程序流分组是可变的而且相对较长。

(4)TSTransport Stream,传送流。

用来传输和保存多道节目的编码数据或其他数据,TS的组成单位是节目。

传送流将有多个独立时间基点的多道程序合成一个单独的数据流

传送流是针对那些很容易发生错误的环境而设计的,如容易丢失或者高噪音的媒体中存储和传送,传送流分组长度为188字节。

(1)      从传送流中的一道程序恢复被编码的数据,解码并显示解码结果。

(2)     从传送流中的一道程序抽取分组,并生成仅含此道的新的传送流。

(3)      从多个传送流中提取一道或多道程序的分组,并生成新的传送流。

(4)      从传输流中提取一道程序生成含有此道程序的程序流。

(5)      把一个程序流转换为一个传送流以适于通过容易出错的环境,然后恢复成一个有效的、有时完全相同的程序流。

PESTS关系:PES分组是插入到TS分组中的,每个PES分组首部的第一字节就是TS分组有效负载的第一字节。一个PID值的TS分组只带有来自一个原始流的数据。

传送流由两层构成:系统层和压缩层。传送流解码器的输入流有一个包含压缩层的系统层,视频和音频解码器的输入流只含有压缩层

(5)PSI Program Specific Information ,节目专用信息。PSI也是插入到TS分组中的,它们的PID是特定值

MPEG-2中规定了4PSI,包括PAT(节目关联表)CAT(条件访问表)PMT(节目映射表)NIT(网络信息表),这些PSI包含了进行多路解调和显示节目的必要的和足够的信息。

1.      PMT(Program Map Table )节目映射表 

PMT所在分组的PIDPAT指定,所以要先解出PAT,再解PMT PMT中包含了属于同一节目的视频、音频和数据原始流的PID。找到了PMT,解多路复用器就可找到一道节目对应的每个原始流的PID,再根据原始流PID,去获取原始流。

2.      PAT (Program AssociationTable )节目关联表

PAT所在分组的PID=0PAT中列出了传输流中存在的节目流,PAT指定了传输流中每个节目对应PMT所在分组的PIDPAT的第一条数据指定了NIT所在分组的PID ,其他数据指定了PMT所在分组的PID,如下图所示:

3.      CAT (Conditional Access Table )条件访问表

CAT所在分组的PID=1CAT中列出了条件控制信息(ECM)和条件管理信息(EMM)所在分组的PID

CAT用于节目的加密和解密

4.      NIT( Network Information Table)网络信息表

NIT所在分组的PIDPAT指定, NIT提供一组传输流的相关信息,以及于网络自身特性相关的信息,比如网络名称,传输参数(如频率,调制方式等)

几种PSI之间的关系,如下图所示:首先PAT中指定了传输流中所存在的节目,及每个节目对应的PMTPID号。比如Program 1对应的PMT PID=22,然后找到PID=22TS分组,解出PMT,得到这个节目中包含的原始流的PID,再根据原始流的PID去找相应的TS分组,获取原始流的数据,然后就可以送入解码器解码了。

二、数据结构

1.TS分组

前面32bit的数据即TS分组首部,它指出了这个分组的属性。

sync_bytye同步字节,固定为0x47 ,表示后面的是一个TS分组,当然,后面包中的数据是不会出现0x47的。

transport_error_indicator 传输错误标志位,一般传输错误的话就不会处理这个包了

 

payload_unit_start_indicator这个位功能有点复杂,字面意思是有效负载的开始标志,根据后面有效负载的内容不同功能也不同。

 

 当有效负载有PES分组数据时:“1”表示TS流有效负载将以PES分组的第一个字节开始,有且仅有一个PES分组;“0”表示在传送流的开始不是PES分组。

 当有效负载有PSI 数据时:“1”表示传送流带有PSI部分的第一个字节,表明传送流分组第一个字节带有pointer_field;0”表示传送流不带有PSI部分的第一个字节,表明有效负载没有pointer_field

 

transport_priority  传输优先级位,1表示高优先级,传输机制可能用到,解码好像用不着。

 

PIDTS流中唯一识别标志Packet Data是什么内容就是由PID决定的。如果一个TS流中的一个PacketPacketHeader中的PID0x0000,那么这个PacketPacketData就是DVBPAT表而非其他类型数据(如VideoAudio或其他业务信息)。下表给出了一些表的PID值,这些值是固定的,不允许用于更改. 

transport_scrambling_control加密标志位,表示TS分组有效负载的加密模式。TS分组首部(也就是前面这32bit)是不应被加密的,00表示未加密。

adaption_field_control  翻译为“调整字段控制”,表示TS分组首部后面是否跟随有调整字段和有效负载。01仅含有效负载,10仅含调整字段,11含有调整字段和有效负载。为00的话解码器不进行处理。空分组没有调整字段。

continuity_counter   一个4bit的计数器,范围0-15,具有相同的PIDTS分组传输时每次加1,到15后清0。不过,有些情况下是不计数的。如下:(1)TS分组无有效负载(2)复制的TS分组和原分组这个值一样(3)后面讲到的一个标志discontinuity_indicator1adaptation_field()调整字段的处理data_byte有效负载的剩余部分,可能为PES分组,PSI,或一些自定义的数据。

2.PAT

PAT表定义了当前TS流中所有的节目,其PID0x0000,它是PSI的根节点,要查寻找节目必须从PAT表开始查找

table_id  固定为0x00 ,标志是该表是PAT

section_syntax_indicator段语法标志位,固定为1

section_length         表示这个字节后面有用的字节数,包括CRC32。假如后面的字节加上前面的字节数少于188,后面会用0XFF填充。假如这个数值比较大,则PAT会分成几部分来传输。

transport_stream_id    该传输流的ID,区别于一个网络中其它多路复用的流version_number       范围0-31,表示PAT的版本号,标注当前节目的版本.这是个非常有用的参数,当检测到这个字段改变时,说明TS流中的节目已经变化了,程序必须重新搜索节目

current_next_indicator表示发送的PAT是当前有效还是下一个PAT有效。

section_number       分段的号码。PAT可能分为多段传输,第一段为00,以后每个分段加1,最多可能有256个分段

last_section_number   最后一个分段的号码

program_number  节目号

 

举例说明

47 40 00 1c00 00 b0 15 13 f6e7 00000000 e0 10 00 01 e0 20 00 02 e0 21 1a 34 b4 77 ff…………..ff

其中红色的四个字节是TS分组头部,用数据结构解出首部,得到PID=0x00,表示为该分组的有效负载是PAT。蓝色的00称为“指针域”----Pointer field,表示了一个偏移量,即从后面第几个字节开始是PAT部分。payload_unit_start_indicator=1.表示:在前4个字节后会有一个调整字节。所以实际数据应该为去除第一个字节后的数据。即上面数据中蓝色部分不属于有效数据包。00表示后面紧接着的就是PAT:00 b0 15 13 f6 e7 00 00 00 00 e0 10 00 01 e0 20 0002 e0 21 1a 34 b4 77

再利用PAT的数据结构解出PAT,得到如下信息:

---------------PATInformation-------------

table_id: 00                          8

section_syntax_indicator:01            1

section_length: 015                   12

transport_stream_id:13f6             16

version_number: 13                   5

current_next_indicator:1              1

section_number: 00                   8

last_section_number:00               8

program_number: 0000               16

network_PID: 0010                   3

program_number: 0001               16

program_map_PID: 0020              13

program_number: 0002

program_map_PID: 0021

CRC_32: 1a34b477                    32

 

可以看出,此PAT只有一段,包含了三个节目,节目号0000对应于network_PID=0010 ,节目号0001对应于program_map_PID =0020,节目号0002对应于program_map_PID =0021,从实际的角度,我们应该把这三个节目号理解为三个频道,第一个频道中的内容是网络信息,第二、三个频道包含了节目信息。transport_stream_id标识了一个唯一的传输流(每一个传输流对应一个频点,如498MHz),一个PAT表表示一个流里面的信息。

 上面的三个节目号理解为三个频道是正确的,但在数字电视中,一个频道对应的也是一个节目,而不是一个频点(当然节目号为0时对应的是NITPID)。)

 

3.PMT

PMT数据结构如下

table_id  固定为0x02 ,标志是该表是PMT

stream_type对应的类型:

下述是一个包含PMTTS分组。

47 40 20 1c00 02 b0 1f 00 01 e7 00 00 e1 00 f0 00 02 e1 00 f0 05 02 03 b2 445f 04 e1 10 f0 03 03 01 67 c9 ab c8 d2

红色的四个字节是TS分组头部,蓝色的00指针域,意义同PAT中的指针域。所以下面的数据就是PMT的内容:02 b0 1f 00 01 e7 00 00 e1 00 f0 0002 e1 00 f0 05 02 03 b2 44 5f 04 e1 10 f0 03 03 01 67 c9 ab c8 d2

 

再解出PMT,得到下列信息:

table_id:02

section_syntax_indicator:01

section_length:01f

program_number:0001

version_number:13

current_next_indicator:01

section_number:00

last_section_number:00

PCR_PID:0100

program_info_length:000

descriptor:

steam_type:00

elementary_PID:0001

ES_info_length:000

descriptor:

steam_type: 02

elementary_PID:0001

ES_info_length:005

descriptor:02 03 b2 44 5f

steam_type:04

elementary_PID:0011

ES_info_length:003

descriptor:03 01 67

CRC_32:c9abc8d2

 

可以看出,该节目号0001包含了三个流的信息,流类型分别为00020400的流为保留值,可以不考虑,02表示原始流为视频流,其elementary_PID000104表示原始流为音频流,其elementary_PID0011,两个流分别还带有descriptor(描述符),说明了该原始流的一些信息

得到了这个elementary_PID,再从后面的传输流中找到PID为这个值的TS分组,其有效负载即为这个原始流的数据,获取数据送到解码器,即可还原这个视频或音频了

三、总结

下面就是一个简易的应用过程---搜台。搜台过程大致如下

先调整高频头到一个固定的频率(如498MHZ),如果此频率有数字信号,则相关芯片会自动把TS流数据传送给MPEG- 2 decoder. MPEG-2 decoder先进行数据的同步,也就是等待完整的Packet的到来.然后循环查找是否出现PID== 0x0000的Packet,如果出现了,则马上进入分析PAT的处理,获取了所有的PMT的PID.接着循环查找是否出现PMT,如果发现了,则自动进 入PMT分析,获取该频段所有的频道数据并保存.如果没有发现PAT或者没有发现PMT,说明该频段没有信号,进入下一个频率扫描。

上述过程主要涉及到PAT和PMT的一些解码和解复用知识,这也是目前我学习到的,当然,数字电视涉及到的知识远远不止这些,解码方面就还包括调整字段的处理,SI(业务信息)应用,时钟的处理,CA加密解MI系统等,还需要继续的学习和实践.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值