PES分析
- 格式:doc
- 大小:385.50 KB
- 文档页数:6
1. PES简述所有ES流首先被打包成不同长度的PES包,通常为64kbytes,开头为6byte 的PES头:前3个byte是起始码前缀00 00 01,用于表明一个PES包的开始。
第4个byte是起始码标志,说明起始码种类,表明payload中是视频、音频还是数据流。
后两个byte是包长度,说明后面还有多少字节。
如果长度为0,表示PES包大于64kbytes。
由于PES的复用首先需ES流经过PES打包器之后,被转换成PES包。
PES 包由包头和payload组成,具体格式摘录如下:可以看到PTS/DTS是打在PES包里面的,这两个parameters是解决视音频同步显示,防止解码器输入缓存上溢或下溢的关键。
PTS表示显示单元出现在系统目标解码器(STD: system target decoder)的时间,DTS表示将存取单元全部字节从STD的ES解码缓存器移走的时刻。
每个I、P、B帧的包头都有一个PTS 和DTS,但PTS与DTS对B帧都是一样的,无须标出B帧的DTS。
对I帧和P 帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTS和DTS。
上节介绍过,ES首先需打包成PES流包,然后PES根据需要打包成PS或TS包进行存储或传输。
其每路ES只包含一路信源的编码数据流,所以每路PES 也只包含相对应信源的数据流。
对PS流而言,每个PES包头含有PTS和DTS,流识别码,用于区别不同性质ES。
然后通过PS复用器将PES包复用成PS包。
实际上是将PES包分解为更细小的PS包。
在解码的时候,解复用器将PS分解成一个个PES包,拆包器然后将PES包拆成视频和音频的ES,最后输入至各自解码器进行解码。
一个问题是:各个ES在解码时,如何保证视音频的同步呢?除了PTS和DTS的配合工作外,还有一个重要的参数是SCR(system clock reference)。
在编码的时候,PTS,DTS和SCR都是由STC(system time clock)生成的,在解码时,STC 会再生,并通过锁相环路(PLL-phase lock loop),用本地SCR相位与输入的瞬时SCR相位锁相比较,以确定解码过程是否同步,若不同步,则用这个瞬时SCR 调整27MHz的本地时钟频率。
最后,PTS,DTS和SCR一起配合,解决视音频同步播放的问题。
PS格式摘录如下:解码过程要面对的问题是:解复用,视音频的同步,解码缓存器无上下溢。
解复用即是将TS在同一信道里不同时序进行传输的节目分离出来;视音频同步由DTS, PTS和PCR三者协调完成,并且PCR是重建系统时间基准的绝对时标,而DTS和PTS是解码和重现时刻的相对时标;对解码缓存器无上下溢的问题,必须借助于系统目标解码器(STD)模型来对其进行实现,基本思想如下:TS流进入解码器后,首先由换向器,按照一定的时序关系,将各种ES流分解出来(其中也包括PSI信息流)。
分解过后的ES流会进入各自的传输缓存器,通过之后,其PES流进入各自的主存储器,注意的是:PSI信息流会进入系统缓存器,最后也到达主存储器。
最后,解码器根据DTS信息,从各个主存储器分别提取媒体或系统信息,进行解码,并根据PTS信息,将媒体内容进行显示处理。
其过程可参见下图:要依赖TS进行传输,在TS头后变为PES的信息,如下图示:在2. TS流解码过程TS流的解码顺序为:ES-PES-DTS-PTS-PCR1. 获取TS中的PAT2. 获取TS中的PMT3. 根据PMT可以知道当前网络中传输的视频(音频)类型(H264),相应的PID,PCR的PID等信息。
4. 设置demux 模块的视频Filter 为相应视频的PID和stream type等。
5. 从视频Demux Filter 后得到的TS数据包中的payload 数据就是one piece of PES,在TS header中有一些关于此payload属于哪个PES的第多少个数据包。
因此软件中应该将此payload中的数据copy到PES的buffer中,用于拼接一个PES包。
6. 拼接好的PES包的包头会有PTS,DTS信息,去掉PES的header就是ES。
7. 直接将被拔掉PES包头的ES包送给decoder就可以进行解码。
解码出来的数据就是一帧一帧的视频数据,这些数据至少应当与PES中的PTS关联一下,以便进行视音频同步。
8. I,B,B,P 信息是在ES中的。
在PES 层,主要是在PES 包头信息中加入PTS( 显示时间标签) 和DTS (解码时间标签)用于视频、音频同步。
其实,Mpeg-2 用于视音频同步以及系统时钟恢复的时间标签分别在ES ,PES 和TS 这 3 个层次中。
在ES 层,与同步有关的主要是视频缓冲验证VBV (Video Buffer Verifier ),用以防止解码器的缓冲器出现上溢或下溢;在PES 层,主要是在PES 头信息里出现的显示时间标签PTS (Presentation Time Stamp )和解码时间标签DTS(Decoding Time Stamp );在TS 层中,TS 头信息包含了节目时钟参考PCR (Program Clock Reference ),用于恢复出与编码端一致的系统时序时钟STC (System Time Clock )。
基本流程如下:首先MPEG-2 压缩编码得到的ES 基本流,这个数据流很大,并且只是I ,P , B 的这些视频帧或音频取样信息,然后加入一些同步信息,打包成长度可变长度的数据包PES ,原来是流的格式,现在成了数据包的分割形式。
同时要注意的是,ES 是只包含一种内容的数据流,如只含视频,或只含音频等,打包之后的PES 也是只含一种性质的ES, 如只含视频ES 的PES, 只含音频ES 的PES 等。
可以知道,ES 是编码视频数据流或音频数据流,每个ES 都由若干个存取单元(AU )组成,每个视频AU 或音频AU 都是由头部和编码数据两部分组成, 1 个AU 相当于编码的 1 幅视频图像或 1 个音频帧,也可以说,每个AU 实际上是编码数据流的显示单元,即相当于解码的1 幅视频图像或 1 个音频帧的取样。
PEG-2 对视频的压缩产生I 帧、P 帧、B 帧。
把帧顺序I1,P4,B2,B3,P7,B5,B6 帧的编码ES ,通过打包并在每个帧中插入PTS/DTS 标志,变成PES 。
在插入PTS/DTS 标志时,由于在 B 帧PTS 和DTS 相等,所以无须在B 帧多插入DTS 。
而对于I 帧和P 帧,由于经过复用后数据包的顺序会发生变化,显示前一定要存储于视频解码器的从新排序缓存器中,经过从新排序后再显示,所以一定要同时插入PTS 和DTS 作为从新排序的依据。
其中,有否PTS/DTS 标志,是解决视音频同步显示、防止解码器输入缓存器上溢或下溢的关键所在。
PTS 表明显示单元出现在系统目标解码器(STD- System Target Decoder )的时间, DTS 表明将存取单元全部字节从STD 的ES 解码缓存器移走的时刻。
视频编码图像帧次序为I1,P4,B2,B3,P7,B5,B6,I10,B8,B9 的ES ,加入PTS/DTS 后,打包成一个个视频PES 包。
每个PES 包都有一个包头,用于定义PES 内的数据内容,提供定时资料。
每个I 、P 、B 帧的包头都有一个PTS 和DTS ,但PTS 与DTS 对B 帧都是一样的,无须标出B 帧的DTS 。
对I 帧和P 帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTS 和DTS 。
例如,解码器输入的图像帧次序为I1,P4,B2,B3,P7,B5,B6,I10,B8,B9 ,依解码器输出的帧次序,应该P4 比B2 、B3 在先,但显示时P4 一定要比B2 、B3 在后,即P4 要在提前插入数据流中的时间标志指引下,经过缓存器重新排序,以重建编码前视频帧次序I1,B2,B3,P4,B5,B6,P7,B8,B9,I10 。
显然,PTS/DTS 标志表明对确定事件或确定信息解码的专用时标的存在,依靠专用时标解码器,可知道该确定事件或确定信息开始解码或显示的时刻。
例如,PTS/DTS 标志可用于确定编码、多路复用、解码、重建的时间。
PCR:PCR 是TS 里面的,即TS packet 的header 里面可能会有,他用来指定所期望的该ts packet 到达decoder 的时间,他的作用于SCR 类似。
DTS, PTS:对于一个ES 来说,比如视频,他有许多I,P,B 帧,而P, B 帧都是以I ,P 帧作为参考。
由于 B 帧是前向后向参考,因此要对 B 帧作decode 的话,就必须先decode 该 B 帧后面的帧(P, 或者I 帧),于是,decode 的时间与帧的真正的present 的时间就不一致了,按照DTS 一次对各个帧进行decode ,然后再按照PTS 对各个帧进行展现。
有时候PES 包头里面也会有DTS ,PTS ,对于PTS 来说,他代表了这个PES 包得payload 里面的第一个完整地audio access unit 或者video access unit 的PTS 时间(并不是每个audio/video access unit 都带有PTS/DTS ,因此,你可以在PES 里面指定一个,作为开始)。
PES 包头的DTS 也是这个原理,需要注意的是:对于video 来说他的DTS 和PTS 是可以不一样的,因为 B 帧的存在使其顺序可以倒置。
而对于audio 来说,audio 没有双向的预测,他的DTS 和PTS 可以看成是一个顺序的,因此可一直采用一个,即可只采用PTS。
3. I P B帧和PTS,DTSI frame :帧内编码帧又称intra picture,I 帧通常是每个GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。
I帧可以看成是一个图像经过压缩后的产物。
P frame: 前向预测编码帧又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;B frame: 双向预测内插编码帧又称bi-directional interpolated prediction frame,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;PTS:Presentation Time Stamp。