
參考 http://m.itdecent.cn/p/129874f34a58
前言
上一篇博客我們聊了一下如何使用FFmpeg的命令來實(shí)現(xiàn)各種需求,從這篇博客我們將一起來看一下如何使用使用FFmpeg代碼實(shí)現(xiàn)各種需求,這一篇博客主要是來看一下,如何編譯FFmpeg的靜態(tài)庫,以及FFmpeg中各個模塊的作用.
編譯FFmpeg靜態(tài)庫
這里先說iOS該如何編譯FFmpeg,后期會說安卓如何編譯FFmpeg靜態(tài)庫.
首先我們先下載編譯腳本,腳本的Github連接如下所示.
https://github.com/kewlbear/FFmpeg-iOS-build-script
在編譯之前我們需要做以下的幾個操作.
下載并安裝 gas-preprocessor .
- 先去 gas-preprocessor 下載文件.
- 復(fù)制gas-preprocessor.pl到/usr/local/bin下.
- 修改權(quán)限
chmod 777 /usr/local/bin/gas-preprocessor.pl
下載并且安裝 yasm .
brew install yasm
由于,FFmpeg框架中的一個結(jié)構(gòu)體命名為"AVMediaType"與蘋果自帶框架產(chǎn)生沖突,所以,我們必須修改編譯腳本,使用"FFmpegAVMediaType"帶替換"AVMediaType".這里需要在腳本文件中添加如下命令行,即將AVMediaType替換為FFmpegAVMediaType.
grep -rl AVMediaType ./$SOURCE | xargs sed -i .bak s@AVMediaType@FFmpegAVMediaType@g
當(dāng)然了,我們可以通過修改build-ffmpeg.sh內(nèi)容來定制FFmpeg.例如我們想指定FFmpeg版本,我們就可以修改如下參數(shù)即可.
FF_VERSION="4.2"
如果我們想修改編譯環(huán)境,我們需要修改如下信息.
ARCHS="arm64 armv7 x86_64 i386"
當(dāng)上面的準(zhǔn)備工作完成之后,我們就使用下面命令進(jìn)行編譯.
./build-ffmpeg.sh
搭建FFmpeg開發(fā)環(huán)境
上一個模塊我們已經(jīng)編譯FFmpeg靜態(tài)庫了,接下來FFmpeg-iOS文件夾整體需要添加到我們的工程中去.

由于我們需要進(jìn)行C,C++的混編,所以我們需要把 AppDelegate.m 改名為 AppDelegate.mm .
然后我們需要為FFmpeg添加以下的依賴庫文件.
libz.tbd
libbz2.tbd
libiconv.tbd
CoreMedia.framework
AudioToolbox.framework
VideoToolbox.framework
AVFoundation.framework
在Build Setting中要禁止Bitcode,否則會編譯報錯.

在Build Setting中 設(shè)置 Header Search Paths 和 Library Search Paths . 如下所示.
# Header Search Paths:
$(PROJECT_DIR)/XXFFmpeg/FFmpeg-iOS/include
# Library Search Paths:
$(PROJECT_DIR)/XXFFmpeg/FFmpeg-iOS/lib