FFmpeg 项目的组成
(1)基本:
ffmpeg :是一个命令行工具,用来对视频文件转换格式;
ffsever :是一个HTTP多媒体实时广播流服务器;
ffplay :是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;
(2)其它:
libavutil :包含一些公共的工具函数;
libavcodec :用于各种类型声音/图像编解码;
libswscale :用于视频场景比例缩放、色彩映射转换;
libpostproc :用于后期效果处理;
libavformat :用于音视频封装格式的生成和解析, 包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能。
libavutil:核心工具库,下面的许多其他模块都会依赖该库做一些基本的音视频处理操作。
libavformat:文件格式和协议库,封装了Protocol层和Demuxer、Muxer层,使得协议和格式对于开发者来说是透明的
libavcodec:编解码库,封装了Codec层,但是有一些Codec是具备自己的License的,FFmpeg是不会默认添加像libx264、FDK-AAC、lame等库的,但是FFmpeg就像一个平台一样,可以将其他的第三方的Codec以插件的方式添加进来,然后为开发者提供统一的接口
libavfilter:音视频滤镜库,该模块提供了包括音频特效和视频特效的处理,在使用FFmpeg的API进行编解码的过程中,直接使用该模块为音视频数据做特效处理是非常方便同时也非常高效的一种方式
libavdevice:输入输出设备库,比如,需要编译出播放声音或者视频的工具ffplay
libavresample:该模块可用于音频重采样,可以对数字音频进行声道数、数据格式、采样率等多种基本信息的转换
libswscale:该模块是将图像进行格式转换的模块,比如,可以将YUV的数据转换为RGB的数据”
libpostproc:该模块可用于进行后期处理,当我们使用AVFilter的时候需要打开该模块的开关,因为Filter中会使用到该模块的一些基础函数
AVFormatContext:视频格式和协议的封装上下文
AVStream:对应流格式,存在于AVFormatContext中,如音频流、视频流、文本流等
AVCodecContext:对应的编解码信息的上下文,存在于AVStream中
AVCodec:对应具体的编解码信息,存在于AVCodecContext
AVPacket:对应编码后或解码前的数据,所以存的是编码数据
AVFrame:对应解码后或编码前的数据,所以存档是解码数据