目录
现代的视频编码器里存在GOP(Group of Pictures)的概念,代表了一组连续的图像帧。
解码时依赖其他帧的信息越多,说明当前帧的冗余越少,压缩率越高,一个简单的估算可以认为I帧、P帧、B帧的大小比例可达到9∶3∶1。

DecodeTimestamp(解码时间戳)和Presentation Timestamp(显示时间戳
假设帧的原始序列为I、B1、B2、P1、B3、B4、P2……,
而解码的顺序将是I、P1、B1、B2、P2、B3、B4……
MPEG-2编码器技术
MPEG-2编码器使用了DCT(Discrete CosineTransform,离散余弦变换、运动补偿和霍夫曼编码。
对数据从大到小定义了Sequence、GOP、Picture、Slice、宏块(MacroBlock)、Block等多个层次。在MPEG-2中宏块定义了4∶2∶0、4∶2∶2、4∶4∶4不同结构,Block则代表了8×8个采样值。
在帧内编码时,MPEG-2只应用DCT变换和量化[插图]步骤,而帧间编码时,首先将原图和预存的预测图进行比较,计算出运动矢量,和参考帧一并生成原图的预测图。然后由原图和预测图的差值得到差分图像,进行DCT变换和量化步骤。最后经历无损编码阶段得到最终的结果

MPEG-2编码器应用到的值得一提的详细技术点还包括:Z字扫描、游程编码[插图]和熵编码、运动估计和码率控制。
- Z字扫描(Zigzag Scan).由于量化过程。如果数据可以被期待在某一个区域中的相似特征出现频率较高而非沿着直线行进,则采用Z字扫描可以有效提高压缩效率,因为聚集在起的特征只需要保存其差异即可,而非保存所有特征的所有信息。
- 游程编码(RLE.Run Length Encoding)来源于一种简单的思想,用变长的编码来取代连续出现的重复信息,壁如“AAABBBBCCDEEEEE”,即可被压缩成"A3B4C2D1E5”,应用于音视频领域时,它需要输入的是经过变换,连续重复数据较多的情况。
- 熵编码(Entropy Encoding)与游程编码均是无损压缩方法,主要类型的嫡编码方式对每一个符号创建并分配唯一的前缀码,并替换成可变长度前缀无关的输出,霍夫曼编码即是熵编码的一种,算术编码也届于熵编码,为得到好的压缩效果,需要尽可能精确地知道每个输入单元出现的概率,而对概率的估计越准确。压缩效率就越高,此时既可以在压缩前进行全文统计,亦可以动态计算,如按照已经编码的概率计算,还可以计算未编码部分的概率等。
- 运动估计,主要用于描述编码关系上相邻的两帧差别,即前一帧每个块如何移动到后面一帧,设法搜索到它们之间的相对偏移,即所谓运动矢量,利用运动矢量,将参考帧的宏块移动到对应位置,即可生成被压缩图像的预测,因为在自然情况下,通常运动存在一定规律,故预测图像和被压缩图像之间差分值较低,可以帮助去除桢间冗余度。
- 码率控制。视频的码率越高,往往质量越高,但为了减少传输和存储的成本,人们希望压缩得到的视频越小越好,故而设置合适的码率,取得质星和大小的平衡就非常重要,好的编码器可以让编出的视频尽可能符合预先设置的码率。不同的编码器会采取不同策略来控制所编视频的码率,不仅控制其中某—视频片段的码率,也包括整体输出的文件大小。
从MPEG-4等编码格式开始,才开始从基于像素的编码转为基于对象和内容的编码。
MPEG-4编码器引入了VOP(VideoObject Plane)作为核心概念,包含对象提取、编码可分级、半像素搜索、重叠运动补偿、重复填充等技术。
H.264编码器加入了更小的变换块、可变块大小运动补偿、1/4采样精度的运动补偿、加权预测、多参考帧运动补偿、循环去块效应滤波器、基于上下文的熵编码等数十项较大的新编码工具或改进。
当前视频编码标准主要包括三种的帧类型:I帧、P帧和B帧。随着H.264/AVC为了顺应视频流的带宽自适应性和抗误码性能的要求,又定义了两种新的帧类型:SP帧和SI帧。
充分利用这一特性,SP帧可取代了I帧,广泛应用于流间切换(bitstreamswitching)、拼接(splicing)、随机接入(randomaccess)、快进快退(fastforward,fastbackward)以及错误恢复(errorrecovery)等应用中,同时大大降低了码率的开销。
SP帧的编码效率尽管略低于P帧,但却远远高于I帧,大大改善了H.264的网络亲和性,支持灵活的流媒体服务应用,具有很强的抗误码性能,适应在噪声干扰大、丢包率高的无线信道中传输。
- 流间切换问题
这涉及会话业务和流业务两种应用场合。
而流业务的特点是非实时编解码,这往往采用预先编码出不同质量和带宽要求的视频码流。
这样,视频服务器只需在不同的码流间切换,以适应网络有效带宽的不断变化。

从SP 帧的特性可知,使用不同的参考帧作预测,也可以得到完全相同的解码帧。这一特点正好适用于流间切换。如下图所示中,视频流明确的切换点处放置主SP 帧(Primary SP-frames)—S1,n帧和S2,n 帧。在不同编码参数的视频流间进行切换时,发送与主SP 帧相对应的辅SP 帧(SecondarySP-frames)—S12,n。当然信源编码部分根据需要插入SP/SI 帧,也适当增加了编码的复杂度。
- 拼接(Splicing)与随机接入(Random Access)
然而,实际的流间切换的应用并不单单如此。例如,关注同一事件而处于不同视角的多台摄像机的输出码流间的切换和电视节目中插入广告等,这就涉及到拼接不同图像序列生成码流的问题。由于各个码流来自于不同的信源,帧间缺乏相关性,切换点处的辅帧如果仍采用帧间预测的辅SP 帧,编码效率就不会那么有效,而应采用空间预测的SI 帧——SI2,n 帧。
综上所述,SP 帧与SI 帧均可用于流间切换。当视频流的内容相同,编码参数不同采用SP 帧;而当视频流的内容相差很大时,则采用SI 帧将更加有效。
- 错误恢复
No comments yet.