目前,我国数字电视的信道传输的三种主要传输方式都有了统一明确的国家标准。其主要差别是信道编码、调制方法,但视频和音频信源处理和系统层复用都是以MPEG-2为基础的编码方案。MPEG-2标准自制定以来,已经成为数字电视领域中系统层的普遍标准。能够熟悉MPEG-2传输流码流语法结构,并运用分析工具对系统进行常规的检测分析,为快速确认系统故障,从而排除故障保证系统正常运行,对于广大工程技术人员十分必要。本文介绍MPEG-2传输流的语法结构及复用,及ETR290标准规定的传输码流3级错误检测参数,同时结合码流分析软件对MPEG-2传输流的语法结构作一离线分析。
MPEG-2标准定义了一个节目中的各部分(如视频、音频和控制数据等)的格式,它也定义了各部分如何形成传输码流,即TS流,这一过程称为复用。MPEG-2规定了两种复用形式,即MPEG-2节目流(PS)和MPEG传输流(TS)
图1 MPEG-2 系统层编码复用示意图
如图1所示:原始的视音频数据流经编码器编码输出压缩后的基本码流ES,它含有解码器所必需的、用于恢复原始视音频的信息。基本码流ES分解打包成PES数据包,每个PES包在复用的过程中被分成固定长度的传输流包(TS Packet)。传输流被设计用于在有噪声发生的存储或传输的环境中,如在DVB广播的传输链路中。
在进行MPEG-2传输流的码流分析之前,我们有必要了解MPEG-2标准中规定的传输流的语法结构。
每个传输流中包含一系列固定长度为188 Bytes的传输流包(简称为TS包),每个TS包由4 Bytes长的包头和其后的184 Bytes的载荷组成,如图2所示。
在4 Bytes包头中含有以下重要信息:以固定值0x47开始的8bit字段的同步头,其后是几个重要的标志,如“传输错误指示”、“有效负载起始标志”、“传送优先指示”、“PID(Packet identifier)”、“调整字段控制”等。“PID”是13bit的代码,是用于区分不同类型的传输流包(如视频/音频)的重要参数,不同节目的视音频传输包在复用后的MPEG-2传输流中用唯一的PID代码标识。
图2 TS包语法结构示意图
TS流在某些情况下可能需要更多的包头信息,这时就要设置“调整区字段控制字段”来指示包头比特数要多于4 Bytes。图2表示当出现上述情形时,通过调整区字段长度码来指示附加的包头长度。这时调整区字段就紧跟包头,而有效载荷会少于184Bytes以维持恒定的TS包长度。调整区字段中重要的一个码字是PCR码字,用于解码器的系统时钟恢复。
按MPEG-2传输流中复用的节目数量,可分为单节目传输流(SPTS)和多节目传输流(MPTS)。实际在DVB链路中传输的多数情况下,多个SPTS被复用为一个多节目传输流(MPTS)。用户在收看节目时,接收机要在TS流中找到该节目对应PID的TS包。为了帮助用户确定某个PID的TS包所对应的节目,在MPEG-2 TS流中除传送视音频PES数据外,还需要传输一套表信息(PSI ),它们中携带了对TS流中构成每个节目的ES码流的描述,它们在MPEG-2中称为节目专用信息(PSI),包含以下四种信息表。
PAT:节目相关表,列出TS流中描述每个节目(Service)的PMT表的PID值,PAT的PID值固定为0x00。
CAT:条件接收表,如果节目被加扰,可以通过它定义与加扰码流有关的授权控制信息(ECM)和授权管理信息(EMM)的PID值,CAT的PID值总是0x01。
PMT:节目映射表,定义了与一个节目相关视音频码流和其他信息TS包的PID的值。
NIT:网络信息表,包含了传输MPEG复用TS流的网络信息,包括载波频率等,NIT的PID值总是0x10。
图3列出了一条SPTS的码流结构:
视频TS包 音频TS包 PAT表 PMT表 其他表
图3 PTS的码流结构
每个PSI表分成一个或多个段(Section)来传输,段的长度可变,每个段由一个CRC校验字来确认所传输的表的完整性。PSI表在其所在的TS码流中按一定周期重复传输。为了解复用一个PES包需要的PID,接收机需要先搜索PAT表,它列出了复用的TS流中所有的节目,并从中得到PMT的PID。而PMT表列出了与每个节目相关的PID信息,每个节目对应一个PMT表。此外,DVB还额外增加了其它的描述节目信息的表(SI)。
根据对MPEG-2和DVB标准以及ETR290标准的研究,将DVB/MPEG-2 TS码流的错误指示分为3个等级:第一等级是正确解码所必需的几个参数;第二等级是达到同步后连续工作所必需的参数和需要周期监测的参数;第三等级是依赖于应用的几个参数,差错优先级分类如下:
第一优先级——导致无法解码的差错(共6个):传输码流同步丢失(TS sync loss);同步字节错误(Sync byte error);节目相关表错误(PAT error);节目映射表错误(PMT error);连续计数错误(Continuity count error);PID错误(PID error)。
第二优先级——对解码损伤性差错(共6个):传送包错误(Transport error);节目时钟参考错误(PCR error);节目时钟参考精度错误(PCR accuracy error);循环冗余检测错误(CRC error);PTS错误(PTS error);条件接收表错误(CAT error)。
第三优先级——不影响可解码性差错(共10个):NIT错误(NIT error);SI重复错误(SI repetition error);缓冲器错误(Buffer error);未引用PID错误(Unreferenced PID);SDT错误(SDT error);EIT错误(EIT error); RST错误(RST error);TDT错误(TDT error);空闲缓冲器错误(Empty buffer error);数据延迟错误(Data delay error)。
错误监测参数的具体含义可参见相关文章,本文不作详细说明。
3.使用软件离线分析TS流的结构:
使用码流分析仪对MPEG-2传送流分析是我们理解其语法结构的很好的入门工具。码流分析既可以对码流进行实时分析,快速排查系统问题点,也可以将部分码流保存成文件,进行离线分析。下我们结合分析软件transport stream analyzer(TSR)对一段录制的TS码流进行离线分析。通过软件打开录制的TS流文件,如图4所示:
图4 TSR码流分析软件界面
图示左侧为按树形目录显示TS流基本结构信息,图中在TS流文件名称下展出两个子目录,我们可分别按Programs和Packets两种方式分析该段TS流的数据,Programs目录下列出了TS流中所传输的全部节目,可以看到,图4中的TS流共有两个节目,将节目再展开,可以显示每个节目的视音频信息,如PID值,右键单击视频或音频信息,在弹出菜单中可以选择查看视音频TS包中的具体数据内容,在软件界面的右侧窗口中显示。
Packet目录下我们还可以按PID了解复用在TS流中传输的所有TS包的信息,包括PSI表以及与加密系统相关的ECM、EMM信息;右击任一PID条目同样可以在弹出菜单中选择查看相应PID的TS包中的十六进制数据内容。我们选择program 1中PID为0x101的视频码流的TS包分析。在右侧的窗口中,我们可以看到这段TS码流中共有34164个PID为0x101的TS包,我们选择第77个包,窗口上部是TS包头中重要信息的摘要,窗口下部是该TS包中完整的188字节的数据内容。
图中第零字节(0x47)到第三个字节(0xb0)是这个TS包的4Bytes长的包头,字节0x47为TS包的同步字节;随后是三个指示符,每个长度为1bit,第一位是传输错误指示符,0表示没有错误;第二位为载荷单元起始指示符为0,表示这个TS包不含有该视频PES包的起始数据;第三位传输优先级指示符为0;随后的13bit长的TS包的PID值,图4中PID值为0x101,为该TS流中节目1的视频码流的PID值;图4中调整区控制码字值为11,表示该TS包中既有调整区又有载荷数据。第四字节0x07到第11字节0x03便是为调整区字段,0x07是调整长度字段的数值,表示该字段后的调整区共有7个字节长,第五字节0x10表示调整区中含有节目时钟参考字段(PCR),共占有6个字节,PCR以两部分字段构成,分别是PCR_base和PCR_extension字段。
紧随调整区PCR字段的字节0x41开始到TS包的最后一个字节0xb5是TS包的载荷字段,图中载荷字段携带着视频PES码流的数据内容。