PSI-SI理解入门.doc

上传人:哈尼dd 文档编号:5118587 上传时间:2020-02-04 格式:DOC 页数:44 大小:191.51KB
返回 下载 相关 举报
PSI-SI理解入门.doc_第1页
第1页 / 共44页
PSI-SI理解入门.doc_第2页
第2页 / 共44页
PSI-SI理解入门.doc_第3页
第3页 / 共44页
PSI-SI理解入门.doc_第4页
第4页 / 共44页
PSI-SI理解入门.doc_第5页
第5页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《PSI-SI理解入门.doc》由会员分享,可在线阅读,更多相关《PSI-SI理解入门.doc(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字节缓冲区

15、中获取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);现在的问题是,编

16、码的时候分配好的PID,在解码的时候是怎么知道什么PID对应什么数据呢?这就是DVBSI表格的分析与处理了,请参考第三章.这里先看一个实际的TS码流的例子.这里的数据是用UltraEdit用16进制格式打开TS码流文件得到的.文件是Taiwan-551.ts.这里仅仅截取了3个Packet的信息,请注意图中用红色标注的部分,这就是TS流Packet的4个字节的头信息.这个TS流是采用每个包共188字节的格式,因为两个头信息的间隔是188个字节(第一个0x47到第二个0x47的间隔).以后的所有的Packet都将是188字节的格式,这是DVBTS标准规定的固定大小.那么这三个包分别包含的是什么数

17、据,下面我们可以自己分析一下.先看第一个包,头信息数据是0x470x070xe50x12,刚才已经知道了,header信息都是按位操作的(这就是为什么TS码流也可以叫做位流的原因),特别要注意的是定义和传输的时候都是MSBfirst,也就是说,先出现的位是数据的最高位.先转化成2进制格式:01000111000001111110010100010010请对照上面的PACKET_HEADER结构:typedefstructunsignedsync_byte:8;unsignedtransport_error_indicator:1;unsignedpayload_unit_start_indic

18、ator:1;unsignedtransport_priority:1;unsignedPID:13;unsignedtransport_scrambling_control:2;unsignedadaptation_field_control:2;unsignedcontinuity_counter:4;PACKET_HEADER;那么对照一下,我们可以发现:sync_byte=01000111,就是0x47,这是DVBTS规定的同步字节,固定是0x47.transport_error_indicator=0,表示当前包没有发生传输错误.payload_unit_start_indicato

19、r=0,含义请参考ISO13818-1标准文档transport_priority=0,表示当前包是低优先级.PID=0011111100101即0x07e5,这代表是什么呢,暂时还不知道(实际上是VideoPID,参考下图)transport_scrambling_control=00,表示节目没有加密adaptation_field_control=01即0x01,具体含义请参考ISO13818-1continuity_counte=0010即0x02,表示当前传送的相同类型的包是第3个依此类推,再看一下第二个包0x470x070xe50x13,2进制是010001110000011111

20、10010100010011sync_byte=01000111,就是0x47,这是DVBTS规定的同步字节,固定是0x47.transport_error_indicator=0,表示当前包没有发生传输错误.payload_unit_start_indicator=0,含义请参考ISO13818-1标准文档transport_priority=0,表示当前包是低优先级.PID=0011111100101即0x07e5,这代表是什么呢,暂时还不知道(实际上是VideoPID,参考下图)transport_scrambling_control=00,表示节目没有加密adaptation_fiel

21、d_control=01即0x01,具体含义请参考ISO13818-1continuity_counte=0011即0x03,表示当前传送的相同类型的包是第4个(注意到了吧,以上两个包的PID都是0x07e5,所以这里的continuity_counte就递增一次)第三个包是0x470x070xf10x18,2进制是01000111000001111111000100011000.sync_byte=01000111,就是0x47,这是DVBTS规定的同步字节,固定是0x47.transport_error_indicator=0,表示当前包没有发生传输错误.payload_unit_star

22、t_indicator=0,含义请参考ISO13818-1标准文档transport_priority=0,表示当前包是低优先级.PID=0011111100101即0x07f1,这代表是什么呢,暂时还不知道(实际上是AudioPID,参考下图)transport_scrambling_control=00,表示节目没有加密adaptation_field_control=01即0x01,具体含义请参考ISO13818-1continuity_counte=1000即0x08,表示当前传送的相同类型的包是第9个请看解码程序读取该文件的结果:上图我们可以发现,Taiwan-551.ts有一个节目

23、叫DIMO,它的VideoPID是0x07e5,AudioPID是0x07e6还有一个节目叫Service1,没有VideoPID,它的AudioPID是0x07f1(说明是一个广播节目而非电视节目)这个数据刚好和我们刚才的分析是吻合的.但是我想大家还有疑问,为什么0x07e5代表VideoPID,0x07e6代表其中一个AudioPID呢?这就是刚才提到的,这是TS流在编码的时候就分配好了的.但是,在解码的时候是怎么知道0x07e5就代表的是Video而不是Audio呢?这就是第三章的内容:DVBSI/PSI分析和处理.第三章DVBSI/PSI分析和处理SI是 SpecificInforma

24、tion的简称,PSI是programSpecificInformation该机制允许传送各种各样的讯息,比如节目名称,电视台名称,各种,私有信息,甚至单独传送数据实现数据通信等这些功能的实现都归功于SI/PSI.在 DVB标准中,定义了一个标准的PID用来实现SI/PSI.这些PID是系统保留的,因此编码的时候并不会用这些做为VideoPID 或者AudioPID或者其他在一个简单的解复用程序中,只需要提供处理PAT,PMT表格的程序即可实现解复用,当然如果需要更友好的界面和实现更复杂的功能(如)则必须处理其他的表在这里仅仅分析PAT,PMT,SDT表格,其他SI表格的分析,请参考 ISO1

25、3818-1(MPEG-2系统层标准)和EN300468(DVBSI标准)文档DVB定义的SI保留的PID分别是:上表格的PID就是保留的,分配的其他一定不会占用这些解复用程序需要使用到的表格只有PAT,PMT,SDT,而应用还需要使用CAT,EPG应用还需要使用NIT,EIT,TDT,TOT等表格.所以在需要解复用的时候,伪代码需要这样写:voidProcess_Packet(unsignedchar*buff)intPID=GETPID(buff);if(PID=0x0000)/*这是PAT表*/Process_PAT(buff+4);/*处理PA表*/elseif(PID=.)/*Vid

26、eo或者Audio*/else/*其他不支持的PID*/printf(UnknownPID!);所有的表格都开始于Packet中的184字节的数据部分,但有的时候一个表格没有184字节,这时在Packet中就可能插入一些无效信息用来填充使整个Packet依然保持是188字节也可能用头信息中的payload_unit_start_indicator标志表格有个偏移位置(当payload_unit_start_indicator=0表示表格数据直接从Packet区的第四个字节开始,否则表示有一个偏移量位置开始,具体请参考ISO13818-1,第4字节到偏移量间的数据是系统填充的无效数据)下面针对解

27、复用程序详细分析一下PAT,PMT和SDT三类表格的格式PAT,ProgramAssociationTable,节目关联表PAT表携带以下信息:(1)TS流-transport_stream_id,该标志唯一的流(2)节目频道号-program_number,该号码标志流中的一个频道,该频道可以包含很多的节目(即可以包含多个VideoPID和AudioPID)(3)PMT的PID-program_map_PID,表示本频道使用的哪个PID做为PMT的,因为可以有很多的频道,因此规定PMT的PID可以由用户自己定义PAT表定义如下:各字段含义如下:table_id:8bits,标志本表格的类型,

28、应该是0x00section_syntax_indicator:1bit,段语法标志,应该是10:固定的0,这是为了防止和ISO13818Video流格式中的控制字冲突而设置的Reserved:保留的2bits,保留位一般都是0section_length:12bits的段大小,单位是Bytes.transport_stream_id:16bits的当前流,内唯一.(事实上很多都是自定义的TSID)version_number:5bits版本号码,标注当前节目的版本这是个非常有用的参数,当检测到这个字段改变时,说明流中的节目已经变化了,程序必须重新搜索节目current_next_indica

29、tor:1bit:当前还是未来使用标志符,一般情况下为0section_number:8bits当前段号码last_section_number:8bits最后段号码(section_number和last_section_number的功能是当PAT内容184字节时,PAT表会分成多个段(sections),解复用程序必须在全部接收完成后再进行PAT的分析)从for()开始,就是描述了当前流中的频道数目(N),每一个频道对应的PMTPID是什么解复用程序需要和上图类似的循环来接收所有的频道号码和对应的PMTPID,并把这些信息在缓冲区中保存起来在后部的处理中需要使用到PMTPID.CRC_3

30、2:本段的CRC校验值,一般是会忽略的N是一个变量,计算方法是N=(section_length-9)/4.从以上分析我们可以发现,PAT表主要包含频道号码和每一个频道对应的PMT的PID号码,这些信息我们在处理PAT表格的时候会保存起来,以后会使用到这些数据.例如我们可以定义这样的数据结构保存这些信息:typedefstructintchannel_number;/*频道号*/intpmt_pid;/*对应channel_number频道号的PMT的PID*/PMT_ITEM;PMT_ITEMpmt64;/*定义最多64个频道,这个结构在分析PAT表格的时候会更新*/PMT,ProgramM

31、apTable,节目影射表如果一个TS流中含有多个频道,那么就会包含多个PID不同的PMT表.检测是否PMT的伪代码如下:voidProcess_Packet(unsignedchar*buff)intI;intPID=GETPID(buff);if(PID=0x0000)/*PAT表格*/Process_PAT(buff+4);elseif(PID=.)/*VideoPID或者AudioPID*/else/*在这里检测PID是否是PMT的PID*/for(i=0;i64;i+)if(PID=pmti.pmt_pid)/*PID等于在PAT检测到的PMTPID相同*/Process_PMT(b

32、uff+4);/*说明当前Packet是PMT,进入处理*/break;PMT表中包含的数据如下:(1)当前频道中包含的所有Video数据的PID(2)当前频道中包含的所有Audio数据的PID(3)和当前频道关联在一起的其他数据的PID(如数字广播,数据通讯等使用的PID)PMT定义如下:各字段含义如下:table_id:8bits的ID,应该是0x02section_syntax_indicator:1bit的段语法标志,应该是10:固定是0,如果不是说明数据有错.reserved:2bits保留位,应该是00section_length:16bits段长度,从program_number

33、开始,到CRC_32(包含)的字节总数.program_number:16bits的频道号码,表示当前的PMT关联到的频道.换句话就是说,当前描述的是program_number频道的信息.reserved:2bits保留位,应该是00version_number:版本号码,如果PMT内容有更新,则version_number会递增1通知解复用程序需要重新接收节目信息,否则version_number是固定不变的.current_next_indicator:当前未来标志符,一般是0section_number:当前段号码last_section_number:最后段号码,含义和PAT中的对应

34、字段相同,请参考PAT部分.reserved:3bits保留位,一般是000.PCR_PID:13bits的PCRPID,具体请参考ISO13818-1,解复用程序不使用该参数.reserved:4bits保留位,一般是0000program_info_length:节目信息长度(之后的是N个描述符结构,一般可以忽略掉,这个字段就代表描述符总的长度,单位是Bytes)紧接着就是频道内部包含的节目类型和对应的PID号码了.stream_type:8bits流类型,标志是Video还是Audio还是其他数据.reserved:3bits保留位.elementary_PID:13bits对应的数据P

35、ID号码(如果stream_type是Video,那么这个PID就是VideoPID,如果stream_type标志是Audio,那么这个PID就是AudioPID)reserved:4bits保留位.ES_info_length:和program_info_length类似的信息长度(其后是N2个描述符号)CRC_32:32bits段末尾是本段的CRC校验值,一般忽略.从以上的分析可以看出,只要我们处理了PMT,那么我们就可以获取频道中所有的PID信息,例如当前频道包含多少个Video,共多少个Audio,和其他数据,还能知道每种数据对应的PID分别是什么.这样如果我们要选择其中一个Vide

36、o和Audio收看,那么只需要把要收看的节目的VideoPID和AudioPID保存起来,在处理Packet的时候进行过滤即可实现.比较全面实现解复用的伪代码如下:intVideo_PID=0x07e5,Audio_PID=0x07e6;/*一般是在PMT检索后由用户自己设置这两个全局值*/voidProcess_Packet(unsignedchar*buff)intI;intPID=GETPID(buff);/*获取当前Packet的PID*/if(PID=0x0000)/*0x0000表示是PAT*/Process_PAT(buff+4);elseif(PID=Video_PID)/*和

37、Video_PID相等,说明当前Packet是一个VideoPacket*/SaveToVideoBuffer(buff+4);/*保存到Video缓冲区*/elseif(PID=Audio_PID)/*和Audio_PID相等,说明当前Packet是一个AudioPacket*/SaveToAudioBuffer(buff+4);/*保存到Audio缓冲区*/elsefor(i=0;i64;i+)if(PID=pmti.pmt_pid)Process_PMT(buff+4);Break;以上伪代码可以实现基本的解复用:检测所有的频道,检测所有stream的PID,选择特定的节目进行播放.只要

38、读取每个Packet的188字节的内容,然后每次都调用Process_Packet()即可实现简单的解复用.介绍到这里,我们就可以总结一下DVB搜台的原理了.(好!洗耳恭听!)机顶盒先调整高频头到一个固定的频率(如498MHZ),如果此频率有数字信号,则COFDM芯片(如MT352)会自动把TS流数据传送给 MPEG-2decoder.MPEG-2decoder先进行数据的同步,也就是等待完整的Packet的到来.然后循环查找是否出现 PID=0x0000的Packet,如果出现了,则马上进入分析PAT的处理,获取了所有的PMT的PID.接着循环查找是否出现PMT,如果发现了,则自动进入PMT

39、分析,获取该频段所有的频道数据并保存.如果没有发现PAT或者没有发现PMT,说明该频段没有信号,进入下一个频率扫描.从以上描述可以看出,机顶盒搜索频率是随机发生的,要使每次机顶盒都能搜索到信号,则要求TS流每隔一段时间就发送一次PAT和PMT.事实上DVB传输系统就是这么做的.因此无论何时接入终端系统,系统都能马上搜索到节目并正确解复用实现播放.不仅仅如此,其他数据也都是交替传送的.比如第一个Packet可能是PAT,第二个Packet可能是PMT,而第三个Packet可能是Video1,第四个Packet可能是Video2,只要系统传输速度足够快(就是称之为码率的东东),实现实时播放是没有任

40、何问题的.到这里虽然实现了解复用,但可以看出,使用的PID都是枯燥的数字,如果调台要用户自己输入数字那可是太麻烦了,而且还容易输入错误,操作非常不直观,即使做成一个菜单让用户选择也是非常的呆板.针对这个问题,DVB系统提出了一个SDT表格,该表格标志一个节目的名称,并且能和PMT中的PID联系起来,这样用户就可以通过直接选择节目名称来选择节目了.SDT,Servicedescriptionsection,服务描述段SDT可以提供的信息包括:(1)该节目是否在播放中(2)该节目是否被加密(3)该节目的名称SDT定义如下:各字段定义如下:table_id:8bits的ID,可以是0x42,表示描述

41、的是当前流的信息,也可以是0x46,表示是其他流的信息(EPG使用此参数)section_syntax_indicator:段语法标志,一般是1reserved_future_used:2bits保留未来使用reserved:1bit保留位,防止控制字冲突,一般是0,也有可能是1section_length:12bits的段长度,单位是Bytes,从transport_stream_id开始,到CRC_32结束(包含)transport_stream_id:16bits当前描述的流IDreserved:2bits保留位version_number:5bits的版本号码,如果数据更新则此字段递增

42、1current_next_indicator:当前未来标志,一般是0,表示当前马上使用.original_netword_id:16bits的原始网络ID号reserved_future_use:8bits保留未来使用位接下来是N个节目信息的循环:service_id:16bits的服务器ID,实际上就是PMT段中的program_number.reserved_future_used:6bits保留未来使用位EIT_schedule_flag:1bit的EIT信息,1表示当前流实现了该节目的EIT传送EIT_present_following_flag:1bits的EIT信息,1表示当前流

43、实现了该节目的EIT传送running_status:3bits的运行状态信息:1-还未播放2-几分钟后马上开始,3-被暂停播出,4-正在播放,其他-保留free_CA_mode:1bits的加密信息,1表示该节目被加密.紧接着的是描述符,一般是Servicedescriptor,分析此描述符可以获取servive_id指定的节目的节目名称.具体格式请参考EN300468中的Servicedescriptor部分.分析完毕,则节目名称和节目号码已经联系起来了.机顶盒程序就可以用这些节目名称代替PID让用户选择,从而实现比较友好的用户界面!下面参考一下中的界面和显示信息.上图是打开三个不同的码流

44、文件(*.ts)形成的PID信息和节目名称.用户可以通过切换节目名称的下拉列表框切换节目,也可以通过视频流和音频流下拉列表框切换Video和Audio!这些数据都是通过分析 PAT,PMT和SDT得到的.第四章Teletext原理欧洲采用的Teletext标准叫做ITU-RSystemBTeletext,标准文档是EN300472和EN300706.该标准支持以下特性:(1)24X40的文本字符显示,也支持简单的图象信息的显示.(2)支持多页码,应用程序可以自由切换到任意选定的页.(3)支持多语言,可以在teletext中指定所使用的语言.(4)文本支持自定义背景色,自定义前景色.支持长度,宽度加倍(doublewidth,doubleheight)(5)所有数据采用了奇偶校验和汉明码编码,具有比较强的错误处理功能.(6)格式

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

当前位置:首页 > 工程管理


经营许可证编号:宁ICP备18001539号-1