音视频开发基础知识整理

术语:

容器(Container):容器就是一种文件格式,比如flv,mkv等。包含下面5种流以及文件头信息。

流(Stream):是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。

帧(Frame):帧代表一幅静止的图像,分为I帧,P帧,B帧。(下文介绍)

编解码器(Codec):是对视频进行压缩或者解压缩的工具。

复用(mux):把不同的流按照某种容器的规则放入容器。

解复用(demux):把不同的流从某种容器中解析出来。

 

视频编码方式

硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等

软编码:使用CPU进行编码,软编码通常使用:ffmpeg+x264

 

编码的流程:

采集--> 获取到视频帧--> 对视频帧进行编码 --> 获取到视频帧信息 --> 将编码后的数据以NALU方式写入到文件

 

视频编码协议:

H. 264:低码率,高质量,高容错 。(编码单位固定16*16)开源实现:ffmpeg、openh264、x264。

H. 265:能达到H.264两倍之压缩率,可支持4k分辨率,最高到8k。(编码单位8*8-64*64)开源实现:ffmpeg、libde265、x265。

二者比较:H.265更为先进,同样画质的情况下,265理论存储空间节省50%,同样码率下,265理论画质提高30%-40%。

 

视频编解码开源实现:

ffmpeg:是一套开源的、用于对音视频进行编码&解码&转化计算机程序

x264:x264是一种免费的、开源的、具有更优秀算法的H.264/MPEG-4 AVC视频压缩编码方式

 

视频单位:

帧率:每秒钟多少帧画面

码率:单位时间内保存的数据量

GOP:group of pictures 一组I帧为首的序列,后面跟着P帧或B帧。

GOP Size:两个I帧之间的间隔,例如:GOP为120,如果是720p 帧率60 的话,那就是2s一次I帧. 

 

视频编码中的帧:

I帧:表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)

P帧:表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

B帧:是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累~。

 

DTS和PTS:

DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。

PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。

 

图像存储格式:

RGB:使用红、绿、蓝三原色的亮度来定量表示颜色。

BGR:与RGB一样,B与R对调。

音视频开发基础知识整理_第1张图片

 

YUV:Y表示亮度,CbCr表示颜色。

音视频开发基础知识整理_第2张图片

 

你可能感兴趣的:(音视频开发)