MPEG-2 数据位流与视像质量可变编码

从MPEG-2的解码器部分开始,简单介绍一下。

1、MPEG-2解码器

MPEG-2 解码器

类似编码器一样,解码器该有的部分都有,只不过都是跟编码部分逆着来的。比如从最右侧视像数据的输入,经过缓存,VLD,IQ,IDCT,如果是预测图像则会得到预测误差,而后预测误差,与参考图像和移动矢量在MCP(运动补偿预测器)得到的预测图像叠加,就可以得到原始图像,从而作为视像输出出去。

预测误差从编码器输出,作为解码器的输入。所以说预测图像的压缩比是比较高的,它不需要保存当前帧的所有内容,只需要保存预测图像与原始帧之间的差值即可。而预测图像又是根据它之前的参考图像得来的,这里对于P帧来讲,它的参考帧即是I帧,所以I帧保存了图像的全部内容。

对于运动比较快的视频,比如这一帧这个人还在图像内,下一帧或下下帧,他可能就跑到图像边缘甚至图像外面了,这时所需要的I帧就比较多。而对于运动平缓的视频,I帧就可以相对少一些,预测图像就可以多一些。

2、MPEG-2数据位流

MPEG-2的数据位流与MPEG-1的结构类似,不过在接下来的内容之前,有的人可能会有疑问,这里的数据位流,指的是TS流还是PS流呀?

2.1、AU/ES/PES/PS/TS

这个问题非常好,我们上篇说过,PS流或TS流都是由一个或多个PESPacketized Elementary Stream)流组成的,我们仔细来看PES(Packetized Elementary Stream)这个词,Packetized是打包的意思,而Packetized Elementary Stream呢?就是打包基本流的意思,而ESElementary Stream)基本流,就是TS或PS流或PES流的流单位。都基本流了,还能有比基本更基本的流嘛?

ES在MPEG-2的流组成中,是其他流的基本流单位。但是我们都知道流是什么?它就是一串数据,而一串数据当然也得有内容啦,而放在视频流这,它就是一帧图像数据或一帧音频数据或者其他的一些填充数据(知道就好)。而这一帧数据,就是ES流的组成单元,也即Access Unit(AU) 存取单元。

它们的关系如下:

ES->PES->TS

AU组成ES流,ES流组成PES流,PES流组成TS或PS流。为了更清楚的理解它们在MPEG-2编码系统里的转化,我们拿出上篇文章中的这幅图:

MPEG-2编码系统

可以看到,从编码器中输出的,是对应的图像ES流或声音ES流,而后经过数据包装器,打包为对应的PES流,再经多路复合,图像和音频PES流复合在一起,打包为新的一种混合流,也即PS或TS数据流。

本文福利,免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部↓↓

2.2、视像数据位流结构

现在我们知道了,MPEG-2编码器的输出为ES基本流,所以我们接下来讲的,数据位流的结构,既不是PS流也不是TS流,而是图像ES流的结构。

我们对照下图来简单看一下:

MPEG-2视像数据位流的结构

从上图可以看出,一个视像序列由G个视像组(GOP)组成,每个组包含P帧图像(picture),每帧图像分成S条像片(slice),每条像片分成M个宏块(macroblock),每个宏块包含4个8x8的亮度Y图块和1个8x8的Cr图块,1个8x8的Cb图块(有的资料中为了方便,会直接给出2个8x8的色度(Cr,Cb)图块,但是我觉得那样会引起歧义)。

当然这里的子采样格式为4:2:0,意味着每八个像素,采集2个色度样本,也即4个(Cr、Cr、Cb、Cb)色差样本。平均每4个像素,采集4个Y、1个Cr、1个Cb。

3、视像质量的可变编码

这里的可变编码非常重要,当然它也是我们现在的实时码流切换的基础。虽然我们这里不准备展开介绍,不过也要知道它的重要性。

顾名思义,视像质量可变编码,意味着编码器可以提供不同等级的视像服务质量,以适应各种传输速率网络环境。当然它会增加编码和解码的复杂性,而且由于更加复杂,意味着编码流程也多,所以压缩效率会有些降低。

可变编码在设计的时候,采用了分层编码的技术。它把编码分为基层编码和增强层编码。基层编码能够实现自给自足,编码、传输和解码可以独立完成。增强层编码就不行了,它得依赖于基层或先前的增强层才能完成。

比如:

MPEG-2 SNR(信噪比)增强编码器

像我们上篇里给出的编码器,其实就是属于基层编码器,也即图中的下面部分。而添加是右上角的SNR增强编码器之后,这个整体就变味了SNR(信噪比)可变编码器。

当然MPEG-2不只支持信噪(正常信号与噪声信号比值,越大越好)比可变(SNR Scalability),还支持如空间分辨率可变(Spatial Scalability)、时间分辨率可变(Temporal Scalability)、数据分割(Data Partitioning)、混合可变(Hybrid Scalability)等几种可变编码方式。

原文链接:MPEG-2 数据位流与视像质量可变编码 - 资料 - 我爱音视频网 - 构建全国最权威的音视频技术交流分享论坛

本文福利,免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部↓↓

猜你喜欢

转载自blog.csdn.net/m0_60259116/article/details/125681835