ffmpeg入门--基础知识【2】

bin文件中可以看到8个库:

在这里插入图片描述

一、FFmpeg的8个库

  1. avdevice : 硬件的音视频采集、加速和显示。
  2. avfilter:滤镜特效处理。
  3. avformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息、读取音视频数据等功能。各种流媒体协议代码(如rtmpproto.c等)以及音视频格式的(解)复用代码(如flvdec.c、flvenc.c等)都位于该目录下
  4. avcodec:编解码,音视频各种格式的编解码。各种格式的编解码代码(如aacenc.c、aacdec.c等)都位于该目录下。
  5. postproc: 用于后期效果处理,如图像的去块效应等。
  6. swresample:音频采样数据格式转换,提供音频重采样,采样格式转换和混合等功能。
  7. swscale:提供原始视频的比例缩放、色彩映射转换、图像颜色空间或格式转换的功能。
  8. avutil:包含一些公共的工具函数的使用库,包括算数运算,字符操作等。

二、FFmpeg的常用数据结构

1. 封装格式

  • AVFormatContext
    描述媒体文件的构成及基本信息,封装格式上下文结构体,是统领全局的基本结构体,很多函数需要使用它作为参数,保存了视频文件封装格式相关信息。

    主要变量


    struct AVInputFormat *iformat:输入数据的封装格式
    AVIOContext *pb:输入数据缓存
    unsigned int nb_streams:音视频流个数(输入视频的AVStream 个数)
    AVStream **streams:音视频流(输入视频的AVStream []数组)
    char filename[1024]:文件名
    int64_t duration:时长(单位:us)(输入视频的时长(以微秒为单位))
    int bit_rate:比特率(输入视频的码率)
    AVDictionary *metadata:元数据

  • AVInputFormat
    解复用器对象,每种作为输入的封装格式对应一个该结构体。

    主要变量


    long_name:封装格式的长名称
    extensions:封装格式的扩展名
    id:封装格式ID
    一些封装格式处理的接口函数

  • AVOutputFormat
    复用器对象,每种作为输出的封装格式对应一个该结构体。

  • AVStream
    用于描述一个视频或者音频流的相关数据信息,视频文件中每个视频(音频)流对应一个该结构体。

    主要变量


    AVCodecContext codec:视频/音频流的AVCodecContext
    AVRational time_base:时间基准,真正的时间 =PTS
    time_base
    int64_t duration:该视频/音频流时间长度
    AVDictionary *metadata:元数据信息
    AVRational avg_frame_rate:帧率
    AVPacket attached_pic:附加图片

2. 编解码

  • AVCodecContext
    描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息。

    主要变量


    codec:编解码器的AVCodec
    width, height:图像的宽高(只针对视频)
    pix_fmt:像素格式(只针对视频)
    sample_rate:采样率(只针对音频)
    channels:声道数(只针对音频)
    sample_fmt:采样格式(只针对音频)

  • AVCodec
    编解码器对象,每种编解码格式对应一个该结构体,每一个AVCodecContext都包含一个AVCodec;

    主要变量


    name:编解码器名称
    long_name:编解码器长名称
    type:编解码器类型
    id:编解码器ID
    一些编解码的接口函数

  • AVCodecParameters
    编解码参数,每个AVStream中都含有一个AVcodecParameters,用于存放当前流的编解码参数。

    主要变量


    enum AVMediaType codec_type 编码数据的一般类型;
    enum AVCodecID codec_id 特定类型的编码数据(使用的编解码器);
    uint32_t codec_tag 有关编解码器的其他信息;
    uint8_t *extradata 初始化解码器所需的额外二进制数据,依赖于编解码器;
    int extradata_size extradata内容的大小(以字节为单位);
    int64_t bit_rate 编码数据的平均比特率(以每秒位数为单位)

3. 网络协议

  • AVIOContext
    管理输入输出的结构体。字节IO 上下文。

    主要变量


    unsigned char * buffer 启动缓冲区
    int buffer_size 最大缓冲区大小
    unsigned char * buf_ptr 缓冲区当前位置
    unsigned char * buf_end 如果读取函数返回的数据少于请求数据,则数据结束可能小于buffer + buffer_size

  • URLProtocol
    描述音视频数据传输所使用的协议,每种传输协议对应一个URLContext结构。

    主要变量


  • AVPacket
    ,存储一帧压缩编码数据。存放编码后,解码前的压缩数据,即ES数据。

    主要变量


    uint8_t *data:压缩编码数据,一个AVPacket的data通常对应一个NAL。
    int size:data的大小
    int64_t pts:显示时间戳
    int64_t dts:解码时间戳
    int stream_index:标识该AVPacket所属的视频/音频流。

  • AVFrame
    该结构描述了解码的(原始)音频或视频数据。存放编码前,解码后的原始数据,如YUV格式的视频数据或PCM|格式的音频数据等.

    主要变量


    data:解码后的图像像素数据(音频采样数据)。
    linesize:对视频来说是图像中一行像素的大小;对音频来说是整个音频帧的大小。
    width, height:图像的宽高(只针对视频)。
    key_frame:是否为关键帧(只针对视频) 。
    pict_type:帧类型(只针对视频) 。例如I,P,B。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41498261/article/details/84193590
今日推荐