说一说AVFormatContext, AVStream和AVCodecContext之间的关系?

3 min read

AVFormatContext、AVStream和AVCodecContext是FFmpeg中用于处理音视频的三个重要结构体。

AVFormatContext是文件级别的结构体,包含了多个音视频流的信息和操作文件需要的参数。它在打开音视频文件时创建,并在关闭文件时释放。AVFormatContext中包含了AVStream数组,通过它可以访问每个音视频流的信息。

AVStream代表一个音视频流,例如一个视频流或一个音频流。每个AVStream都包含了音视频流的基本信息(如编码类型、时长、码率等)以及与该流相关的操作参数。AVFormatContext中的AVStream数组保存了所有音视频流的信息。

AVCodecContext是一个编码器/解码器的上下文结构体,包含了与该编码器/解码器相关的参数和操作信息。每个AVStream中都有对应的AVCodecContext,用于描述与该流相关的编码器/解码器。

AVFormatContext通过AVStream数组来保存包含的音视频流的信息,而AVCodecContext用于描述每个AVStream对应的编码器/解码器。通过这三个结构体的组合,FFmpeg可以对音视频文件进行读取、解码、编码和封装等操作。