IOS-FFmpeg的編譯

簡單記錄下編譯的問題处窥。

這里我使用的是FFmpegCompileTool-master進行IOS平臺FFmpeg的編譯掸掏。
三個比較重要的文件:
compile-ffmpeg.sh:總控制中心遭居,可在這里修改需編譯的平臺,如arm64
module-lite-hevc.sh(等等):具體需要ffmpeg支持的功能锋华,如--enable-libx264
do-compile-ffmpeg.sh:進一步完善編譯需要的信息葛作,如加入支持的第三方庫

按照這個說明文檔,很快可以編譯成功济似。有個地方需要修改下:compile-ffmpeg.sh下的FF_ALL_ARCHS_IOS8_SDK="arm64"矫废,我改為只支持arm64平臺,這樣編出來的ffmpeg庫是可以直接在代碼上使用的砰蠢。要編譯armv7平臺是會出問題的蓖扑。

ffmpeg庫是有,但你發(fā)現(xiàn)是不支持H264的編碼娩脾。

為了支持H264編碼赵誓,后面的操作耗費了我相當多的時間。當然也有收獲的柿赊,至少把FFmpegCompileTool的編譯流程弄懂了俩功。

1、
config/module-lite-hevc.sh碰声,加入下面诡蜓,開啟libx264。這里我使用了module-lite-hevc.sh胰挑,而不是默認的module.sh蔓罚。
具體修改tools/do-compile-ffmpeg.sh(也可以用以前的)

#export COMMON_FF_CFG_FLAGS=
#source $FF_BUILD_ROOT/../config/module.sh
export COMMON_FF_CFG_FLAGS=
source $FF_BUILD_ROOT/config/module-lite-hevc.sh
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-gpl"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-encoder=libx264"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-libx264"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-muxer=h264"

編譯后椿肩,發(fā)現(xiàn)有問題:ERROR: libx264 not found

2、需要加入第三方庫libx264
下載libx264源碼豺谈,然后進行編譯郑象,下面是我的build.sh

#!/bin/sh
export AS="gas-preprocessor.pl -arch arm -- xcrun -sdk iphoneos clang"
export CC="xcrun -sdk iphoneos clang"
./configure \
--enable-static \
--enable-pic \
--disable-asm \
--disable-shared \
--host=arm-apple-darwin \
--extra-cflags="-arch arm64 -mios-version-min=7.0 -fembed-bitcode" \
--extra-asflags="-arch arm64 -mios-version-min=7.0 -fembed-bitcode" \
--extra-ldflags="-arch arm64 -mios-version-min=7.0 -fembed-bitcode" \
--prefix="./outlib/arm64" \
make clean
make -j8
make install

3、引用libx264
在do-compile-ffmpeg.sh加入引用

# with openssl
if [ -f "${FFMPEG_DEP_OPENSSL_LIB}/libssl.a" ]; then
    FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS --enable-openssl"

    FFMPEG_CFLAGS="$FFMPEG_CFLAGS -I${FFMPEG_DEP_OPENSSL_INC}"
    FFMPEG_DEP_LIBS="$FFMPEG_CFLAGS -L${FFMPEG_DEP_OPENSSL_LIB} -lssl -lcrypto"
fi

#下面是加入的部分
FFMPEG_X264_INCLUDE=externalLibs/x264/include/
FFMPEG_X264_LIB=externalLibs/x264/lib/
#FFMPEG_X264_INCLUDE=/usr/local/include
#FFMPEG_X264_LIB=/usr/local/lib
#FFMPEG_X264_LIB=$FF_BUILD_ROOT/build/externalLibs/x264/lib
#加入關聯(lián)的include
FFMPEG_CFLAGS="$FFMPEG_CFLAGS -I$FFMPEG_X264_INCLUDE"
#加入關聯(lián)的Lib
FFMPEG_LDFLAGS="$FFMPEG_LDFLAGS -L$FFMPEG_X264_LIB"

目的是為了得到類似:--extra-ldflags=-arch arm64 -miphoneos-version-min=8.0 -L/usr/local/lib的寫法

當然茬末,編譯好的libx264的include與lib放到
FFmpegCompileTool-master/ffmpeg/externalLibs/x264/厂榛,新建的文件名可以自己定。

4丽惭、編譯的一些錯誤
(1)如果這時候提示击奶,libx264.a庫找不到找不到,或者開始編譯了责掏,但編譯一半提示錯誤
ERROR: libx264 not found
invalid instruction mnemonic rev16 asm(rev16 %w0, %w0 : +r(x))

基本上都是libx264庫與ffmpeg不匹配柜砾。不匹配的總要的一點,大家是否都是開啟了bitcode换衬。
在FFmpegCompileTool中痰驱,ffmpeg默認是開啟的,要關閉冗疮,就修改

elif [ "$FF_ARCH" = "armv7s" ]; then
    FF_BUILD_NAME="ffmpeg-armv7s"
    FF_BUILD_NAME_OPENSSL=openssl-armv7s
    FFMPEG_CFG_CPU="--cpu=swift"
    FF_XCRUN_OSVERSION="-miphoneos-version-min=6.0"
    FF_XCODE_BITCODE="-fembed-bitcode"
    FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS $FFMPEG_CFG_FLAGS_ARM"
elif [ "$FF_ARCH" = "arm64" ]; then
    FF_BUILD_NAME="ffmpeg-arm64"
    FF_BUILD_NAME_OPENSSL=openssl-arm64
    FF_XCRUN_OSVERSION="-miphoneos-version-min=8.0"
    FF_XCODE_BITCODE="-fembed-bitcode"
    FFMPEG_CFG_FLAGS="$FFMPEG_CFG_FLAGS $FFMPEG_CFG_FLAGS_ARM"
    FF_GASPP_EXPORT="GASPP_FIX_XCODE5=1"

找到對應的平臺萄唇,要關閉bitcode功能,就注釋:
FF_XCODE_BITCODE="-fembed-bitcode"

對應的libx264庫术幔,要支持bitcode就加上:

-extra-cflags="-arch arm64 -mios-version-min=7.0 -fembed-bitcode" \
--extra-asflags="-arch arm64 -mios-version-min=7.0 -fembed-bitcode" \
--extra-ldflags="-arch arm64 -mios-version-min=7.0 -fembed-bitcode" \

要取消bitcode就去掉后面的-fembed-bitcode。

只要ffmpeg和libx264都設置相同的湃密,就沒問題了诅挑。

(2)編譯armv7平臺,提示:libswresample/arm/audio_convert_neon.S:25:1: error: invalid symbol redefinition
_swri_oldapi_conv_flt_to_s16_neon:

修改:Delete _swri_oldapi_conv_flt_to_s16_neon: and _swri_oldapi_conv_fltp_to_s16_2ch_neon:.
Change _swri_oldapi_conv_flt_to_s16_neon to X(swri_oldapi_conv_flt_to_s16_neon) and _swri_oldapi_conv_fltp_to_s16_2ch_neon to X(swri_oldapi_conv_fltp_to_s16_2ch_neon)

5泛源、在Xcode中使用
終于編譯完了支持H264編碼的ffmpeg庫了拔妥。但拖到xcode中,發(fā)現(xiàn)還是提示有問題达箍。
這是沒把libx264.a導進來導致的没龙。

本來打算再編譯H265編碼的。發(fā)現(xiàn)libx265庫的編譯方式不太一樣《忻担現(xiàn)在還沒嵌入到ffmpeg中硬纤。這個有待研究。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末赃磨,一起剝皮案震驚了整個濱河市筝家,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌邻辉,老刑警劉巖溪王,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腮鞍,死亡現(xiàn)場離奇詭異,居然都是意外死亡莹菱,警方通過查閱死者的電腦和手機移国,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來道伟,“玉大人迹缀,你說我怎么就攤上這事≈遄浚” “怎么了裹芝?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長娜汁。 經常有香客問我嫂易,道長,這世上最難降的妖魔是什么掐禁? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任怜械,我火速辦了婚禮,結果婚禮上傅事,老公的妹妹穿的比我還像新娘缕允。我一直安慰自己,他們只是感情好蹭越,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布障本。 她就那樣靜靜地躺著,像睡著了一般响鹃。 火紅的嫁衣襯著肌膚如雪驾霜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天买置,我揣著相機與錄音粪糙,去河邊找鬼。 笑死忿项,一個胖子當著我的面吹牛蓉冈,可吹牛的內容都是我干的。 我是一名探鬼主播轩触,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼寞酿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怕膛?” 一聲冷哼從身側響起熟嫩,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎褐捻,沒想到半個月后掸茅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椅邓,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年昧狮,在試婚紗的時候發(fā)現(xiàn)自己被綠了景馁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡逗鸣,死狀恐怖合住,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情撒璧,我是刑警寧澤透葛,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站卿樱,受9級特大地震影響僚害,放射性物質發(fā)生泄漏。R本人自食惡果不足惜繁调,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一萨蚕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蹄胰,春花似錦岳遥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宾袜,卻和暖如春妻往,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背试和。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纫普,地道東北人阅悍。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像昨稼,于是被迫代替她去往敵國和親节视。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容