PSISI理解入门Word文档格式.docx

上传人:b****5 文档编号:20300970 上传时间:2023-01-21 格式:DOCX 页数:35 大小:53.48KB
下载 相关 举报
PSISI理解入门Word文档格式.docx_第1页
第1页 / 共35页
PSISI理解入门Word文档格式.docx_第2页
第2页 / 共35页
PSISI理解入门Word文档格式.docx_第3页
第3页 / 共35页
PSISI理解入门Word文档格式.docx_第4页
第4页 / 共35页
PSISI理解入门Word文档格式.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

PSISI理解入门Word文档格式.docx

《PSISI理解入门Word文档格式.docx》由会员分享,可在线阅读,更多相关《PSISI理解入门Word文档格式.docx(35页珍藏版)》请在冰豆网上搜索。

PSISI理解入门Word文档格式.docx

什么是PMT?

PMT是Program 

Map 

Table的简称,即”节目影射表”.PMT的PID 

是服务器自由定义的(但不会和系统保留的PID冲突).这个PID是在PAT表中描述的,比如,如果在PAT表中有0x100项的内容,那么说明所有 

PID是0x100的包都是PMT表.不同的频道有不同的PMT,也就是说,一个不同的PMT代表的是一个不同频道.PMT表格和PAT表格配合在一起, 

就可以检测出DVB流中所有存在节目的所有PID,因此,数字电视搜台就是依靠这两个表格数据完成的.

什么是CAT?

CAT是Conditional 

Access 

Table的简称,即”条件访问表”,PID是0x01.CAT携带的是服务器的私有信息(CA系统就需要使用该表格实现节目的解密).

什么是SDT?

SDT是Service 

Description 

Table的简称,即”服务器描述表”,PID是0x11.SDT携带的是电视台名称和电视节目名称.DVB接收系统接收SDT表中的节目信息,实现比较友好的界面显示和操作.

什么是NIT和EIT?

NIT是Network 

Information 

Table的简称,即”网络信息表”.

EIT是Event 

Table的简称,即”环境信息表”.

NIT可以提供当前流的节目信息,也可以提供和当前流有关联的流的节目信息.

EIT提供的是流节目信息的改变,比如一个节目已经开始,或者已经结束的信息等.

什么是EPG?

EPG是Electronic 

Programme 

Guides的简称,即”电子节目指南”.该功能可实现预告近段时间即将播放的节目内容,同时支持基于内容的检索.

什么是teletext?

Teletext就 

是我们常说的”图文电视”,当然在MPEG-2中,图文电视已经数字化,也就是说,图文信息已经做为数字化信息在TS流中传播.但最终,数字化的图文信息 

都将转化为模拟的VBI信息插入到正常的电视信号中实现图文电视的显示.图文电视有很多标准,比如close 

caption,WSS等,欧洲的DVB使 

用的teletext标准是ITU-R 

System 

Teletext规格.该规格支持欧洲多种语言,支持简单图象和文本的混合显示.

第二章 

DVB系统的构成 

[本文不详细描述DVB系统的硬件构成,只是根据ISO13818中的描述,详细解释TS码流的格式和解复用原理.(够了,够了 

呵呵)]

DVB的分类

DVB根据应用的不同,主要分为DVB-S,DVB-C,DVB-T,DVB-H等多种规格.不同的规格基本原理都是相同的,不同的主要是调制方式不同:

DVB-S,S是Satelite的首字母,应用于数字电视卫星广播,调制方式是QPSK.

DVB-C,C是Cable的首字母,应用于城市有线广播.调制方式是QAM所有格式:

16QAM,32QAM,64QAM,128QAM,256QAM.

DVB-T,T是Terrestrial的首字母,应用于陆地无线广播,调制方式是QPSK或者16QAM和64QAM.

DVB-H,H是Handheld的首字母,应用于手持无线广播,调制方式和DVB-T相同.

总 

的来说,不同的DVB系统只有前端系统是不同的,最终的数字信息都是相同的,也就是都是采用ISO13818描述的规格.前端系统主要是指调制方法和发射 

方法等.因此,这里所叙述的内容,全部适用于所有的DVB系统,同时因为美国的ATSC系统也是在DVB系统上的小量更改和小部分功能增加,因此也适用于 

ATSC标准.

基本系统描述如下:

(1)编码系统:

假 

设信号源有6个节目,则DVB系统先对这6个节目的所有数据(Video,Audio)进行压缩处理,然后经过一个叫做"

复用"

的程序进行节目的复用 

(PID分配,即对6个节目分别分配不同的PID号码)形成叫做"

PES"

的包,然后再经过TS流处理程序,把这些PES包全部封装成TS码流格式,最后 

把获得的TS格式的数字信号经过调制(实现的是频率的复用),然后经过D/A转换成模拟信号,再次调制成高频信号,经传输系统发送出去.

(2)解码系统

接 

收系统接收到高频信号,先转化为中频信号,然后再经过一个高速的A/D转换成数字信号,接着经过一个反调制程序,这样就得到了TS码流. 

TS码流进入一 

个称为"

解复用"

的程序,该程序实现自动分析TS流中的表格信息,读取所有可用的PID信息等,然后提取一个用户指定的PID(用户选择的节目),把该节 

目的数字信号全部接收而忽略其他不需要的信号,然后Video,Audio信号分别进入不同的解压缩程序,分别对Video,Audio信号进行解压缩和 

显示,如果该节目包含了Teletext和EPG,也有可能同时处理Teletext和EPG,并且把处理的结果和Video信号一起叠加到屏幕上.

Packet的概念

(1)TS流是基于Packet的位流格式,每个包是188字节或者204字节(一般是188字节,204字节的格式仅仅是在188字节的Packet后部加上16字节的CRC数据,其他格式是一样的),整个TS流组成如下所示:

Packet 

...... 

n

在实际使用中,因为TS流已经内部具有很强的错误处理能力,所以一般使用较多的是188字节一个包的格式,204字节一个包的格式据说一般在高清节目中使用较多.

所有的Packet格式都是统一的,包括一个Packet 

header和Packet 

datas.其中Packet 

header包含了同步字节(该字节固定是0x47,表示这个包的数据开始是正确的),该Packet的唯一号码(即PID)和其他一些信息.格式如下(用C格式表示)

typedef 

struct

{

unsigned 

sync_byte:

8;

/*8 

bits的同步字节*/

transport_error_indicator:

1;

/*1 

bit的错误指示信息,1表示当前Packet至少有1bit的传输错误,0表示所有数据都正确*/

payload_unit_start_indicator:

/*负载单元开始标志,请参考ISO13818-1了解该标志作用*/

transport_priority:

bit的传输优先级标志,1表示高优先级,0表示低优先级*/

PID:

13;

/*13 

bits的Packet 

ID号码,唯一的号码对应不同的包*/

transport_scrambling_control:

2;

/*2 

bits的加密标志,00表示没有加密,其他表示已被加密*/

adaptation_field_control:

/* 

bits的附加区域控制,请参考ISO13818-1了解该标志作用*/

continuity_counter:

4;

/*4 

bits的包递增计数器*/

}PACKET_HEADER;

以上结构刚好占用32 

bits,即4个字节,因此一个TS流的Packet头部的4字节是header信息,分析该header信息就可以知道当前Packet的属性.剩下的184字节有可能是Video数据,也有可能是Audio数据,也有可能是DVB 

SI信息,怎 

么区分呢?

其实很简单,就是利用header中的PID信息.上一章说了PAT是节目关联表,它的PID是0x0000.这个PID就是对应这里 

header的PID.换句话就是说,如果我们发现一个Packet的PID等于0x0000,那么说明这个Packet是DVB的PAT表格而不是 

Video数据或者Audio数据.

实 

际上,在信号编码成TS码流的时候,不同节目的Video,Audio等数据都分配了不同的PID.例如,一个节目有两路Video,三路Audio,那 

么分配PID的时候可能是Video 

1==0x100,Video 

2==0x101,Audio 

1==0x102,Audio 

2==0x103, 

Audio 

3==0x104,这样传输的TS码流中的PID就可能有以上的PID.因此,如果我们需要在程序中过滤出第一路Video和第二路 

Audio就可以这样处理了(伪代码描述):

void 

Process_Packet(unsigned 

char*buff)

int 

PID=GETPID(buff);

/*从当前的188字节缓冲区中获取PID信息*/

if(PID==0x100) 

/*PID等于第一路Video的PID,说明当前数据是Video数据*/

SaveToVideoBuffer(buff+4);

/*把header后部的数据存到Video缓冲区,待后部处理*/

}

else 

if(PID==0x103)/*PID等于第二路Audio的PID,说明当前数据是Audio数据*/

SaveToAudioBuffer(buff+4);

/*把header后部的数据存到Audio缓冲区*/

else/*其他PID则丢弃,当然如果PID是DVB系统保留的PID如PAT,PMT则必须处理*/

printf("

unknown 

PID!

\n"

);

现 

在的问题是,编码的时候分配好的PID,在解码的时候是怎么知道什么PID对应什么数据呢?

这就是DVB 

SI表格的分析与处理了,请参考第三章.这里先 

看一个实际的TS码流的例子.这里的数据是用UltraEdit用16进制格式打开TS码流文件得到的.文件是Taiwan-551.ts.

这 

里仅仅截取了3个Packet的信息,请注意图中用红色标注的部分,这就是TS流Packet的4个字节的头信息.这个TS流是采用每个包共188字节的 

格式,因为两个头信息的间隔是188个字节(第一个0x47到第二个0x47的间隔).以后的所有的Packet都将是188字节的格式,这是 

DVB 

TS标准规定的固定大小.那么这三个包分别包含的是什么数据,下面我们可以自己分析一下.

先 

看第一个包,头信息数据是"

0x47 

0x07 

0xe5 

0x12"

刚才已经知道了,header信息都是按位操作的(这就是为什么TS码流也可以叫 

做位流的原因),特别要注意的是定义和传输的时候都是MSB 

first,也就是说,先出现的位是数据的最高位.先转化成2进制格式:

01000111 

00000111 

11100101 

00010010

请对照上面的PACKET_HEADER结构:

那么对照一下,我们可以发现:

sync_byte=01000111,就是0x47,这是DVB 

TS规定的同步字节,固定是0x47.

transport_error_indicator=0,表示当前包没有发生传输错误.

payload_unit_start_indicator=0,含义请参考ISO13818-1标准文档

transport_priority=0,表示当前包是低优先级.

PID=00111 

11100101即0x07e5,这代表是什么呢,暂时还不知道(实际上是Video 

PID,参考下图)

transport_scrambling_control=00,表示节目没有加密

adaptation_field_control=01即0x01,具体含义请参考ISO13818-1

continuity_counte=0010即0x02,表示当前传送的相同类型的包是第3个

依此类推,再看一下第二个包"

0x13"

2进制是01000111 

00010011

continuity_counte=0011即0x03,表示当前传送的相同类型的包是第4个(注意到了吧,以上两个包的PID都是0x07e5,所以这里的continuity_counte就递增一次)

第三个包是"

0xf1 

0x18"

11110001 

00011000.

11100101即0x07f1,这代表是什么呢,暂时还不知道(实际上是Audio 

continuity_counte=1000即0x08,表示当前传送的相同类型的包是第9个

请看解码程序<

<

Seekfor 

MPEG-2 

decoder>

>

读取该文件的结果:

上图我们可以发现,Taiwan-551.ts有一个节目叫"

DIMO"

它的Video 

PID是0x07e5,Audio 

PID是0x07e6

还有一个节目叫"

Service 

1"

没有Video 

PID,它的Audio 

PID是0x07f1(说明是一个广播节目而非电视节目)

这个数据刚好和我们刚才的分析是吻合的.

但 

是我想大家还有疑问,为什么0x07e5代表Video 

PID,0x07e6代表其中一个Audio 

PID呢?

这就是刚才提到的,这是TS流在编码的 

时候就分配好了的.但是,在解码的时候是怎么知道0x07e5就代表的是Video而不是Audio呢?

这就是第三章的内容:

SI/PSI分析和 

处理.

第三章 

SI/PSI分析和处理

SI是Specific 

Information的简称,PSI是program 

Specific 

Information.该机制允许DVB传送各种各样的讯息,比如节目名称,电视台名称,各种PID,私有信息,甚至单独传送数据实现数据通信等.这些功能的实现都归功于SI/PSI.

在DVB 

标准中,定义了一个标准的PID用来实现SI/PSI.这些PID是系统保留的,因此DVB编码的时候并不会用这些PID做为Video 

PID或者 

PID或者其他PID.在一个简单的解复用程序中,只需要提供处理PAT,PMT表格的程序即可实现解复用,当然如果需要更友好的界面和实现 

更复杂的功能(如CA)则必须处理其他的SI表.在这里仅仅分析PAT,PMT,SDT表格,其他SI表格的分析,请参考ISO13818-1(MPEG-2系统层标准)和EN300468(DVB 

SI标准)文档.

DVB定义的SI保留的PID分别是:

上表格的PID就是DVB保留的PID,分配的其他PID一定不会占用这些PID.解复用程序需要使用到的表格只有PAT,PMT,SDT,而CA应用还需要使用CAT,EPG应用还需要使用NIT,EIT,TDT,TOT等表格.所以在需要解复用的时候,伪代码需要这样写:

if(PID==0x0000) 

/*这是PAT表*/

Process_PAT(buff+4);

/*处理PAT表*/

if(PID==......)/*Video 

或者Audio*/

else/*其他不支持的PID*/

Unknown 

"

所 

有的表格都开始于Packet中的184字节的数据部分,但有的时候一个表格没有184字节,这时在Packet中就可能插入一些无效信息用来填充使整个 

Packet依然保持是188字节.也可能用头信息中的payload_unit_start_indicator标志表格有个偏移位置(当 

payload_unit_start_indicator=0表示表格数据直接从Packet区的第四个字节开始,否则表示有一个偏移量位置开始,具体 

请参考ISO13818-1,第4字节到偏移量间的数据是系统填充的无效数据).

下面针对解复用程序详细分析一下PAT,PMT和SDT三类表格的格式.

PAT, 

Program 

Table,节目关联表

PAT表携带以下信息:

(1) 

TS流ID--- 

transport_stream_id,该ID标志唯一的流ID

(2) 

节目频道号-- 

program_number,该号码标志TS流中的一个频道,该频道可以包含很多的节目(即可以包含多个Video 

PID和Audio 

PID)

(3) 

PMT的PID--- 

program_map_PID,表示本频道使用的哪个PID做为PMT的PID,因为可以有很多的频道,因此DVB规定PMT的PID可以由用户自己定义.

PAT表定义如下:

各字段含义如下:

table_id:

bits,标志本表格的类型,应该是0x00

section_syntax_indicator:

bit,段语法标志,应该是'

1'

'

0'

:

固定的'

,这是为了防止和ISO13818Video流格式中的控制字冲突而设置的.

Reserved:

保留的2bits,保留位一般都是'

section_length:

12bits的段大小,单位是Bytes.

transport_stream_id:

16bits的当前流ID,DVB内唯一.(事实上很多都是自定义的TS 

ID)

version_number:

5bits版本号码,标注当前节目的版本.这是个非常有用的参数,当检测到这个字段改变时,说明TS流中的节目已经变化了,程序必须重新搜索节目.

current_next_indicator:

1bit:

当前还是未来使用标志符,一般情况下为'

section_number:

8bits当前段号码

last_section_number:

8bits最后段号码(section_number和last_section_number的功能是当PAT内容>

184字节时,PAT表会分成多个段(sections),解复用程序必须在全部接收完成后再进行PAT的分析)

从for()开始,就是描述了当前流中的频道数目(N),每一个频道对应的PMT 

PID是什么.解复用程序需要和上图类似的循环来接收所有的频道号码和对应的PMT 

PID,并把这些信息在缓冲区中保存起来.在后部的处理中需要使用到PMT 

PID.

CRC_32:

本段的CRC校验值,一般是会忽略的.N是一个变量,计算方法是N=(section_length-9)/4.

从以上分析我们可以发现,PAT表主要包含频道号码和每一个频道对应的PMT的PID号码,这些信息我们在处理PAT表格的时候会保存起来,以后会使用到这些数据.例如我们可以定义这样的数据结构保存这些信息:

channel_number;

/*频道号*/

pmt_pid;

/*对

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1