音视频基础

我们首先来讲讲流媒体的封装格式,如MP4,FLV,常见的广电流媒体如TS格式。

再如常见的流媒体文本格式为M3U8,其内部就是封装的TS片格式。真正播放器解析的,也是其内部的TS片。

以上说的这是,都是流媒体的封装格式。  那我们常说的H264、H265是什么呢?这个是编码格式。

编码格式的意思就是,将流媒体的内容进行压缩所用到的算法。比如视频压缩,常用的H264编码,就是用H264算法进行压缩大小。音频就是用ACC算法进行压缩。

 一部片源,我们解码的时候,首先通过封装格式的格式头,去找到一些信息。 然后就进行每一个视频编码帧与音频编码帧的解析,这个过程是两个线程去处理,一个处理视频,一个处理音频。最后音视频同步来呈现最终的结果。如下图:

音视频基础_第1张图片

 可以看到,视频编码帧通过H264解码出来的是YUV格式,一般为YUV420或者YUV420P。再转成RGB进行显示。 这个是解码过程。编码过程就刚好相反,手机采集的视频信息最初为NV21,转再码为YUV格式,再通过H264来进行编码。  音频文件也是相同的逻辑,片源的解码用aac算法解码成PCM原始音频,再进行播放,编码过程则相反。

下图为YUV数据对比图


音视频基础_第2张图片

以下是YVU与RGB的公式的转换。ffmpeg中已经有了这些公式的接口。

音视频基础_第3张图片



音视频基础_第4张图片

GOP即Group of picture(图像组),指两个I帧之间的距离。GOP可以理解为一个视频段。里面包含了这个视频段的完整信息。先讲讲IPB帧。

I帧为关键帧,包含了帧的完整信息,P帧为预测编码图像帧,就是说这一帧的信息是跟他前一帧的信息有关,若前一帧信息丢失,则P帧信息就会出问题。B帧为双向预测编码图像帧,跟前后的帧都有关系,所以说B帧的压缩是最高的,本身的信息都分散到了前后。

我们先看看图中的解码顺序,这里先解出了I帧,随后的两个B帧都需要前后信息,到第4个P帧的时候,需要前一帧信息,注意,这里的前一帧,是指的前一个已经解析出的最近的帧,故这里指的是I帧而不是B帧。 到第4个P帧解码完成后,再开始解析第2个B帧,此时的后一帧,也不是指第3个B帧,而是指离的最近的已经解析出的P帧,故解码顺序为1342. 

可以看出,B帧跟后面的一帧是有关系的。这意味着,帧的播放顺序和解析顺序并不一致。因此,在现实的播放流程中,总是需要先缓冲一部份帧,才能流畅的播放。

DTS:Decode Time Stamp,解码时间戳

PTS:Presentation Time Stamp ,展示时间戳

可以看出,DTS跟解码顺序是一样的,PTS其实就是帧的排列顺序,当没有B帧时,这两时间戳的值是完全一样的。 

DTS的作用在,主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码。 

PTS作用于在音视频同步的时候采用。

你可能感兴趣的:(音视频基础)