ffmpeg4.1編譯IOS版本及x264、fdk-aac

一、環(huán)境配置


  1. 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)定版。
  2. 安裝yasm
    直接brew install yasm即可。
  3. 編譯腳本
    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.alibavutil.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)題


  1. 有時(shí)在編譯過(guò)后又修改了build-ffmpeg.sh腳本會(huì)導(dǎo)致編譯結(jié)果很奇怪,這時(shí)把scratch目錄刪除重新編譯。

  2. 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。

x264使用


參考 http://www.itdecent.cn/p/b7881a4467db

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容