AVCodecParameters 是 FFmpeg 库中的一个数据结构,用于存储与媒体流(如视频流、音频流、字幕流等)相关的编解码参数。这些参数包括编解码器的类型、编码格式、分辨率、比特率、采样率等。AVCodecParameters 的引入是为了分离编解码器相关的参数信息,以便在不同的上下文中使用这些参数,而不需要依赖于实际的编解码器上下文。

AVCodecParameters 的主要成员变量

以下是 AVCodecParameters 结构中一些关键的成员变量及其作用:

  • enum AVMediaType codec_type:表示媒体类型,即流的类型。它是一个枚举类型,可能的值包括 AVMEDIA_TYPE_VIDEOAVMEDIA_TYPE_AUDIOAVMEDIA_TYPE_SUBTITLE 等。
  • enum AVCodecID codec_id:表示编解码器的 ID,指示该流使用的具体编解码器类型(例如 AV_CODEC_ID_H264 表示 H.264 视频编码,AV_CODEC_ID_AAC 表示 AAC 音频编码)。
  • int64_t bit_rate:流的比特率,表示每秒传输的比特数。比特率通常用于衡量视频或音频流的质量。extradata_size 表示额外数据的大小,而 extradata 是一个指向额外数据的指针。
  • int widthint height:对于视频流,这两个字段表示视频帧的宽度和高度(以像素为单位)。
  • int format:表示像素格式(对于视频流)或采样格式(对于音频流)。对于视频流,它通常是一个枚举值,如 AV_PIX_FMT_YUV420P,对于音频流,它表示音频样本格式,如 AV_SAMPLE_FMT_FLTP
  • int sample_rate:对于音频流,表示音频的采样率(每秒钟采样的次数,单位为赫兹)。
  • int channels:对于音频流,表示音频通道的数量(如单声道、立体声等)。
  • uint64_t channel_layout:对于音频流,表示音频通道的布局,例如单声道、立体声、5.1声道等。它是一个位掩码,用于标识音频通道的位置。
  • int frame_size:对于音频流,表示每个音频帧中的样本数量。
  • int block_align:对于音频流,表示每个音频块的对齐大小。
  • int initial_padding:表示初始填充量,用于音频解码器缓冲的开始部分。
  • int profile:表示编解码器的配置文件(profile),用于确定编解码器的功能级别。
  • int level:表示编解码器的级别(level),通常用于视频流,表示编解码器的复杂度和性能要求。

用途

AVCodecParameters 的主要用途是:

  • 描述流的编码参数:它包含了关于流的所有编解码器相关信息,允许开发者在解码、编码、复用(muxing)、解复用(demuxing)等操作中使用这些参数。
  • 传递和共享参数:在不同的组件(如解复用器、解码器、编码器等)之间共享和传递流的参数,而无需直接操作实际的编解码器上下文。

AVCodecContext 的关系

  • AVCodecContext 是另一个与编解码器相关的数据结构,包含更多的状态信息,并且用于实际的编码和解码操作。
  • AVCodecParameters 主要用于传递参数,而 AVCodecContext 则用于实际的编解码过程
  • 通过 avcodec_parameters_to_context 可以将 AVCodecParameters 中的参数复制到 AVCodecContext 中,用于初始化解码器或编码器。