TS流 系列日记(3)TS流的PSI/SI 深入学习-1

PSI信息

"PSI是对单一TS流的描述,是TS流中的引导信息"

PSI信息由节目关联表PAT、条件接收表CAT、节目映射表PMT和网络信息表NIT组成。这些表会被插入到TS流中。PSI信息是对单一TS流的描述,它是TS流的引导信息;PSI信息指定了如何从一个携带多个节目的传输流中找到指定的节目

下面给出的是节目引导信息(或称节目特定信息,PSI)的四个表结构。


TS流 系列日记(3)TS流的PSI/SI 深入学习-1_第1张图片

虽然这四个结构可以十分简单的表,但事实上,它们被进一步划分为各个段,并插入到TS包中。

PAT解析

"PAT是机顶盒接收的入口点,是它获取数据的开始"

节目关联表PAT的意义在于,它描述了当前TS流中包含了哪些PID;只有根据获得的PID,用户才可以以此作为凭据找出其他表(如PMT表)及其信息。所以PAT是机顶盒接收的入口点,是它获取数据的开始**;要保证一个TS流能被正常接收,则至少要有一个完整有效的PAT。

下面给出了PID字段的取值要求:


TS流 系列日记(3)TS流的PSI/SI 深入学习-1_第2张图片

PAT的表结构分析

这里我们注意关注五个字段:

table_id(赋值):PAT的table_id应为0x00
transport_stream_id(传输流标志):用以标识来源于网络中任何其他复合流的TS流
program_number(节目号):规定program_map_PID可适用的节目。当值为0x0000时,其后的PID参照将是网络PID。它可以作为一个指示符号,例如用于广播通道。
network_PID(网络PID):仅当program_number为0x00时使用
program_map_PID(节目映射PID):据此找出相应的PMT表

PAT的实例分析

下面给出的就是一个TS流的PAT分析情况:


TS流 系列日记(3)TS流的PSI/SI 深入学习-1_第3张图片
image

根据上表可以看出,这个TS流里共有6套节目,其映射关系PID分别为0xc9、0xcb、0xce、0xcc、0xcd和0xca。(注:0xc9=201)

  • 下面给出的是PMT的简单解析:
    TS流 系列日记(3)TS流的PSI/SI 深入学习-1_第4张图片
    image

两相比较,可以很清楚地知道,PAT是如何锁定各个PMT的(每个节目都有一个自己的PMT)。

Q1:如何找到一个特定的节目?
1.已知节目名称(或id等信息)

首先要从节目关联表PAT中获取这个节目的节目映射表PMT的PID值,再从TS流中找出与此PID值相对应的节目映射表PMT;再从PMT中获取构成这个节目的基本码流的PID值,从而根据该PID过滤出相应的视频、音频和数据等基本码流。最后解码恢复为原始信号。

PMT解析

"PMT是连接节目号与节目元素的桥梁"

节目映射表PMT的意义在于,它给出了节目号与组成这个节目元素之间的映射;也就是说,PMT是连接节目号与节目元素的桥梁。我们知道,一个电视节目至少包含了视频和音频数据,而每一个节目的视音频数据都是以包的形式在TS流中传输的;所以说,一个TS流包含了多个节目的视频和音频数据包。要想过滤出一个TS流中其中一个节目的视频和音频,则需要知道这个节目中视频和音频的标识号PID。PMT表的作用就在于,它提供了每个节目视频、音频(或其他)数据包的PID。

PMT的表结构分析

这里着重介绍两个字段:

elementary_PID:标识了该节目(program_number)携带的基本流的识别号PID
stream_type:流类型,指出了PID为elementary_PID的基本流的类型

附:流类型取值说明
TS流 系列日记(3)TS流的PSI/SI 深入学习-1_第5张图片

PMT的实例分析

下面给出了码流分析仪分析一段TS流的PMT表:

TS流 系列日记(3)TS流的PSI/SI 深入学习-1_第6张图片

首先,注意到这张PMT表的progam_number=0xc9,就是我们在上面解析PAT表得到的。
从上面可以知道,节目号为0xc9(即201)的节目有两个单元流:



elementary_PID和stream_type的意义在于,告知接收机基本流的类型和识别PID。要想获取这个节目的视频,只需要对PID为0x21的数据包进行过滤,并交由视频处理模块处理。下图所示(除了节目名称,还需要SDT表信息)即为PAT和PMT共同获取的信息。

PSI小结

TS流 系列日记(3)TS流的PSI/SI 深入学习-1_第7张图片
image

上图给出了在一个TS流中PSI各表之间的联系。首先从PAT表出发,获取当前有哪些节目号(program_map_PID),再根据这些节目号找出program_number相同的PMT;获取到PMT后,即可根据elementary_PID和stream_type来确定要过滤哪些含有基本流的TS包,以及这些包里面是什么类型的数据。这样,机顶盒就可以过滤出相应的节目(视频和音频数据)来收看了。

你可能感兴趣的:(TS流 系列日记(3)TS流的PSI/SI 深入学习-1)