00 数据结构查询表

数据结构查询表

AVFormatContext

AVFormatContext 是处理多媒体文件的核心结构体,包含了多媒体文件的封装格式信息。

  • 成员:

    • ic->iformat: 当前使用的输入格式上下文,指向 AVInputFormat
    • ic->streams: 媒体文件中所有流的数组。
    • ic->nb_streams: 媒体文件中流的数量。
    • ic->duration: 媒体文件的总时长(微秒为单位)。
    • ic->bit_rate: 媒体文件的总比特率。
    • ic->start_time: 文件的起始时间(微秒为单位)。
  • 作用:

    • 管理多媒体文件的封装格式,如 MP4、MKV 等。
    • 存储关于整个多媒体文件的元数据。
    • 作为访问和操作媒体文件中流的入口。

AVInputFormat / demuxer

AVInputFormat 是与特定封装格式相关的结构体,定义了如何解析和处理该格式的多媒体文件。

  • 成员:

    • iformat->name: 封装格式的名称。
    • iformat->long_name: 封装格式的详细描述。
    • iformat->read_probe: 用于探测文件是否属于该格式的函数。
    • iformat->read_header: 读取文件头部信息的函数。
    • iformat->read_packet: 从文件中读取数据包的函数。
  • 作用:

    • 定义了特定封装格式的识别、探测和读取方式。
    • 作为解复用器,将多媒体文件中的数据分离成独立的流。

AVOutputFormat / muxer

AVOutputFormat 是与特定封装格式相关的结构体,用于将多个流封装成文件。

  • 成员:

    • oformat->name: 输出格式的名称。
    • oformat->mux: 用于将数据写入文件的函数。
    • oformat->write_header: 写入文件头部信息的函数。
    • oformat->write_packet: 写入单个数据包的函数。
  • 作用:

    • 定义了如何将多个流封装成特定格式的文件。
    • 作为复用器,管理数据的写入过程。

AVStream

AVStream 表示多媒体文件中的单个流(视频、音频或字幕)。

  • 成员:

    • st->codecpar: 指向 AVCodecParameters 的指针,包含流的编解码参数。
    • st->time_base: 流的时间基准,用于时间戳的转换。
    • st->duration: 流的持续时间。
    • st->start_time: 流中第一个帧的起始时间。
    • st->bit_rate: 流的比特率。
  • 作用:

    • 存储和管理单个流的元数据和参数。
    • 作为访问和操作单个流的入口。

AVCodecParameters

AVCodecParameters 结构体用于保存音视频流的基本参数信息,是描述流的编解码参数的关键结构。

  • 成员:

    • codecpar->codec_type: 编解码器类型,标识流是视频、音频或字幕。
    • codecpar->codec_id: 编解码器的 ID,用于唯一确定使用的编解码器。
    • codecpar->codec_tag: 编解码器标签,通常在容器中用于标识流的编解码器。
    • codecpar->extradata: 指向额外数据的指针,一些编解码器需要额外初始化数据。
    • codecpar->extradata_size: extradata 所占用的字节数。
    • codecpar->format: 音视频帧的像素或采样格式,视频的像素格式或音频的样本格式。
    • codecpar->bit_rate: 流的比特率,表示流的数据速率。
    • codecpar->bits_per_coded_sample: 编码样本的位数。
    • codecpar->bits_per_raw_sample: 原始样本的位数。
    • codecpar->profile: 编解码器的配置文件,描述编解码器的性能和特性。
    • codecpar->level: 编解码器的级别,通常与编解码器的编码效率相关。
    • codecpar->width/height: 视频流的帧宽度和高度。
    • codecpar->sample_rate: 音频流的采样率。
    • codecpar->channels: 音频流的声道数。
    • codecpar->sample_fmt: 音频流的样本格式。
    • codecpar->channel_layout: 音频流的声道布局。
    • codecpar->sample_aspect_ratio: 视频流的样本宽高比。
  • 作用:

    • 提供了流的编解码参数,这些参数对于解码器的初始化和流的正确处理至关重要。
    • 允许 FFmpeg 的不同组件,如解封装器和解码器,共享和传递关于流的必要信息。

AVCodecContext

AVCodecContext 包含编解码器的上下文信息,是编解码过程中的核心结构。

  • 成员:

    • codec_ctx->codec_type: 编解码器的类型,如 AVMEDIA_TYPE_VIDEO
    • codec_ctx->codec_id: 编解码器的唯一标识符。
    • codec_ctx->bit_rate: 编码流的比特率。
    • codec_ctx->widthcodec_ctx->height: 视频的宽度和高度。
    • codec_ctx->pix_fmt: 视频的像素格式。
    • codec_ctx->sample_fmt: 音频的样本格式。
    • codec_ctx->channel_layout: 音频的声道布局。
  • 作用:

    • 存储编解码器所需的配置参数。
    • 作为编解码器工作时的上下文环境。

AVCodec

AVCodec 定义了特定编解码器的特性和功能。

  • 成员:

    • codec->name: 编解码器的名称。
    • codec->long_name: 编解码器的详细描述。
    • codec->type: 编解码器的类型,如 AVMEDIA_TYPE_VIDEO
    • codec->id: 编解码器的唯一标识符。
    • codec->encode2codec->decode: 编解码函数的指针。
  • 作用:

    • 表示特定的编解码器,提供编解码功能的接口。

AVPacket

AVPacket 用于存储编码后的数据包,包括视频帧、音频样本等。

  • 成员:

    • pkt->stream_index: 数据包所属的流索引。
    • pkt->pts, pkt->dts: 数据包的解码时间戳和显示时间戳。
    • pkt->data: 数据包的数据缓冲区。
    • pkt->size: 数据缓冲区的大小。
  • 作用:

    • 封装编码后的数据,用于在解码器和解复用器之间传输。

AVFrame

AVFrame 存储解码后的帧数据,包括像素信息或音频样本。

  • 成员:

    • frame->widthframe->height: 视频帧的宽度和高度。
    • frame->format: 视频帧的像素格式或音频帧的样本格式。
    • frame->data: 指向帧数据的指针数组。
    • frame->linesize: 每行数据的字节数。
    • frame->pts: 帧的呈现时间戳。
  • 作用:

    • 存储解码后的多媒体数据,供进一步处理或显示。