一、 ffmpeg簡介
FFmpeg框架的基本組成包含 AVFormat 、AVCodec、AVFilter、AVDevice、AVUtil等模塊庫,如下圖片:
1 、FFmpeg的封裝模塊AVFormat
AVFormat中實現了目前多媒體領域中的絕大多數媒體封裝格式,包含封裝和解封裝,如MP4、FLV、KV、TS等文件封裝格式,RTMP、RTSP、MMS、HLS等網絡協議封裝格式。FFmpeg是否支持某種媒體封裝格式,取決於編譯時是否包含了該格式的封裝庫。根據實際需求,可進行媒體封裝格式的擴展,增加自己定製的封裝格式,即在AVFormat中增加自己的封裝處理模塊。
2、FFmpeg的編解碼模塊AVcodec
AVCodec中實現可目前多媒體領域絕大多數常用的編解碼格式,既支持編碼,也支持解碼。AVCodec除了支持MPEG4、AAC、MJPEG等自帶的媒體編解碼格式之外,還支持第三方的編解碼器,如H.264(AVC)編碼,需要使用x264編碼器;H.265(HEVC)編碼,需要使用x265編碼器;MP3(mp3lame)編碼,需要使用libmp3lame編碼器。如果希望增加自己的編碼格式,或者硬件編解碼,則需要在AVCodec中增加相應的編解碼模塊。
3、FFmpeg的濾鏡模塊AVFilter
AVFilter庫提供了一個通用的音頻、視頻、字幕等濾鏡處理框架。在AVFilter中,濾鏡框架可以有多個輸入和多個輸出。如下例子
4、FFmpeg的視頻圖像轉換計算模塊swscale
swscale模塊提供了高級別的圖像轉換API,例如它允許進行圖像縮放和像素格式轉換,常見於圖像從1080p轉換成720p或者480p等的縮放,或者將圖像數據從YUV420p轉換成YUYV,或者YUV轉RGB等圖像格式轉換。
5、FFmpeg 的音頻轉換計算模塊seresample
swresample模塊提供了高級別的音頻重採樣API。例如他允許操作音頻採樣、音頻通道佈局轉換與佈局調整。
二、編碼、解碼、封裝、解封裝支持
1、FFmpeg的編碼器支持
FFmpeg支持的編碼器比較全面,比如AAC、AC3、H.264、H.265、MPEG4、MPEG2VIDEO、PCM、FLV1的編碼器支持。
2、FFmpeg的解碼器支持
FFmpeg支持的解碼器模塊decoders支持了MPEG4、H.264、H.265(HEVC)、MP3等格式
3、FFmpeg的封裝支持
FFmpeg支持生成裸流文件,如H.264、AAC、PCM,也支持一些常見的格式,如MP3、MP4、FLV、M3U8、WEBM等。
4、FFmpeg的解封裝支持
FFmpeg源碼中已經支持的demuxer非常多,包含圖片(image)、MP3、FLV、MP4、MOV、AVI等
5、FFmpeg的通信協議支持
FFmpeg支持的流媒體協議比較多,包含MMS、HTTP、HTTPS、HLS(M3U8)、RTMP、RTP,甚至支持TCP,UDP,其也支持使用file協議的本地文件操作和使用concat協議支持的多個文件串流操作。