FFMpeg主要数据结构
FFMpeg中主要数据结构存在包含关系,如下标题显示的就是包含层级的关系。
AVFormatContext -> AVStream -> AVCodecContext -> AVCodec,其中后者是前的的数据成员。
AVFormatContext是一个贯穿始终的数据结构,很多函数都用到它作为参数,是输入输出相关信息的一个容器。他的主要成员如下:
1. AVInputFormat和AVOutputFormat,同一时间只能存在一个。当播放视频时AVInputFormat生效,录制视频时则AVOutputFormat生效。
2. AVStream是继AVFormatContext之后第二个贯穿始终的数据结构,它保存于数据流相关的编解码器、数据段等信息,还包含“流”这个概念中的一些信息。
2.1 AVCodecContext保存AVCodec指针和与codec相关的数据。在AVStream初始化后,AVCodecContext的初始化时Codec使用中最重要的一环。AVCodecContext中的codec_type,codec_id二个变量对于encoder/decoder的匹配来说,最为重要。
AVCodecContext中有两个成员:AVCodec,AVFrame。
2.1.1 AVCodec记录了所要使用的Codec的信息并有5个函数:init,encoder,close,decode,flush来完成编解码工作。
2.1.2 AVFrame中主要包饭了编码后的帧信息。
typedef struct AVFrame {
FF_COMMON_FRAME
} AVFrame;
其中FF_COMMON_FRAME是以宏出现的,由于编码过程中AVFrame中的数据是要经常存取的,为了加速,采取这样的代码手段。