看了几天的书终于有点明白了,真正搞清楚了ES,PES,PS,TS之间的关系,es即为原始的视频或音频数据,但它根据视频格式的不同,其格式也是不同的。
把ES打包以后就是PES了;
把PES封装PS格式就为PS流;
把PES封装成TS格式就为TS流;
而我所要做的就是把TS解析成pes,再把PES解析成es,然后给解码器来解;
GOP:group of picture图像群组
由I帧开始,由P帧,B帧,D帧组成一幅图像的编码数据就是一个图像群组,如果显示顺序是:I0、B1、B2、P3、B4、B5、P6、B7、B8、I9,则编解码顺序为:I0、P3、B1、B2、P6、B4、B5、I9、B7、B8。
***********************************************************************************************************************
MPEG-2视频编码概述
MPEG-2视频通常包含多个GOP(GOP = Group Of Pictures),每一个GOP包含多个帧。帧的帧类通常包括I-帧、P-帧和B-帧。其中I-帧采用帧内编码,P-帧采用前向估计,B-帧采用双向估计。
一般来说输入视频格式是25(CCIR标准)或者29.97(FCC)帧/秒。
MPEG-2支持隔行扫描和逐行扫描。在逐行扫描模式下,编码的基本单元是帧。在隔行扫描模式下,基本编码可以是帧,也可以是场(field)。
原始输入图像首先被转换到YCbCr颜色空间。
其中Y是亮度,Cb和Cr是两个色度通道。对于每一通道,首先采用块分割,然后形成“宏块”(macroblocks),宏块构成了编码的基本单元。每一
个宏块再分割成8x8的小块。色度通道分割成小块的数目取决于初始参数设置。例如,在常用的4:2:0格式下,每个色度宏块只采样出一个小块,所以三个通
道宏块能够分割成的小块数目是4+1+1=6个。
对于I-帧,整幅图像直接进入编码过程。对于P-帧和B-帧,首先做运动补偿。通常来说,由于相邻帧之间的相关性很强,宏块可以在前帧和后帧中对应相近的位置找到相似的区域匹配的比较好,这个偏移量作为运动向量被记录下来,运动估计重构的区域的误差被送到编码器中编码。
对于每一个8×8小块,离散余弦变换把图像从空间域转换到频域。得到的变换系数被量化并重新组织排列顺序,从而增加长零的可能性。之后做游程编码(run-length code)。最后作哈夫曼编码(Huffman Encoding)。
I帧编码是为了减少空间域冗余,P帧和B帧是为了减少时间域冗余。
GOP是
由固定模式的一系列I帧、P帧、B帧组成。常用的结构由15个帧组成,具有以下形式IBBPBBPBBPBBPBB。GOP中各个帧的比例的选取和带宽、
图像的质量要求有一定关系。例如因为B帧的压缩时间可能是I帧的三倍,所以对于计算能力不强的某些实时系统,可能需要减少B帧的比例。
MPEG-2输出的比特流可以是匀速或者变速的。最大比特率,例如在DVD应用上,可达10.4 Mbit/s。如果要使用固定比特率,量化尺度就需要不断的调节以产生匀速的比特流。但是,提高量化尺度可能带来可视的失真效果。比如马赛克现象。
阅读(2848) | 评论(1) | 转发(0) |