bin文件中可以看到8个库:
一、FFmpeg的8个库
- avdevice : 硬件的音视频采集、加速和显示。
- avfilter:滤镜特效处理。
- avformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息、读取音视频数据等功能。各种流媒体协议代码(如rtmpproto.c等)以及音视频格式的(解)复用代码(如flvdec.c、flvenc.c等)都位于该目录下
- avcodec:编解码,音视频各种格式的编解码。各种格式的编解码代码(如aacenc.c、aacdec.c等)都位于该目录下。
- postproc: 用于后期效果处理,如图像的去块效应等。
- swresample:音频采样数据格式转换,提供音频重采样,采样格式转换和混合等功能。
- swscale:提供原始视频的比例缩放、色彩映射转换、图像颜色空间或格式转换的功能。
- 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:时间基准,真正的时间 =PTStime_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。