FFmpeg的目录结构
打开FFmpeg的源代码目录,可以发现目录结构相对比较简单,
compact目录下主要是头文件,是为了兼容不同平台或系统的数据类型定义,例如compat/msvcrt/snprintf.h和snprintf.c是兼容C99的snprintf()和vsnprintf()声明及实现;
libavcodec目录下是编码/解码库所在的代码路径;
libavdevice目录下是和一些特定设备相关的接口实现,比如sdl显示设备,alsa音频输出设备,opengl图形加速设备,v4l2视频设备(比如摄像头);
libavfilter是一个类似DirecShow机制的帧处理函数集,通过graph-based机制,将不同处理功能的filter函数,链接(link)起来;
libavformat是复用/解复用库,一般用于多媒体文件的处理;
libavresample顾名思义,是一个重采样库,比如音频采样率从44.1KHz到96KHz;
libavutil是支撑FFmpeg的工具集,像fifo管理,内存管理,时间管理等;
libpostproc是后期处理库;
libswresample是音频重采样,格式转换和混合;功能和libavresample十分类似,是FFmpeg相对早期的实现方法;
libswscale是颜色空间转换和大小尺寸缩放的库;
cmdutils.c是用户使用命令行进行ffmpeg操作时用到的工具;
ffmpeg.c是ffmpeg工具的源码;
ffplay.c是一个基于FFmpeg库文件的播放器实例;
ffprobe.c是解析媒体文件格式信息的例子;
ffserver.c是RTSP/HTTP流媒体服务器的源代码;
configure是编译前执行配置的脚本;
FFmpeg的配置
FFmpeg在编译前需要进行配置,它的配置选项也极其丰富,可以通过如下命令来查看详细的配置信息,
./configure --help
下面,我们来分类了解一下FFmpeg的配置详情。
帮助选项,可以通过列表显示编解码器信息,复用/解复用信息,硬件加速,解析器,协议,过滤器,输入输出设备等信息,
Help options:
--help print this message
--list-decoders show all available decoders
--list-encoders show all available encoders
--list-hwaccels show all available hardware accelerators
--list-demuxers show all available demuxers
--list-muxers show all available muxers
--list-parsers show all available parsers
--list-protocols show all available protocols
--list-bsfs show all available bitstream filters
--list-indevs show all available input devices
--list-outdevs show all available output devices
--list-filters show all available filters
标准选项,比如把log输出重定向到某路径,编译后的库文件的安装路径等,[ ]里的内容是默认的配置,
Standard options:
--logfile=FILE log tests and output to FILE [config.log]
--disable-logging do not log configure debug information
--fatal-warnings fail if any configure warning is generated
--prefix=PREFIX install in PREFIX []
--bindir=DIR install binaries in DIR [PREFIX/bin]
--datadir=DIR install data files in DIR [PREFIX/share/ffmpeg]
--docdir=DIR install documentation in DIR [PREFIX/share/doc/ffmpeg]
--libdir=DIR install libs in DIR [PREFIX/lib]
--shlibdir=DIR install shared libs in DIR [LIBDIR]
--incdir=DIR install includes in DIR [PREFIX/include]
--mandir=DIR install man page in DIR [PREFIX/share/man]
--pkgconfigdir=DIR install pkg-config files in DI