FFmpeg的主體框架
編譯會生成4個可執(zhí)行文件,和8個靜態(tài)庫。
一、可執(zhí)行文件
ffmpeg: 轉碼、推流、Dump媒體文件
ffplay: 播放媒體文件,拉流
ffprobe:獲取媒體文件信息
ffserver:簡單流媒體服務器(一般用的比較少)
二、靜態(tài)庫
8個靜態(tài)庫實際是FFmpeg的8模塊,包括如下:
libavutil:核心工具庫,該模塊是最基本的模塊之一,其它這么多模塊會依賴此模塊做一些音視頻處理操作。
libavformat: 文件格式和協(xié)議庫,該模塊是最重要的模塊之一,封裝了Protocol層、Demuxer層、muxer層,使用協(xié)議和格式對于開發(fā)者是透明的。
libavcodec: 編解碼庫,該模塊也是最重要模塊之一,封裝了Codec層,但是有一些Codec是具備自己的License的,FFmpeg是不會默認添加,例如libx264,FDK-AAC, lame等庫,但FFmpeg就像一個平臺一樣,可以將其它的第三方的Codec以插件的方式添加進來,然后為開發(fā)者提供統(tǒng)一的接口。
libswrsample:音頻重采樣庫,可以對數字音頻進行聲道數、數據格式、采樣率等多種基本信息的轉換。
libswscale:視頻壓縮和格式轉換庫,可以進行視頻分辨率修改、YUV格式數據與RGB格式數據互換。
libavdevice:輸入輸出設備庫,編譯ffplay就需要確保該模塊是打開的,時時也需要libSDL預先編譯,因為該設備播放聲音和播放視頻使用的都是libSDL庫。
libavfilter:音視頻濾鏡庫,該模塊包含了音頻特效和視頻特效的處理,在使用FFmpeg的API進行編解碼的過程中,直接使用該模塊為音視頻數據做特效物理非常方便同時也非常高效的一種方式。
libpostproc:音視頻后期處理庫,當使用libavfilter的時候需要打開該模塊開關,因為Filter中會使用該庫中的一些基礎函數。
寫了一大堆,最后用一張思維導圖來總結體現吧,簡單明了,方便大腦記憶存儲: