FFmpeg学习(二)基础知识

FFmpeg 组成

模块:

  • avcodec:编解码(最重要的库)。
  • avformat:音视频的封装格式处理。
  • avfilter:滤镜特效处理。
  • avdevice:各种设备的输入输出。
  • avutil:实用工具库(大部分库都需要这个库的支持),包括算术运算,字符操作。
  • postproc:音视频应用的后处理,如图像的去块效应。
  • swresample:音频采样数据格式转换。
  • swscale:视频像素数据格式转换

常用结构

FFmpeg里面最常用的数据结构,按功能可大致分为以下几类(以下代码行数,以branch: origin/release/3.4为准):

1. 封装格式

AVFormatContext
描述了媒体文件的构成及基本信息,是统领全局的基本结构体,贯穿程序始终,很多函数都要用它作为参数;

AVInputFormat
解复用器对象,每种作为输入的封装格式(例如FLV、MP4、TS等)对应一个该结构体,如libavformat/flvdec.c的ff_flv_demuxer;

AVOutputForma
复用器对象,每种作为输出的封装格式(例如FLV, MP4、TS等)对应一个该结构体,如libavformat/flvenc.c的ff_flv_muxer;

AVStream
用于描述一个视频/音频流的相关数据信息。

2.编解码

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

AVCodec
编解码器对象,每种编解码格式(例如H.264、AAC等)对应一个该结构体,如libavcodec/aacdec.c的ff_aac_decoder。每个AVCodecContext中含有一个AVCodec;

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

3. 网络协议

AVIOContext
管理输入输出数据的结构体;

URLProtocol
描述了音视频数据传输所使用的协议,每种传输协议(例如HTTP、RTMP)等,都会对应一个URLProtocol结构,如libavformat/http.c中的ff_http_protocol;

URLContext
封装了协议对象及协议操作对象。

4. 数据存放

AVPacket
存放编码后、解码前的压缩数据,即ES数据;

AVFrame
存放编码前、解码后的原始数据,如YUV格式的视频数据或PCM格式的音频数据等;

参考:

https://www.cnblogs.com/renhui/p/6922971.html

猜你喜欢

转载自blog.csdn.net/QQ2558030393/article/details/89944571
今日推荐