分享

关于MPEG-2传送流的PSI信息的讨论

 Sunnyfang 2006-02-09
关于MPEG-2传送流的PSI信息的讨论

2002-6-25 10:19:08  http://www.  前锋数字公司 岳 翔 四川省有线广播电视台 刘 晓  阅读249次
 

 

         MPEG-2是运动图像专家组的缩写(Moving Picture Expert Group)成立于1998年以建立活动图像及相应音频的编码标准。实际上,MPEG是一个标准系列。有MPEG1、MPEG2、MPEG4和MPEG7。
       MPEG-2目前分为9个部分,1990年成立了ATM视频编码专家组与MPEG一起开发适用于ATM传输的视频编码联合标准。两个工作组主要在9个部分的ISO/IEC 13818国际标准中第一和第二两个部分进行合作,即:MPEG-2的ITU-T Rec﹒H﹒220,ISO/IEC DIS 13818-1系统和ITU-T Rec﹒H﹒262,ISO/IEC DIS 13818-2视频。其他部分在不同的阶段完成,有一个已经取消。ISO/IEC 13818-3是音频;ISO/IEC DIS 13818-4符合测试;ISO/IEC DTR 13818-5软件模拟;ISO/IEC DIS 13818-6 DSM-CC扩展的完全软件实现;ISO/IEC DIS 13818-9系统解码的实时接口扩展。第一部分解决多个视频、音频和数据基本码流的组合问题。产生两种码流:节目码流和传送码流,用于不同的相应环境。节目码流类似于MPEG-1系统复用,是由打包的基本码流组合而成,用于误码相对较小的环境。节目码流的包可变也相对较长。传送包将时基相互独立的打包的基本码流组合成单一的码流。适用于误码相对较多的环境,传送包长188拜特。在第二部分视频中,按清晰度将图像分为4个等级,按使用的工具和方法不同分为5种处理类型,普通清晰度数字电视使用主类和主级MP@ML。用于演播室编辑用的4:2:2P@ML已通过,合并于视频标准中。目前还在开发的还有多重观看点类(Multiview Profile:MVP),允许使用现有MPEG-2视频编码工具将两个相差小角度的摄像机摄取的同一场景进行有效的编码。第三部分音频与MPEG-1音频标准反向兼容,并支持多通道音频编码。第四、五部分与MPEG-1第四、五部分对应。第六部分是规定数字存储媒体指令和控制(Digital Storage Media Command and Control:DSM-CC)协议,用以支持单独或网络环境下的DSM-CC模式,将码流从服务器传送给用户。第七部分规定不与MPEG-1音频标准反向兼容的多通道音频编码。第八部分原计划用于10比特视频抽样的编码,但因有兴趣的厂家不多,已停止。第九部分规定了传送码流的实时接口(Real Time Interface:RTI)。第十部分将是DSM-CC的符合测试标准。
       MPEG-2中的传送码流是根据ITU-T Rec﹒H﹒220,ISO/IEC DIS 13818-2和ISO/IEC 13818-3协议定义的一种数据流,其目的是为了在有可能发生严重错误的环境下进行一道或多道程序的编码数据的传送和存储。这种错误表现为比特值错误或分组丢失。传送流的速率可以是变化的或固定不变的。在任何情况下组成的原始流可以是变化的或固定不变,在这些情况下的语法和语义限制是相同的。传送流速率由程序参考时钟(PCR)字段的位置和数值决定,通常对于每个程序都有自己的PCR字段。
    传送流中有关PID的信息及各PID之间的关系包含在程序专用信息中(Program Specific Information:PSI)。PSI信息可以动态变化,在PSI部分包含有版本号(Version number)和字前/下一个指示(Current next indicator),指示解码在规定时刻转向下一版本信息。MPEG-2解码器将使用PSI信息来自动设置解码所需的各种参数。PSI信息使用4个表来定义码流的结构:
﹒程序相关表(PAT)
﹒程序映射表(PMT)
﹒网络信息表(NIT)
﹒条件访问表(CAT)
一.程序相关表(Program Association Table)
    程序相关表的PID是0,是PSI信息的根,要查找信息时首先必须从程序相关表开始。表中列出了传送码流中所有节目的PID所指出的相应的程序映射表(Program Map Table:PMT),可根据节目PID找到相应的PMT包。
PAT包头:
Sync byte:固定8bit域,值为0x47。
Transport error indicator:1bit标志位。值为1时,TS包中有错。
Payload unit start indicator:1bit标志位。携带PES包的TS,有效负载从PES包的第一个byte开始;携带PSI数据的TS,有效负载的第一个byte携带指针。以上两种情况均为该标志位置1。
Transport priority:1bit状态指示位。当置1时,该包优先级高于TS流中其余相同PID值PES包中该位置0。
PID:13bit域,指出存储在包负载中数据类型。0x0为PAT保留,0x1为CAT保留,0x2~0xF为保留字,0x1FFF为空包预留。
Transport scrambling control:2bit状态指示位,指出TS包负载的加扰模式。当提供TS包头和调整域时,不加扰。
Adaptation field control:2bit状态指示位,指出该TS流包头后是否跟随由调整域与/或有效负载。当置为0x1时,无调整域,仅为有效负载。
Continuity counter:4bit域,每个TS流中的包有相同PID时,不断增加。当连续计数到最大值后,变为零;当adaptation field control为0x00或0x10,该计数器不增加。
PAT表:
Table id:8bit域,对于PAT表,设置为0。
Section syntax indicator:1bit域,对于PAT表,设置为1。
Zero:1bit域,设置为0。
Reserved:2bit域,预留为11。
Section length:12bit域,首先两位bit置为00,它指示段的byte数,由段长度域开始,包含CRC。
Transport stream id:16bit域,作为一个标签指出在网络中与其余复用流的区别标志,该值由用户定义。
Reserved:2bit域,预留为11。
Version number:5bit域,指出所有PAT的版本号。一旦PAT表有所变化,版本号加1。当增加为31时,它回到0。
Current next indicator:1bit指示位。当该位置1,表示设置的PAT当前可以应用;当该位置0,表示该设置的表没有应用,下一个表变为有效。
Section number:8bit域,给出这个段的数目。在PAT表中的第一个段的section number为00,在PAT表中每一个段将加1。
Last section number:8bit域,指出最后一个段的数目。在整个PAT表中即段的最大数目值。
Program number:16bit域。它指出节目对于哪一个program map PID是可应用的。如果置为0x0000,后跟的PID为网络PID;对于其它情况,这个域的值由用户定义。
Reserved:3bit域,预留为111。
Network PID:13bit域,指出含有NIT表的TS包的PID值。Network PID域的值由用户定义。Network PID的提供可选。
Program map PID:13bit域,指定TS包中的PID值。该TS包含有应用节目的program map section,该段由节目号指定。一个节目号有一个Program map PID的定义。该域的值由用户定义。
CRC:32bit域,用来证实数据正确性的循环冗余校验码。
二.程序映射表(Program Map Table)
    程序映射表提供程序号码与组成它们的原始流之间的映射,这种映射表是一个传送流中所有程序定义的集合。此表将在分组中传送,其PID值是私自选择的。如果需要的话,可以使用多个PID值。在被插入到传送流分组之前,此表将按一定语法分成一个或多个分段。
PMT包头:
Sync byte:固定8bit域,值为0x47。
Transport error indicator:1bit标志位。值为1时,TS包中有错。
Payload unit start indicator:1bit标志位。携带PES包的TS,有效负载从PES包的第一个byte开始;携带PSI数据的TS,有效负载的第一个byte携带指针。以上两种情况均为该标志位置1。
Transport priority:1bit状态指示位。当置1时,该包优先级高于TS流中其余相同PID值PES包中该位置0。
PID:13bit域,指出存储在包负载中数据类型。0x0为PAT保留,0x1为CAT保留,0x2~0xF为保留字,0x1FFF为空包预留。该处PID值由用户定义。该处PID值可被定义为network PID、program map PID、elementary PID或其它用处。
Transport scrambling control:2bit状态指示位,指出TS包负载的加扰模式。当提供TS包头和调整域时,不加扰。
Adaptation field control:2bit状态指示位,指出该TS流包头后是否跟随由调整域与/或有效负载。当置为0x1时,无调整域,仅为有效负载。
Continuity counter:4bit域,每个TS流中的包有相同PID时,不断增加。当连续计数到最大值后,变为零;当adaptation field control为0x00或0x10,该计数器不增加。
PMT表:
Table id:8bit域,在TS流中Program map section将置为0x02。
Section syntax indicator:1bit域,对于PMT表,设置为1。
Zero:1bit域,设置为0。
Reserved:2bit域,预留为11(0x3)。
Section length:12bit域,首先两位bit置为00,它指示段的byte数,由段长度域开始,包含CRC。
Program number:16bit域,它指出该节目对应于可应用的Program map PID。一个节目定义仅含一个TS流的Program map section。这意味着一个节目的定义不超过1016byte。
Reserved:2bit域,预留为11(0x3)。
Version number:5bit域,指出TS流中Program map section的版本号。当段中有关信息发生变化,版本号将以32为模加1。版本号是关于一个节目的定义,因此版本号是关于单一段的定义。
Current next indicator:1bit域,当该位置1时,当前传送的Program map section可用;当该位置0时,指示当前传送的Program map section不可用,下一个TS流的Program map section有效。
Section number:8bit域,总是置为0x00。
Last section number:8bit域,该域的值总是0x00。
Reserved:3bit域,预留为111(0x7)。
PCR PID:13bit域,指明TS包的PID值,该TS包含有PCR域,该PCR值对应于由节目号指定的对应节目。如果对于私有数据流的节目定义与PCR无关,这个域的值将为0x1FFF。
Reserved:4bit域,预留为1111(0xF)。
Program info length:12bit域,前两位bit为00。该域指出跟随其后对节目信息的描述的byte数。
Stream type:8bit域,指示特定PID的节目元素包的类型。该处PID由elementary PID指定。该域值为0x2时,指示ITU-T REC﹒H﹒262|ISO/IEC 13818-2 video或ISO/IEC 11172-2 constrained parameter video stream。
Reserved:3bit域,预留为111(0x7)。
Elementary PID:13bit域,该域指示TS包的PID值。这些TS包含有相关的节目元素。
Reserved:4bit域,预留为1111(0xF)。
ES info length:12bit域,前两位bit为00。该域指示跟随其后的描述相关节目元素的byte数。
Stream type:8bit域,指示特定PID的节目元素包的类型。该处PID由elementary PID指定。该域值为0x4时,指示ISO/IEC 13818-3 Audio。
Reserved:3bit域,预留为111(0x7)。
Elementary PID:13bit域,该域指示TS包的PID值。这些TS包含有相关的节目元素。
Reserved:4bit域,预留为1111(0xF)。
ES info length:12bit域,前两位bit为00。该域指示跟随其后的描述相关节目元素的byte数。
CRC:32bit域,用来证实数据正确性的循环冗余校验码。
三.网络信息表(Network Information Table)
    网络信息表是可选的,其内容是私有的。如果存在,则它由具有同样PID值的传送流分组携带,称为network PID,network PID值由用户定义,并且当出现时,应在程序相关表中定义。Program number为保留的0x0000,如果网络信息表存在,则应采取一个或多个私用分段的形式。
NIT包头:
Sync byte:固定8bit域,值为0x47。
Transport error indicator:1bit标志位。值为1时,TS包中有错。
Payload unit start indicator:1bit标志位。携带PES包的TS,有效负载从PES包的第一个byte开始;携带PSI数据的TS,有效负载的第一个byte携带指针。以上两种情况均为该标志位置1。携带空包时,该位置0。
Transport priority:1bit状态指示位。当置1时,该包优先级高于TS流中其余相同PID值PES包中该位置0。
PID:13bit域,指出存储在包负载中数据类型。0x0为PAT保留,0x1为CAT保留,0x2~0xF为保留字,0x1FFF为空包预留。该处PID值由用户定义。该处PID值可被定义为network PID、program map PID、elementary PID或其它用处。
Transport scrambling control:2bit状态指示位,指出TS包负载的加扰模式。当提供TS包头和调整域时,不加扰。
Adaptation field control:2bit状态指示位。该处置为0x3,表示调整域后跟着有效负载。
Continuity counter:4bit域,每个TS流中的包有相同PID时,不断增加。当连续计数到最大值后,变为零;当adaptation field control为0x00或0x10,该计数器不增加。但由于adaptation field control域为0x3,该计数器增加。空包时,该计数器不增加,始终为零。
Adaptation field length:8bit域。该域指示在该域后,调整域中的拜特数。
Discontinuity indicator:1bit域。该位置1,指示对于当前TS包的非连续状态为真。该状态用来指示两种类型的不连续性,系统时基和连续计数的非连续;该位置0,表示不连续状态为假。
Random access indicator:1bit域。该域指示有相同PID的当前和后续TS包中含有一些信息,该信息用于帮助在该点进行随机存取。该位置0,无PTS和element流处理点。
Elementary stream priority indicator:1bit域。它指示在相同PID的包中,TS包中有效负载所携带的ES流的优先级。该位置1,表示有效负载比其余TS包中有效负载的优先级高;该位置0,表示这个有效负载无优先级。
PCR flag:PCR(Program Clock Reference 程序参考时钟,视频复用时为27MHz)1bit标志域。该位置1指出调整域含有被编码为两部分的PCR域;该位置0指出调整域不含PCR域。
OPCR flag:OPCR(Original Program Clock Reference 原始程序参考时钟)1bit标志域。该位置1指出调整域含有被编码为两部分的OPCR域;该位置0指出调整域不含OPCR域。
Splicing point flag:1bit标志域。该位置1,表示在相应的调整域中有一个Splice countdown域,指出正在发生一个拼接点;该位置0,表示在相应的调整域中无拼接点。
Transport private data flag:1bit标志域。该位置1指出,调整域含有一个或多个私有数据拜特;该位置0指出,调整域不含私有数据拜特。
Adaptation field extension flag:1bit标志域。该位置1指出,提供一个调整域的扩展;该位置0,无调整域的扩展。
Stuffing Bytes:填充拜特。用0xFF进行填充。填充数目的多少由188字节减去包头、减去有效负载。
Payload:有效负载。实为NIT表的实际描述。

注:在我实际采用的表中,由于在NIT中加入了"QF temp network"此一描述。因此有效负载为34byte;此外,adaptation field length该域实际描述长度为填充拜特加1。

NIT表:
Table id:8bit域,对于NIT表,该处总被置为0x40(64)或0x41(65)。
Section syntax indicator:1bit域,对于NIT表,设置为1。
Reserved future use:1bit域,设置为1。
Reserved:2bit域,设置为11(0x3)。
Section length:12bit域,首先两位bit置为00,它指示段的byte数,由段长度域开始,包含CRC。该段长度不超过1021,即section length不超过1021byte。因此,整个段的总长度最大为1024byte。
Network id:16bit域。该域作为一个标志识别关于NIT执行的传输系统,区别于其余传输系统。该域值的分配在文本ETR 162[6]。
ISO reserved:2bit域,设置为11(0x3)。
Version number:5bit域,标识子表的版本号。当子表携带的信息有所改变,版本号以1的步进增加,当增至31时,它回复到0;当current next indicator置为1时,当前应用子表的版本号由table id和network id定义;当current next indicator置为0时,下一个可应用子表的版本号由table id和network id定义。
Current next indicator:1bit指示位。当该位置1,指出子表为当前可应用子表;当该位置0,指出当前传送子表不可用,下一个子表有效。
Section number:8bit域,给出这个段的数目。子表中第一段的section number为0x00,带有相同table id和network id的每一调整段将使section number加1,即该域指示在这个子表中这个段的数目。
Last section number:8bit域,即最后一个段的数目。
DVB reserved:4bit域,将被置为0x1111。
Network descriptor length:12bit域,描述跟随在该域后的网络描述的总长度。
Descriptor:该段信息由我在复用时加入,为以下描述。
Network name
descriptor tag 0x40
descriptor length 0x0F 
name QF temp network
DVB reserved:4bit域,将被置为0x1111。
Transport stream loop length:12bit域。指出TS流环从该域后第一个byte至第一个CRC-32byte前的byte总长度。在我做的流中该段无描述,值为0。
CRC:32bit域,用来证实数据正确性的循环冗余校验码,所有的CRC都可进行检查。
四.条件访问表(Conditional Access Table)
条件访问(CA)表提供一个或多个CA系统。CAT的PID值总是1,在CAT表中将给出授权管理信息(Entitlement Management Message:EMM)所在包的PID等信息。
CAT表:
Table id:固定8bit域,值为0x01。
Section syntax indicator:1bit,对于CAT,该位置1。
Section length:12bit域,首先两位bit置为00,它指示段的byte数,由段长度域开始,包含CRC。
Version number:5bit域,指出所有CAT的版本号,当CAT所带的信息每一次发生改变时,都使版本号加1。当增加为31时,它回到0,若current next indicator为1,则version number为当前可用条件访问表的版本号;若current next indicator为0,则version number为下一个可用条件访问表的版本号。
Current next indicator:1bit指示位。当该位置1,表示设置的CAT当前可用;当该位置0,表示发送的条件访问表当前不可用,而下一个表将为有效。
Section number:8bit域给出这个段的数目。在CAT表中的第一个段的section number为‘00‘,在CAT表中每一个附加段将加1。
Last section number:8bit域,指出最后一个段的数目,在整个CAT表中即段的最大数目值。
CRC:32bit域,用来证实数据正确性的循环冗余校验码。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多