分类: LINUX 2016-08-16 16:38:22
1 FFmpeg 的基本组成
FFmpeg 的基本组成包含Format、Codec、Filter、Devices、Utils等,结构如图:
AvFormats: 主要为媒体文件的封装格式,也可以称之为多媒体编码数据的容器,包含了音频数据,
视频数据,字幕数据之类的容器;
AvCodecs:主要为媒体文件容器内的具体的数据对应的压缩方式,例如音频的aac压缩数据,音频的
speex压缩数据,视频h264压缩数据等,或ASS字幕数据等;
AvFilters:主要为媒体的音频数据,视频数据进行渲染,例如多个视频文件视频数据前景与背景进
行叠加、透明处理、音频重采样、音频合并等处理;
AvDevices:主要为媒体的播放输出设备,媒体的采集设备,例如音频采集设备,音频输出设备,视
频的采集设备,视频的输出设备等;
Utils:主要为FFmpeg中的AVFormats,AVCodecs,AVFilters等所用到的公用的接口;
Swscale: 主要为FFmpeg中做缩放,rgb转yuv,混色计算等用的接口。
1.1 FFmpeg 的封装模块avformat
libavformat中实现了目前多媒体领域中的几乎所有封装格式,可以封装,可以解封装,根据需求不
同,所支持的也有所不同,ffmpeg能否支持一种封装格式的视频的封装与解封装,完全取决于这个
库,例如mp4、flv、mkv等容器的封装与解封装;又或者RTMP、RTSP、TCP、UDP等协议的封装与解封
装;关于封装与解封装的操作,对CPU的消耗不会特别严重,因为封装与解封装不涉及到复杂的计
算,更多的是I/O,如果希望增加自己定制的封装格式的话,需要在libavformat中增加自己的对应
的format模块。通过代码的文件结构可以看得出来
1.2 FFmpeg 的编解码模块libavcodec
libavcodec中实现了目前多媒体领域几乎所有的编解码格式,可以编码,可以解码,不过有些编码
需要使用第三方的编码器,例如H.264(AVC)编码需要使用x264编码器,H.265(HEVC)编码需要使
用x265编码器,mp3(mp3lame)编码需要使用libmp3lame编码器等编码器,ffmpeg本身同时也支持
多种编码格式,例如mpeg4、aac、mjpeg等编码,如果希望增加自己的编码格式,或者硬件编解码,
需要在libavcodec中增加自己的codec模块,关于更多libavcode相关的信息以及使用信息将会在后
面章节进行详细的介绍。
FFmpeg使用手册 - FFmpeg 的基本组成