《PSI-SI理解入门》由会员分享,可在线阅读,更多相关《PSI-SI理解入门(44页珍藏版)》请在金锄头文库上搜索。
1、PSI/SI理解入门一、MPEG-2系统原理 第一章MPEG-2简介什么是MPEG和MPEG-2?MPEG是MovingPictureExpertsGroup的简称,MPEG-2是MPEG和ISO组织设计的一个数字视频压缩规范,主要用于DVD和DVB上,当前的标准文档是ISO13818.什么是DVB?DVB是DigtalVideoBroadcast的简称,是欧洲所有国家和其他部分国家和地区使用的数字电视标准.其中美国的ATSC标准也是在DVB标准的基础上实现的.什么是TS码流和PS流?TS是transportstream的简称,就是”传输流”.DVB数据广播采用的数据格式就是TS码流.PS是p
2、rogramstream的简称,就是”节目流”.DVD中采用的数据格式就是PS流.这两种流的格式是不同的,TS格式具有很强的错误校正功能,适合传输,而PS格式适合存储在媒体中.在这里,着重描述的是TS码流格式.什么是PID?PID是Packetidentification的简称,就是”包标志符”.DVB系统把不同的数据打包成不同的数据包,用系统唯一的一个13bits数字标志该数据的类型.例如,PID=0x00 表示是DVB系统中的PAT包,而PID=0x10表示是DVB系统的NIT包.不同的节目(包括Video和Audio)分别采用不同的PID,例如,我们在PMT表中如果检测到PID=0x01
3、20的PID是VIDEO数据,那么表示包号码是0x0120的所有包都是Video数据,其他依此类推.什么是PAT?PAT是ProgramAssociationTable的简称,即”节目关联表”.PAT属于DVB系统流中的一个包,包号码(PID)是0x00.PAT表描述了DVB系统流中包含什么样的PID,主要是描述当前流的NIT表格的PID号码是多少,当前流中有多少个不同类型PMT表,每个PMT表对应的频道号等信息.什么是PMT?PMT是ProgramMapTable的简称,即”节目影射表”.PMT的 PID是服务器自由定义的(但不会和系统保留的PID冲突).这个PID是在PAT表中描述的,比如
4、,如果在PAT表中有0x100项的内容,那么说明所有PID是0x100的包都是PMT表.不同的频道有不同的PMT,也就是说,一个不同的PMT代表的是一个不同频道.PMT表格和PAT表格配合在一起,就可以检测出DVB流中所有存在节目的所有PID,因此,数字电视搜台就是依靠这两个表格数据完成的.什么是CAT?CAT是ConditionalAccessTable的简称,即”条件访问表”,PID是0x01.CAT携带的是服务器的私有信息(CA系统就需要使用该表格实现节目的解密).什么是SDT?SDT是ServiceDescriptionTable的简称,即”服务器描述表”,PID是0x11.SDT携带
5、的是电视台名称和电视节目名称.DVB接收系统接收SDT表中的节目信息,实现比较友好的界面显示和操作.什么是NIT和EIT?NIT是NetworkInformationTable的简称,即”网络信息表”.EIT是EventInformationTable的简称,即”环境信息表”.NIT可以提供当前流的节目信息,也可以提供和当前流有关联的流的节目信息.EIT提供的是流节目信息的改变,比如一个节目已经开始,或者已经结束的信息等.什么是EPG?EPG是ElectronicProgrammeGuides的简称,即”电子节目指南”.该功能可实现预告近段时间即将播放的节目内容,同时支持基于内容的检索.什么是
6、teletext?Teletext就是我们常说的”图文电视”,当然在MPEG-2中,图文电视已经数字化,也就是说,图文信息已经做为数字化信息在TS流中传播.但最终,数字化的图文信息都将转化为模拟的VBI信息插入到正常的电视信号中实现图文电视的显示.图文电视有很多标准,比如closecaption,WSS等,欧洲的 DVB使用的teletext标准是ITU-RSystemBTeletext规格.该规格支持欧洲多种语言,支持简单图象和文本的混合显示.第二章DVB系统的构成本文不详细描述DVB系统的硬件构成,只是根据ISO13818中的描述,详细解释TS码流的格式和解复用原理.(够了,够了呵呵)DV
7、B的分类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相同.总的来说,不同
8、的DVB系统只有前端系统是不同的,最终的数字信息都是相同的,也就是都是采用ISO13818描述的规格.前端系统主要是指调制方法和发射方法等.因此,这里所叙述的内容,全部适用于所有的DVB系统,同时因为美国的ATSC系统也是在DVB系统上的小量更改和小部分功能增加,因此也适用于ATSC标准.基本系统描述如下:(1)编码系统:假设信号源有6个节目,则DVB系统先对这6个节目的所有数据(Video,Audio)进行压缩处理,然后经过一个叫做复用的程序进行节目的复用(PID分配,即对6个节目分别分配不同的PID号码)形成叫做PES的包,然后再经过TS流处理程序,把这些PES包全部封装成TS码流格式,
9、最后把获得的TS格式的数字信号经过调制(实现的是频率的复用),然后经过D/A转换成模拟信号,再次调制成高频信号,经传输系统发送出去.(2)解码系统接收系统接收到高频信号,先转化为中频信号,然后再经过一个高速的A/D转换成数字信号,接着经过一个反调制程序,这样就得到了TS码流.TS码流进入一个称为解复用的程序,该程序实现自动分析TS流中的表格信息,读取所有可用的PID信息等,然后提取一个用户指定的PID(用户选择的节目),把该节目的数字信号全部接收而忽略其他不需要的信号,然后Video,Audio信号分别进入不同的解压缩程序,分别对Video,Audio信号进行解压缩和显示,如果该节目包含了Te
10、letext和EPG,也有可能同时处理Teletext和EPG,并且把处理的结果和Video信号一起叠加到屏幕上.Packet的概念(1)TS流是基于Packet的位流格式,每个包是188字节或者204字节(一般是188字节,204字节的格式仅仅是在188字节的Packet后部加上16字节的CRC数据,其他格式是一样的),整个TS流组成如下所示:Packet1Packet2.Packetn在实际使用中,因为TS流已经内部具有很强的错误处理能力,所以一般使用较多的是188字节一个包的格式,204字节一个包的格式据说一般在高清节目中使用较多.所有的Packet格式都是统一的,包括一个Packeth
11、eader和Packetdatas.其中Packetheader包含了同步字节(该字节固定是0x47,表示这个包的数据开始是正确的),该Packet的唯一号码(即PID)和其他一些信息.格式如下(用C格式表示)typedefstructunsignedsync_byte:8;/*8bits的同步字节*/unsignedtransport_error_indicator:1;/*1bit的错误指示信息,1表示当前Packet至少有1bit的传输错误,0表示所有数据都正确*/unsignedpayload_unit_start_indicator:1;/*负载单元开始标志,请参考ISO13818-
12、1了解该标志作用*/unsignedtransport_priority:1;/*1bit的传输优先级标志,1表示高优先级,0表示低优先级*/unsignedPID:13;/*13bits的PacketID号码,唯一的号码对应不同的包*/unsignedtransport_scrambling_control:2;/*2bits的加密标志,00表示没有加密,其他表示已被加密*/unsignedadaptation_field_control:2;/*2bits的附加区域控制,请参考ISO13818-1了解该标志作用*/unsignedcontinuity_counter:4;/*4bits的包
13、递增计数器*/PACKET_HEADER;以上结构刚好占用32bits,即4个字节,因此一个TS流的Packet头部的4字节是header信息,分析该header信息就可以知道当前Packet的属性.剩下的184字节有可能是Video数据,也有可能是Audio数据,也有可能是DVBSI信息,怎么区分呢?其实很简单,就是利用header中的PID信息.上一章说了PAT是节目关联表,它的PID是0x0000.这个PID就是对应这里header的PID.换句话就是说,如果我们发现一个Packet的PID等于0x0000,那么说明这个Packet是DVB的PAT表格而不是Video数据或者Audio数
14、据.实际上,在信号编码成TS码流的时候,不同节目的Video,Audio等数据都分配了不同的PID.例如,一个节目有两路Video,三路Audio, 那么分配PID的时候可能是 Video1=0x100,Video2=0x101,Audio1=0x102,Audio2=0x103,Audio3=0x104, 这样传输的TS码流中的PID就可能有以上的PID.因此,如果我们需要在程序中过滤出第一路Video和第二路Audio就可以这样处理了(伪代码描述):voidProcess_Packet(unsignedchar*buff)intPID=GETPID(buff);/*从当前的188字节缓冲区中获取PID信息*/if(PID=0x100)/*PID等于第一路Video的PID,说明当前数据是Video数据*/SaveToVideoBuffer(buff+4);/*把header后部的数据存到Video缓冲区,待后部处理*/elseif(PID=0x103)/*PID等于第二路Audio的PID,说明当前数据是Audio数据*/SaveToAudioBuffer(buff+4);/*把header后部的数据存到Audio缓冲区*/else/*其他PID则丢弃,当然如果PID是DVB系统保留的PID如PAT,PMT则必须处理*/printf(unknownPID!n);