文章

ffmpeg 6.0 中 AVPacket 结构体

Desktop View

AVPacket 是 ffmpeg 存储的是经过编码的压缩数据。

AVPacket

携带一个NAL视频单元,或者多个NAL音频单元。 AVPacket保存一个NAL单元的解码前数据, 该结构本身不直接包含数据,其有一个指向数据域的指针。 传递给avcodec_send_packet函数的AVPacket结构体data中的数据前面是00 00 00 01开头,是NALU格式的数据 AVPacket也可以不包含压缩编码数据,而只包含side data,这种包可以称为空packet。 例如,编码结束后只需要更新一些参数时就可以发空packet。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
typedef struct AVCodec {
    /**
     * 编解码器实现的名称。
     * 该名称在编码器之间和解码器之间是全局唯一的(但编码器和解码器可以共享相同的名称)。
     * 这是从用户角度查找编解码器的主要方法。
     */
    const char *name;
    /**
     * 编解码器的描述性名称,旨在比名称更易于人类阅读。
     * 您应该使用 NULL_IF_CONFIG_SMALL() 宏来定义它。
     */
    const char *long_name;
    enum AVMediaType type;
    enum AVCodecID id;
    /**
     * 编解码器功能。
     * 参阅 AV_CODEC_CAP_*
     */
    int capabilities;
    uint8_t max_lowres;                     ///< 解码器支持的 lowres 的最大值
    const AVRational *supported_framerates; ///< 支持的帧速率数组,如果任意帧速率都支持则为 NULL,数组以 {0,0} 结尾
    const enum AVPixelFormat *pix_fmts;     ///< 支持的像素格式数组,如果未知则为 NULL,数组以 -1 结尾
    const int *supported_samplerates;       ///< 支持的音频采样率数组,如果未知则为 NULL,数组以 0 结尾
    const enum AVSampleFormat *sample_fmts; ///< 支持的样本格式数组,如果未知则为 NULL,数组以 -1 结尾
#if FF_API_OLD_CHANNEL_LAYOUT
    /**
     * @deprecated 使用 ch_layouts 代替
     */
    attribute_deprecated
    const uint64_t *channel_layouts;         ///< 支持的通道布局数组,如果未知则为 NULL。数组以 0 结尾
#endif
    const AVClass *priv_class;              ///< 私有上下文的 AVClass
    const AVProfile *profiles;              ///< 识别的配置文件数组,如果未知则为 NULL,数组以 {FF_PROFILE_UNKNOWN} 结尾

    /**
     * 编解码器实现的组名。
     * 这是支持此编解码器的包装器的简短符号名称。
     * 包装器使用某种外部实现来实现编解码器,例如
     * 外部库,或者操作系统或
     * 硬件提供的编解码器实现。
     * 如果此字段为 NULL,则这是一个内置的、libavcodec 本地编解码器。
     * 如果不为 NULL,则在大多数情况下,这将是 AVCodec.name 中的后缀
     * (通常 AVCodec.name 将采用 "<编解码器名称>_<包装器名称>" 的形式)。
     */
    const char *wrapper_name;

    /**
     * 支持的通道布局数组,以一个为零的布局结尾。
     */
    const AVChannelLayout *ch_layouts;
} AVCodec;
本文由作者按照 CC BY 4.0 进行授权