《dvboverip详解剖析》由会员分享,可在线阅读,更多相关《dvboverip详解剖析(28页珍藏版)》请在金锄头文库上搜索。
1、dvb over ip详解TS系统解码11TS流的内容21.1ES21.2PES21.3TS42TS流的解码过程(只考虑本地文件,解码只涉及到系统层打包的解码,不涉及到编码的解码)52.1PAT解码:52.2PMT解码62.3音视频解码63TS流解码73.1总用例图73.2各解码类的UML图83.2.1解码主类83.2.2事件管理类93.2.3各类包解析的关系图103.2.4输入输出类113.2.5解析PAT、PMT、私有数据等123.2.6解析TS 包133.2.7解析PES包143.2.8PCR时钟类153.2.9CRC校验类153.3解码流程图163.3.1TS包解析流程图163.3.2
2、Section解码流程图173.3.3PES解码流程图184TS流合成(编码)194.1各编码类的UML图194.1.1编码主类194.1.2合成各类之间的关系204.2编码主要流程214.2.1TS编码流程图214.2.2负载(pes、section)打包过程22附表一:23附表二:251 TS流的内容TS-PES-ES-NALESAn elementary stream (ES) is defined by MPEG communication protocol is usually the output of an audio or video encoder.PESallows an
3、Elementary stream to be divided into packets.图一:PES结构图PES结构各字段的具体含义见附表一。由图一可见,1个PES包是由包头、ES特有信息和包数据3个部分组成。由于包头和ES特有信息二者可合成1个数据头,所以可认为1个PES包是由数据头和包数据(有效载荷)两个部分组成的。包头由起始码前缀、数据流识别及PES包长信息3部分构成。包起始码前缀是用23个连续“0”和1个“1”构成的,用于表示有用信息种类的数据流识别,是1个8 bit的整数。由二者合成1个专用的包起始码,可用于识别数据包所属数据流(视频,音频,或其它)的性质及序号。例如:比特序1 1
4、 0 是号码为的MPEG-2音频数据流; 比特序1 1 1 0 是号码为的MPEG-2视频数据流。PES包长用于包长识别,表明在此字段后的字节数。如,PES包长识别为2 B ,即28 = 16 bit字宽,包总长为216-1=65535 B,分给数据头9 B(包头6 B + ES特有信息3 B ),可变长度的包数据最大容量为65526 B。尽管PES包最大长度可达(216 -1)=65535 B(Byte),但在通常的情况下是组成ES的若干个AU中的由头部和编码数据两部分组成的1个AU长度。1个AU相当于编码的1幅视频图像或1个音频帧,参见图一右上角从ES到PES的示意图。也可以说,每个AU实
5、际上是编码数据流的显示单元,即相当于解码的1幅视频图像或1个音频帧的取样。ES特有信息是由PES包头识别标志、PES包头长信息、信息区和用于调整信息区可变包长的填充字节4部分组成的PES包控制信息。其中,PES包头识别标志由12个部分组成:PES加扰控制信息、PES优先级别指示、数据适配定位指示符、有否版权指示、原版或拷贝指示、有否显示时间标记(PTS-Presentation Time Stamp)/解码时间标记(DTS-Decode Time Stamp)标志、PES包头有否基本流时钟基准(ESCR-Elementary Stream Clock Reference)信息标志、PES包头有
6、否基本流速率信息标志、有否数字存储媒体(DSM)特技方式信息标志、有否附加的拷贝信息标志、PES包头有否循环冗余校验(CRC-Cyclic Redundancy Check)信息标志、有否PES扩展标志。有扩展标志,表明还存在其它信息。如,在有传输误码时,通过数据包计数器,使接收端能以准确的数据恢复数据流,或借助计数器状态,识别出传输时是否有数据包丢失。其中,有否PTS/DTS标志,是解决视音频同步显示、防止解码器输入缓存器上溢或下溢的关键所在。因为,PTS表明显示单元出现在系统目标解码器(STD-System Target Decoder)的时间, DTS表明将存取单元全部字节从STD的ES
7、解码缓存器移走的时刻。视频编码图像帧次序为I1P4B2B3P7B5B6I10B8B9的ES,加入PTS/DTS后,打包成一个个视频PES包。每个PES包都有一个包头,用于定义PES内的数据内容,提供定时资料。每个I、P、B帧的包头都有一个PTS和DTS,但PTS与DTS对B帧都是一样的,无须标出B帧的DTS。对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTS和DTS。例如,解码器输入的图像帧次序为I1P4B2B3P7B5B6I10B8B9,依解码器输出的帧次序,应该P4比B2、B3在先,但显示时P4一定要比B2、B3在后,即P4要在
8、提前插入数据流中的时间标志指引下,经过缓存器重新排序,以重建编码前视频帧次序I1B2B3P4B5B6P7B8B9I10。显然,PTS/DTS标志表明对确定事件或确定信息解码的专用时标的存在,依靠专用时标解码器,可知道该确定事件或确定信息开始解码或显示的时刻。例如,PTS/DTS标志可用于确定编码、多路复用、解码、重建的时间。TSTransport stream将具有共同时间基准或者具有独立时间基准的一个或者多个PES组成的单一数据流。图二:TS包结构TS结构各字段的具体含义见附表二。由图二可见,TS包由包头、自适应区和包数据3部分组成。每个包长度为固定的188 B,包头长度占4 B,自适应区和
9、包数据长度占184 B。184 B为有用信息空间,用于传送已编码的视音频数据流。当节目时钟基准(PCR-Program Clock Reference)存在时,包头还包括可变长度的自适应区,包头的长度就会大于4 B。考虑到与通信的关系,整个传输包固定长度应相当于4个ATM包。考虑到加密是按照8 B顺序加扰的,代表有用信息的自适应区和包数据的长度应该是8 B的整数倍,即自适应区和包数据为238 B =184 B。 TS包的包头由如图所示的同步字节、传输误码指示符、有效载荷单元起始指示符、传输优先、包识别(PID-Packet Identification)、传输加扰控制、自适应区控制和连续计数器
10、8个部分组成。其中,可用同步字节位串的自动相关特性,检测数据流中的包限制,建立包同步;传输误码指示符,是指有不能消除误码时,采用误码校正解码器可表示1bit 的误码,但无法校正;有效载荷单元起始指示符,表示该数据包是否存在确定的起始信息;传输优先,是给TS包分配优先权;PID值是由用户确定的,解码器根据PID将TS上从不同ES来的TS包区别出来,以重建原来的ES;传输加扰控制,可指示数据包内容是否加扰,但包头和自适应区永远不加扰;自适应区控制,用2 bit表示有否自适应区,即(01)表示有有用信息无自适应区,(10)表示无有用信息有自适应区,(11)表示有有用信息有自适应区,(00)无定义;连
11、续计数器可对PID包传送顺序计数,据计数器读数,接收端可判断是否有包丢失及包传送顺序错误。显然,包头对TS包具有同步、识别、检错及加密功能。 TS包自适应区由自适应区长、各种标志指示符、与插入标志有关的信息和填充数据4部分组成。其中标志部分由间断指示符、随机存取指示符、ES优化指示符、PCR标志、接点标志、传输专用数据标志、原始PCR标志、自适应区扩展标志8个部分组成。重要的是标志部分的PCR字段,可给编解码器的27MHz时钟提供同步资料,进行同步。其过程是,通过PLL,用解码时本地用PCR相位与输入的瞬时PCR相位锁相比较,确定解码过程是否同步,若不同步,则用这个瞬时PCR调整时钟频率。因为
12、,数字图像采用了复杂而不同的压缩编码算法,造成每幅图像的数据各不相同,使直接从压缩编码图像数据的开始部分获取时钟信息成为不可能。为此,选择了某些(而非全部)TS包的自适应区来传送定时信息。于是,被选中的TS包的自适应区,可用于测定包信息的控制bit和重要的控制信息。自适应区无须伴随每个包都发送,发送多少主要由选中的TS包的传输专用时标参数决定。标志中的随机存取指示符和接点标志,在节目变动时,为随机进入I帧压缩的数据流提供随机进入点,也为插入当地节目提供方便。自适应区中的填充数据是由于PES包长不可能正好转为TS包的整数倍,最后的TS包保留一小部分有用容量,通过填充字节加以填补,这样可以防止缓存
13、器下溢,保持总码率恒定不变。2 TS流的解码过程(只考虑本地文件,解码只涉及到系统层打包的解码,不涉及到编码的解码)TS流的基本解码过程:PAT节目关联表-PMT节目映射表-PES音频、视频包。首先,从PAT获取TS流中所有节目映射表.然后,从节目映射表中获取每个节目(本设计为本地文件,只含有一个PMT)数据(视频和音频)的PID。最后,根据传输过来的数据PID对视频数据和音频数据进行系统层复用解码。系统层复用解码:循环:TS-PES-ES。PAT解码:PAT 表携带以下信息:(1)TS 流ID - transport_stream_id,该ID标志唯一的流ID 。(2)节目频道号- prog
14、ram_number,该号码标志TS流中的一个频道, 该频道可以包含很多的节目(即可以包含多个Video PID 和Audio PID)(3)PMT 的PID- program_map_PID,表示本频道使用的哪个PID做为PMT 的,因为PID可以有很多的频道, 因此DVB规定PMT 的PID 可以由用户自己定义PMT解码PMT 表中包含的数据如下:(1) 当前频道中包含的所有Video 数据的PID(2) 当前频道中包含的所有Audio 数据的PID(3) 和当前频道关联在一起的其他数据的PID(如数字广播,数据通讯等使用的PID)音视频解码音视频解码的数据如下:(1) 根据音频PID解码
15、音频数据到缓存区(2) 根据视频PID解码音频数据到缓存区(3) 和当前频道关联在一起的其他数据放到数据区中3 TS流解码总用例图Decoder 首先调用事件管理器注册各类事件(事件类型见3.2.2),然后调用read_packet函数读取指定文件中的TS包进行分析,根据PID值不同分别对TS进行不同的处理。Parse_PAT/PMT/._packet把PAT(注:PAT的PID为0)和PMT的携带的相关节目流PID的信息(包括视频,音频,私有数据等)存入Directory中,之后Parse_ts_packet通过Directory中提供的PID信号分别对不同的TS分别处理。各解码类的UML图3.1.1 解码主类The Decoder object manages such global information as the Network Table pid value, the current packet number and the number of programs and streams per program (as repr