最新FFMPEG一鍵編譯指南
樓主主要關(guān)注iOS上面的開發(fā),所以本文只討論iOS平臺的一鍵編譯。不排除以后介紹Android平臺。
版本
截止2017.03.13, 在官網(wǎng)上的最新版本為3.2.4。本文以此來講述。
兩個重要的腳本
我想很多人編譯FFMPEG都是遵循這兩個流傳已久的腳本,并在此基礎(chǔ)上根據(jù)自身需求來定制FFMPEG。這些腳本也是隨著FFMPEG版本的更新而做相應(yīng)的更新,樓主兩年前就做過相關(guān)的介紹,對比起來,內(nèi)容已有不小的改動。
build_ffmpeg.sh都干了啥
樓主主要介紹這個腳本,至于另外一個,很少修改,所以不做介紹。具體來說,build_ffmpeg.sh做了如下幾件事情。
-
設(shè)置輸入,即你要編譯的FFMPEG的版本
SOURCE=ffmpeg-3.2.4
++ffmpeg-3.2.4++必須要按照這個格式來寫,為什么后面再說。
-
設(shè)置輸出,即編譯好的lib放到什么位置
FAT="FFmpeg-iOS"
++FFmpeg-iOS++是輸出路徑,表示最終的所有l(wèi)ib和頭文件放在當(dāng)前目錄下的FFmpeg-iOS。
-
設(shè)置編譯選項
CONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs --disable-doc --enable-pic"
有時候你可能只需要FFMPEG里面的一部分功能,在這里可以實現(xiàn)你的想法。
-
設(shè)置架構(gòu)
ARCHS="arm64 armv7 x86_64 i386"
上面的設(shè)置說明,你想編譯64位、32位的真機版,以及64位、32位的模擬器版??勺鰟h減。
-
嘗試下載安裝Yasm,如果你的Mac上沒有安裝
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Yasm是x86平臺的匯編編譯器
-
嘗試下載安裝gas-preprocessor.pl,如果你的Mac上沒有安裝
curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl
-
嘗試下載FFMPEG源代碼,如果你的Mac上沒有指定版本的code
curl http://www.ffmpeg.org/releases/$SOURCE.tar.bz2 | tar xj
前面提到過++SOURCE++的賦值必須要按照一定的格式,那是因為官網(wǎng)的源文件的命名規(guī)則就是這樣的。
-
根據(jù)配置生成config.mk和config.h
TMPDIR=${TMPDIR/%\/} $CWD/$SOURCE/configure \ --target-os=darwin \ --arch=$ARCH \ --cc="$CC" \ $CONFIGURE_FLAGS \ --extra-cflags="$CFLAGS" \ --extra-ldflags="$LDFLAGS" \ --prefix="$THIN/$ARCH" \ || exit 1 -
開始編譯
make -j3 install $EXPORT || exit 1
裁剪才是本文想談的重點
在你的項目里,F(xiàn)FMPEG大多數(shù)的功能都不是你需要的,所以必須瘦身,減少lib的體積。這里以只需要編譯H264 decoder來說明。還記得上面提到的++CONFIGURE_FLAGS++嗎?加在這里就行。
-
--disable-avfilter --disable-avdevice --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avformat --disable-swscale --disable-programs --disable-doc
把大的模塊先干掉。
-
--disable-everything
注意這個everything不包括disable上面提及的那些模塊,那是哪些呢?看下面。
--disable-encoder=NAME disable encoder NAME
--enable-encoder=NAME enable encoder NAME
--disable-encoders disable all encoders
--disable-decoder=NAME disable decoder NAME
--enable-decoder=NAME enable decoder NAME
--disable-decoders disable all decoders
--disable-hwaccel=NAME disable hwaccel NAME
--enable-hwaccel=NAME enable hwaccel NAME
--disable-hwaccels disable all hwaccels
--disable-muxer=NAME disable muxer NAME
--enable-muxer=NAME enable muxer NAME
--disable-muxers disable all muxers
--disable-demuxer=NAME disable demuxer NAME
--enable-demuxer=NAME enable demuxer NAME
--disable-demuxers disable all demuxers
--enable-parser=NAME enable parser NAME
--disable-parser=NAME disable parser NAME
--disable-parsers disable all parsers
--enable-bsf=NAME enable bitstream filter NAME
--disable-bsf=NAME disable bitstream filter NAME
--disable-bsfs disable all bitstream filters
--enable-protocol=NAME enable protocol NAME
--disable-protocol=NAME disable protocol NAME
--disable-protocols disable all protocols
--enable-indev=NAME enable input device NAME
--disable-indev=NAME disable input device NAME
--disable-indevs disable input devices
--enable-outdev=NAME enable output device NAME
--disable-outdev=NAME disable output device NAME
--disable-outdevs disable output devices
--disable-devices disable all devices
--enable-filter=NAME enable filter NAME
--disable-filter=NAME disable filter NAME
--disable-filters disable all filters? -
--enable-decoder=h264
干自己的事。
其他
寫這篇文章時,查閱資料,看到官網(wǎng)有不同平臺的編譯指南,記錄下來以后參考。
本文如對你有所幫助,請點贊。如值得分享,請注明出處后轉(zhuǎn)載。
樓主在實踐和寫作過程中亦參考了不少好文,列于下,謝謝分享。