一:簡單瞭解FFMpeg 以及他的組成部分
1.什麼是FFmpeg?
FFmpeg 即是一款音視頻編碼工具也是一款音視頻編解碼開發套件,作爲套件爲開發者提供了豐富的音視頻處理的調用接口
2.FFmpeg的基本組成?
FFmpeg 框架的基本組成包含AVFormat /AVCodec/AVFilter/AVDevice,AVUtil等
(2.1)FFmpeg的封裝模塊AVFormat
- AVFormat 實現了目前大多數媒體的封裝格式,包括解封裝 和封裝,如MP4/FLV/KV/TS等文件封裝格式
- RMTP/RTSP/MMS/HLS等網絡協議封裝格式
(2.2)FFmpeg的編解碼模塊AVCodec
AVCodec既支持編碼也支持解碼。AVCodec 除了支持MPEG4,AAC 等字嗲的媒體編解碼格式外還支持第三方的編解碼器,如H.264(AVC)編碼,需要使用x264編碼器
(2.3)FFmpeg的濾鏡AVFilter
3.ffmpeg 是 FFmpeg 源碼編譯後生成的一個可執行文件
ffmpeg 的主要工作流程比較簡單:
1,解封裝 2,解碼 3,編碼 4,封裝
具體如下:
1>讀取輸入源
2>進行音視頻的解封裝
3>解碼每一幀音視頻數據
4>編碼每一幀音視頻
5>進行音視頻的重新封裝
6>輸出目標
4.ffmpeg 的轉封裝功能包含在AVFormat模塊中
通過libavformat 庫進行Mux 和Demux 操作。多媒體的文件格式很多,很多參數在Mux / Demux 中的參數都是公用的。
ffmpeg編解碼部分的功能主要是通過AVCode來完成通過libavcode庫進行的Encode 與Decode操作。
5.FFMpeg系統中如果包含了SDL-1.2就好默認講ffplay編譯處理啊
ffplay作爲播放器,也可以作爲很多音視頻數據的圖形化分析工具,通過fffplay 可以看到視頻圖像的運動估計方向,音頻數據的波形等。
ffplay 不僅可以作爲播放器,同時也是測試ffmpeg的codec引擎/format引擎以及filter的引擎的工具,還可以進行可視化的媒體參數分析。
6.ffprobe 在FFmpeg套件中 主要用來查看多媒體文件的信息
根據參數的不同,查看每一個音頻數據包信息或者視頻數據包信息,查看節目信息,流信息,查看每一個流有多少幀以及每一個流有多少音視頻包,查看視頻像素點的格式。
二:FFmpeg的功能分爲媒體格式轉封裝/音視頻編碼/傳輸協議轉換/支持filter等。以下是媒體封裝格式的詳細介紹
2.1 音視頻轉MP4 格式
音視頻轉碼與音視頻轉封裝的不同之處在於音視頻轉碼會佔用大量的計算資源,而轉封裝則主要是將音頻數據或者視頻數據取出,然後轉而封裝成另外一種封裝格式,轉封裝主要佔用IO資源,而轉碼主要佔用CPU資源,同時轉碼也會使用更多的內存資源
2.2 FFmpeg 流媒體
音視頻流媒體又稱爲“流媒體”,而用於處理流媒體的壓縮/錄製/編輯操作。FFmpeg就是常見的流媒體處理工具
常見的流媒體協議有RTMP/HTTP/RTSP等協議
FFmpeg 默認的拉流方式爲UDP傳輸方式,爲了避免丟包導致的花屏/綠屏/灰屏/馬賽克等問題,可以考慮將UDP傳輸方式改爲TCP傳輸方式。
在流媒體服務中,HTTP服務最爲常見,尤其是點播。直播也支持HTTP服務,例如使用HTTP傳輸FLV直播流,使用HTTp傳輸TS直播流或者使用HTTP傳輸M3U8 及TS文件
FFmpeg 進行編碼消耗的資源比較多,轉封裝則相對較少,很多時候只需要轉一次編碼並且輸出多個封裝。早期的FFmpeg 本事不支持這麼做(一次轉碼多次輸出RTMP流等操作),而是通過系統管道的方式進行操作 另外一種方式就是通過tee封裝格式輸出多路流。
2.3 filter 濾鏡
視頻添加水印/圖片,還可以對音頻流濾鏡進行操作,如拆分聲道,合併多聲道,音視頻的拆分和合並。
2.4 設備採集
FFMpeg 作爲編碼器時,可以使用FFmpeg採集本地的音視頻採集設備的數據,然後進行編碼,封裝。傳輸等操作。比如說 我們可以採集攝像頭的圖像作爲視頻,採集麥克風的數據作爲音頻,然後對採集的音視頻數據進行編碼,最後將編碼後的數據分裝成多媒體文件或者作爲音視頻流發送到服務器上(流媒體);
linux 下 圖形圖像中,FrameBuffer 專門用於圖像展示。 v412 設備主要採集攝像頭,攝像頭通常指吹多種像素格式。