一、编码器和解码器的架构讲解
1、编码层次:
一般来说,对于像h264、h265编解码器,一般会采用块级编码,也就是预先将一幅图像切割为多个像素块,一次对块内的部分或者所有的像素进行预测和编码;所以对编码器来说,就需要定义编码层次结构,这样编码的过程是逐层深入、依次进行:
- 1、编码单元(coding unit , 简称CU),编码的基本单元,通常是取块block
- 2、切片(slice): 由多个编码单元组成的部分图像,通常在空间上是连续的,切片定义了编码单元的可参考位置,从而将错误限制在一整幅图像内的部分范围内。
超低延迟的介绍:揭开音视频编解码超低延迟的神秘"面纱"!-CSDN博客
- 3、帧/图像(frame/picture):由多个切片组成的一幅完整的图像。
- 4、图像组(group of pictures,简称GOP):由多个帧/图像组成的部分视频序列,通常在时间上是连续的。
- 5、序列(sequeence): 表示整个完整的视频
2、视频数据冗余和预测:
视频中存在大量的冗余,而视频编码本质上就是要消除这些冗余,从而实现对视频数据的压缩。一般我们经常听到的两种冗余:
- 1、空间冗余:是静态图像中最为主要的一类数据冗余,比如说,一幅图像中如果存在较大的平缓区域,则意味着该区域中不同的像素的亮度、色度等都是非常接近的,在空间上存在很强的相关性,相互之间可以认为平滑过渡的,不会发生剧烈突变,这种就叫做空间冗余
- 2、时间冗余: 他是视频序列中常见的一类数据冗余。在视频序列中,相邻帧往往具有类似的场景和物体,其中运动物体具有类似的大小和形状,仅仅是在图像中的位置发生了改变,可以认为后一帧中的物体是前一帧中物体发生位移,这种就叫做时间冗余
为了降低冗余,可以利用相关像素对当前像素进行预测,再对预测残差(预测值与实际值之差)进行编码和传输。那一般预测技术有哪些,一般有:
- 1、帧内预测:他是利用空间上的相关性,由已经解码的相邻像素来预测当前块的像素,从而来有效的消除块间冗余
- 2、帧间预测:他是利用时间上的相关性,将邻近参考帧中与当前块最相似的块做预测块,并计算预测块与当前块在空间位置上的相对偏移量,作为运动矢量。
帧间预测和帧内预测的优势对比:
使用帧内预测的I帧可以进行独立编解码,不受其他帧的影响,I帧可以作为P帧和B帧的参考帧。但是采用帧内预测的I帧压缩效率比较低,所占的数据信息量比较大。而P帧和B帧采用帧间预测,具有很大的压缩比,能够很大提高压缩率。同时,P帧可以作为其后P帧的参考帧,或者作为其前后B帧的参考帧,所以P帧可能会造成误差的扩散,往往通过周期插入I帧来阻止误差积累。
3、混合编码框架:
首先何为混合编码?‘是对同一帧数据使用帧内编码和帧间编码多个编码策略
当前视频编码的通用处理流程依次是:
- 1、预测
- 2、变化
- 3、量化
- 4、熵编码
并且每个流程都是以块作为处理单元,编码的过程如下:
- 1、从原始帧中读入一个原始图像块
- 2、选择帧内或者帧间预测,并基于重建帧进行预测,从而得到预测图像块
- 3、将原始图像块和预测图像块相减,得到变换前的残差数据块
- 4、对变换前的残差数据块进行变换,量化后,可以得到量能更为集中的系数数据块
- 5、系数数据块一方面会和预测模式一起经过熵编码,得到压缩后的码流;另外一方面会经过反量化、反变换,得到变换后的残差数据块。
- 6、将变换后的残差数据块与预测图像块相加,就可以得到重建图像块。
- 7、基于块的视频编码形成的重构图像会出现方块效应,可以通过环路滤波去消除方块效应。
- 8、重建图像块在编码器端作为参考图像,提供给帧内和帧间预测,帧内预测一般采用未经过环路滤波的数据,帧间预测一般采用经过环路滤波的数据