最新FFMPEG一鍵編譯指南
樓主主要關(guān)注iOS上面的開(kāi)發(fā),所以本文只討論iOS平臺(tái)的一鍵編譯蛔糯。不排除以后介紹Android平臺(tái)。
版本
截止2017.03.13, 在官網(wǎng)上的最新版本為3.2.4攻柠。本文以此來(lái)講述赃磨。
兩個(gè)重要的腳本
我想很多人編譯FFMPEG都是遵循這兩個(gè)流傳已久的腳本,并在此基礎(chǔ)上根據(jù)自身需求來(lái)定制FFMPEG轧钓。這些腳本也是隨著FFMPEG版本的更新而做相應(yīng)的更新序厉,樓主兩年前就做過(guò)相關(guān)的介紹,對(duì)比起來(lái)毕箍,內(nèi)容已有不小的改動(dòng)弛房。
-
build_ffmpeg.sh
往往你在網(wǎng)上搜索的話,會(huì)找到很多這個(gè)腳本的版本霉晕。記住庭再,最原始、最正宗的出處在這里牺堰。
-
gas_preprocessor.pl
請(qǐng)移步下載拄轻。
build_ffmpeg.sh都干了啥
樓主主要介紹這個(gè)腳本,至于另外一個(gè)伟葫,很少修改恨搓,所以不做介紹。具體來(lái)說(shuō),build_ffmpeg.sh做了如下幾件事情斧抱。
-
設(shè)置輸入常拓,即你要編譯的FFMPEG的版本
SOURCE=ffmpeg-3.2.4
++ffmpeg-3.2.4++必須要按照這個(gè)格式來(lái)寫(xiě),為什么后面再說(shuō)辉浦。
-
設(shè)置輸出弄抬,即編譯好的lib放到什么位置
FAT="FFmpeg-iOS"
++FFmpeg-iOS++是輸出路徑,表示最終的所有l(wèi)ib和頭文件放在當(dāng)前目錄下的FFmpeg-iOS宪郊。
-
設(shè)置編譯選項(xiàng)
CONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs --disable-doc --enable-pic"
有時(shí)候你可能只需要FFMPEG里面的一部分功能掂恕,在這里可以實(shí)現(xiàn)你的想法。
-
設(shè)置架構(gòu)
ARCHS="arm64 armv7 x86_64 i386"
上面的設(shè)置說(shuō)明弛槐,你想編譯64位懊亡、32位的真機(jī)版,以及64位乎串、32位的模擬器版店枣。可做刪減叹誉。
-
嘗試下載安裝Yasm鸯两,如果你的Mac上沒(méi)有安裝
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Yasm是x86平臺(tái)的匯編編譯器
-
嘗試下載安裝gas-preprocessor.pl,如果你的Mac上沒(méi)有安裝
curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl
-
嘗試下載FFMPEG源代碼桂对,如果你的Mac上沒(méi)有指定版本的code
curl http://www.ffmpeg.org/releases/$SOURCE.tar.bz2 | tar xj
前面提到過(guò)++SOURCE++的賦值必須要按照一定的格式甩卓,那是因?yàn)楣倬W(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
-
開(kāi)始編譯
make -j3 install $EXPORT || exit 1
裁剪才是本文想談的重點(diǎn)
在你的項(xiàng)目里蕉斜,F(xiàn)FMPEG大多數(shù)的功能都不是你需要的逾柿,所以必須瘦身,減少lib的體積宅此。這里以只需要編譯H264 decoder來(lái)說(shuō)明机错。還記得上面提到的++CONFIGURE_FLAGS++嗎?加在這里就行父腕。
-
--disable-avfilter --disable-avdevice --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avformat --disable-swscale --disable-programs --disable-doc
把大的模塊先干掉弱匪。
-
--disable-everything
注意這個(gè)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
干自己的事。
其他
寫(xiě)這篇文章時(shí)枝嘶,查閱資料帘饶,看到官網(wǎng)有不同平臺(tái)的編譯指南,記錄下來(lái)以后參考群扶。
本文如對(duì)你有所幫助及刻,請(qǐng)點(diǎn)贊镀裤。如值得分享,請(qǐng)注明出處后轉(zhuǎn)載缴饭。
樓主在實(shí)踐和寫(xiě)作過(guò)程中亦參考了不少好文暑劝,列于下,謝謝分享颗搂。