一、環(huán)境配置
- ffmpeg4.1下載
直接從官網(wǎng)下載源碼壓縮包:http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2,沒(méi)有從git下載是因?yàn)楣俜桨l(fā)布?jí)嚎s包的應(yīng)該是穩(wěn)定版。 - 安裝yasm
直接brew install yasm即可。 - 編譯腳本
從https://github.com/kewlbear/FFmpeg-iOS-build-script.git下載編譯腳本。kewlbear上還有編譯成framework的腳本,而且還有x264、fdk-aac的編譯腳本。
二、編譯設(shè)置
1. 編譯
我選擇的是編譯成靜態(tài)庫(kù),所以使用build-ffmpeg.sh。
把編譯腳本放到ffmpeg源碼的上一級(jí)目錄,編輯腳本把FF_VERSION改成你的ffmpeg版本,選擇執(zhí)行以下命令編譯想要的平臺(tái)版本,沒(méi)帶參數(shù)編譯所有平臺(tái)版本。
./build-ffmpeg.sh
./build-ffmpeg.sh arm64
./build-ffmpeg.sh armv7 x86_64
編譯完成,在當(dāng)前腳本目錄下有個(gè)scratch目錄存放了編譯時(shí)的臨時(shí)文件,thin目錄下是每個(gè)不同平臺(tái)的版本。
如果想合并多個(gè)平臺(tái)版本,執(zhí)行:
./build-ffmpeg.sh lipo
合并后的文件存放在FFmpeg-iOS/lib目錄下,同時(shí)include頭文件目錄也會(huì)復(fù)制在下面。
2. ffmpeg config配置
腳本中有個(gè)變量CONFIGURE_FLAGS就是ffmpeg的configure配置,在這兒修改可以定制自己想要的功能。
比如我只想要簡(jiǎn)單的h264解碼功能:
CONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs \
--disable-doc --enable-pic --disable-encoders --disable-decoders \
--enable-decoder=h264 --disable-avdevice --disable-avfilter --disable-network \
--disable-demuxers --disable-muxers --disable-protocols --disable-parsers --disable-parser=h264"
這樣編譯出來(lái)的lib庫(kù)只需要libavcodec.a和libavutil.a即可使用h264解碼。
編譯x264
從[官網(wǎng)https://www.videolan.org/developers/x264.html]直接下載最新版源碼。
從https://github.com/kewlbear/x264-ios下載編譯腳本build-x264.sh。
把源碼解壓到x264目錄,把編譯腳本build-x264.sh放到x264同級(jí)目錄,根據(jù)需要編譯的archs修改腳本。
因?yàn)樯厦婢幾gffmpeg時(shí)已經(jīng)安裝過(guò)yasm,所以執(zhí)行./build-x264.sh即可。
編譯fdk-aac
從[官網(wǎng)http://www.linuxfromscratch.org/blfs/view/svn/multimedia/fdk-aac.html]直接下載最新版源碼(當(dāng)前2.0.0)。
從https://github.com/kewlbear/fdk-aac-build-script-for-iOS下載編譯腳本build-fdk-aac.sh。
把源碼解壓,把編譯腳本http://build-fdk-aac.sh放到解壓出來(lái)的fdk-aac-2.0.0同級(jí)目錄,根據(jù)需要編譯的archs
及fdk-aac源碼目錄修改腳本。
因?yàn)樯厦婢幾gffmpeg時(shí)已經(jīng)安裝過(guò)yasm,所以執(zhí)行./build-fdk-aac.sh即可。
ffmpeg+x264+fdk-aac
修改build-ffmpeg.sh:
#X264=`pwd`/fat-x264`
X264=`pwd`/x264-iOS
#FDK_AAC=`pwd`/fdk-aac/fdk-aac-ios`
FDK_AAC=`pwd`/fdk-aac-ios
CONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs \
--disable-doc --enable-pic --enable-nonfree"
fdk-aac需要添加--enable-nonfree選項(xiàng)。
執(zhí)行./build-ffmpeg.sh。
其他編譯問(wèn)題
有時(shí)在編譯過(guò)后又修改了
build-ffmpeg.sh腳本會(huì)導(dǎo)致編譯結(jié)果很奇怪,這時(shí)把scratch目錄刪除重新編譯。xcode中使用時(shí)編譯錯(cuò)誤:
Undefined symbols for architecture arm64:
"_BZ2_bzDecompressInit", referenced from:
_matroska_decode_buffer in URTC(matroskadec.o)
"_BZ2_bzDecompress", referenced from:
_matroska_decode_buffer in URTC(matroskadec.o)
"_BZ2_bzDecompressEnd", referenced from:
_matroska_decode_buffer in URTC(matroskadec.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解決辦法:
xcode->Build Phases->Link Binary With Libraies中添加:libbz2.tbd
使用
把編譯好的FFmpeg-iOS、x264-iOS、fdk-aac-ios拖到xcode中,如果是swift工程,使用時(shí)要先創(chuàng)建橋接文件,在xcode直接隨便新建一個(gè)c文件,會(huì)提示是否自動(dòng)創(chuàng)建橋接文件,選擇創(chuàng)建,然后就可以把這個(gè)臨時(shí)c文件刪除。
在橋接文件xxx-Bridging-Header.h中添加`#include "libavformat/avformat.h"就可以使用ffmpeg。