iOS: FFMpeg編譯和使用問題總結
iOS: FFmpeg編譯和使用問題總結c++
折磨了我近一週多時間的FFmpeg庫編譯問題終於解決了,必須得把這一段時間來遇到過的坑全寫出來。若是急着解決問題,編譯最新版本的FFmpeg庫請直接看第二部分,編譯較老版本(0.7)的FFmpeg庫請直接跳至第七部分,那裏有你想要的編譯腳本,但別忘了抽空看看全文。git
1、背景github
網上有不少FFmpeg編譯配置的資料,大部分都是關於FFmpeg最新的版本(2.0)的,我一開始也想着編寫一個2.0版本的,能夠放到接手的那個項目中,發現各類問題(沒法快進,沒有聲音),再看一下代碼一堆警告,緣由很簡單,使用的FFMpeg庫太新了,不少接口變更了。因爲手上沒有多少信息,不知道那個項目使用的是哪一個版本的FFmpeg庫,一點點找,終於知道原來使用的是0.7.x的。找到目標版本的FFmpeg本覺得萬事大吉了,後來才發現原來這纔是坑的開始,有歷經一系列磨難,最後終於把編譯問題解決了。windows
2、FFmpeg最新版本的庫編譯xcode
FFmpeg最新版本的應該是2.1的,歷史版本詳見http://www.ffmpeg.org/releases/,在這個網站上咱們能夠下到全部歷史版本的庫。FFmpeg是一個跨平臺的用C語言寫成的庫,包含了編碼,解碼,色彩空間轉換等庫。編譯須要用到命令行,對於咱們這些沒搞事後臺或者linux開發的腳本知識欠缺的人來講的確算是一個挑戰。慶幸的是如今網絡這麼方便,不會作問Google,很快就找到了一個在xcode5下一鍵編譯FFmpeg庫的腳本。這個腳本是個老外寫的,真心強大,從下載到編譯到構建最後的Fat庫一鼓作氣。bash
腳本地址: https://gist.github.com/m1entus/6983547服務器
運行這個腳本須要依賴一個庫Perl寫的腳本,搜了一下網上目前編譯FFmpeg庫的帖子基本都會提到這個腳本,腳本地址以下: https://github.com/mansr/gas-preprocessor。
下載完這兩個腳本後,編譯FFmpeg庫的準備工做就基本完成了,接着依次執行下面幾步:
一、拷貝gas-preprocessor.pl文件到 /usr/bin目錄下。
二、修改gas-preprocessor.pl文件的權限
注:須要有讀,寫和執行的權限。具體操做爲,首先在命令行下進入/usr/bin目錄,而後執行chmod命令,以下圖所示:
三、切換build-ffmpeg.sh腳本的目錄下,使用命令
sh build-ffmpeg.sh 運行該腳本便可。
注: 1) build-ffmpeg.sh腳本的父目錄的名字不能包括空格,不然可能致使構建失敗。
2) build-ffmpeg.sh腳本中能夠配置編譯的FFMpeg版本,以及使用iOS SDK的版本,以下圖所示:
該腳本中默認採用的FFmpeg是2.0版本,使用iOS 7.0的SDK編譯,c語言編譯器採用clang,應用中能夠根據實際項目須要選中不一樣的FFmpeg和iOS SDK版本。
根據上面的步驟看來,編譯工做也沒有什麼複雜的,爲何我會說踩了不少坑呢?這個問題我會一點點兒解釋。
3、編譯較早期版本的FFmpeg本庫
第二部分中咱們介紹了一個牛逼的腳本,一鍵編譯,這給咱們形成了一種錯覺,FFmpeg編譯不過如此嗎!若是咱們嘗試一下把腳本中的VERSION變成0.7試試,運行腳本,發現編譯報錯。以下圖所示:
提示位置選項--disable-iconv,根據提示咱們輸入./configure查看全部可用選項。命令行下切換到實際的FFmpeg源碼目錄下,查看幫助以下圖:
咱們能夠看到不少選項,英語不難,就是有些選項描述的太簡潔了,因此實際使用時若是不肯定的話,咱們能夠去問問google。
好了回過頭來看看這個configure文件到底有什麼做用呢?
一、裁剪
咱們知道FFmpeg庫是一個很是龐大的庫,包括編碼,解碼以及流媒體的支持等,若是不作裁剪所有編譯進來的話,最後生成的靜態庫會很大。實際使用中咱們可能只想用到解碼(例如播放器),所以咱們可使用相關選項指定編譯時禁用編碼部分。固然咱們還能夠作進一步的裁剪,例如只打開部分經常使用格式的解碼,禁用掉其餘的解碼,這樣編譯出來的靜態庫將會更小。
要想裁剪,咱們的先知道有哪些部分,使用下面的命令能夠查看FFMpeg庫支持的組件列表。
1
2
3
4
5
6
7
8
9
10
11
|
--list-decoders show all available decoders
--list-encoders show all available encoders
--list-hwaccels show all available hardware accelerators
--list-muxers show all available muxers
--list-demuxers show all available demuxers
--list-parsers show all available parsers
--list-protocols show all available protocols
--list-bsfs show all available bitstream filters
--list-indevs show all available input devices
--list-outdevs show all available output devices
--list-filters show all available filters
|
咱們能夠根據實際須要把不用的部分都禁用掉,這樣編譯快,包也會比較小,經常使用的裁剪選項以下:
1
2
3
4
5
6
7
8
9
10
11
12
|
--disable-doc
do
not build documentation
--disable-ffmpeg disable ffmpeg build
--disable-ffplay disable ffplay build
--disable-ffserver disable ffserver build
--disable-network disable network support [no]
--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
|
舉個例子,若是咱們須要作一款本地視頻播放器,那麼咱們可使用以下配置:
固然你還能夠根據幫助列表進行更細粒度的裁剪,例如只支持哪幾種格式的解碼等等。
二、指定編譯環境
FFMpeg做爲一個跨平臺的庫,不一樣的平臺,不一樣的人的計算機上編譯器的路徑均可能不盡相同,因此咱們須要爲編譯腳本指定編譯器的路徑。同事咱們還能夠指定其餘編譯選項,如是否交叉編譯,目標平臺系統,CPU架構,須要依賴的其餘庫的路徑已經指定是否禁用匯編優化等。
1
2
3
4
5
6
7
8
9
10
11
|
--enable-cross-compile assume a cross-compiler is used
--sysroot=PATH root of cross-build tree
--sysinclude=PATH location of cross-build system headers
--target-os=OS compiler targets OS []
--cc=CC use C compiler CC [gcc]
--extra-cflags=ECFLAGS add ECFLAGS to CFLAGS []
--extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS []
--arch=ARCH select architecture []
--cpu=CPU select the minimum required CPU (affects
instruction selection, may crash on older CPUs)
--disable-asm disable all assembler optimizations
|
sysroot即iOS SDK的路徑,注意編譯真機版本的庫時須要使用iPhoneOS.platform中SDK的路徑,編譯模擬器版本的庫使用iPhoneSimulator.platform中SDK的路徑。target-os填寫darwin(蘋果系統的內核),arch能夠根據具體的狀況添加i386(模擬器),armv6,armv7等。cpu根據具體類型可填寫cortex-a8,cortox-a9,i386等。
三、指定靜態庫的安裝路徑
指定執行make install命令時編譯好的靜態庫和相關頭文件拷貝到的位置,即FFmpeg庫編譯後輸出的路徑。一般咱們只須要設置「--prefix=PREFIX」選項便可。例如咱們須要將最後生成靜態庫的路徑指向「build/armv7」下,則設置--prefix="build/armv7";
4、FFmpeg0.7版本庫一鍵編譯腳本
經過第三部分的介紹,相信咱們應該對FFmpeg的配置都有了一個初步的認識,咱們再回到第三部分開始時咱們運行build-ffmpeg.sh的碰到的問題,通過查看configure的幫助,咱們發現0.7這個版本的FFmpeg庫倒是沒有"--disable-iconv"選項。這個牛逼的腳本是針對當前較新的FFmpeg庫寫的,在低版本中沒有一些配置選項也是正常。
下面給出通過修改後的腳本,腳本中對原先的腳本進行了精簡,去掉了下載部分的代碼。

1 #!/bin/sh 2 3 ######################################################################## 4 ##################### copyright by smileEvday ########################## 5 ##################### smileEvday.cnblogs.com ########################### 6 ######################################################################## 7 8 # FFMpeg,SDK版本號 9 VERSION="0.7.4" 10 SDKVERSION="6.1" 11 12 #最低支持的SDK版本號 13 MINSDKVERSION="5.0" 14 15 # 源文件路徑 16 SRCDIR=$(pwd) 17 BUILDDIR="${SRCDIR}/build" 18 mkdir -p $BUILDDIR 19 20 # 獲取xcode開發環境安裝路徑 21 DEVELOPER=`xcode-select -print-path` 22 23 # 要編譯的架構列表 24 ARCHS="armv7 armv7s i386" 25 for ARCH in ${ARCHS} 26 do 27 if [ "${ARCH}" == "i386" ]; 28 then 29 PLATFORM="iPhoneSimulator" 30 EXTRA_CFLAGS="-arch i386" 31 EXTRA_LDFLAGS="-arch i386 -mfpu=neon" 32 EXTRA_CONFIG="--arch=i386 --cpu=i386" 33 else 34 PLATFORM="iPhoneOS" 35 EXTRA_CFLAGS="-arch ${ARCH} -mfloat-abi=softfp" 36 EXTRA_LDFLAGS="-arch ${ARCH} -mfpu=neon -mfloat-abi=softfp" 37 EXTRA_CONFIG="--arch=arm --cpu=cortex-a9 --disable-armv5te" 38 fi 39 40 make clean 41 42 # you can do any clip here 43 ./configure --prefix="${BUILDDIR}/${ARCH}" \ 44 --disable-doc \ 45 --disable-ffmpeg \ 46 --disable-ffplay \ 47 --disable-ffserver \ 48 --enable-cross-compile \ 49 --enable-pic \ 50 --disable-asm \ 51 --target-os=darwin \ 52 ${EXTRA_CONFIG} \ 53 --cc="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/usr/bin/gcc" \ 54 --as="/usr/bin/gas-preprocessor.pl" \ 55 --sysroot="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk" \ 56 --extra-cflags="-miphoneos-version-min=${MINSDKVERSION} ${EXTRA_CFLAGS}" \ 57 --extra-ldflags="-miphoneos-version-min=${MINSDKVERSION} ${EXTRA_LDFLAGS} -isysroot ${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer/SDKs/${PLATFORM}${SDKVERSION}.sdk" 58 59 make && make install && make clean 60 61 done 62 63 ######################################################################################################################## 64 ##################################################### 生成fat庫 ######################################################### 65 ######################################################################################################################## 66 mkdir -p ${BUILDDIR}/universal/lib 67 cd ${BUILDDIR}/armv7/lib 68 69 for file in *.a 70 do 71 72 cd ${SRCDIR}/build 73 xcrun -sdk iphoneos lipo -output universal/lib/$file -create -arch armv7 armv7/lib/$file -arch armv7s armv7s/lib/$file -arch i386 i386/lib/$file 74 echo "Universal $file created." 75 76 done 77 cp -r ${BUILDDIR}/armv7/include ${BUILDDIR}/universal/ 78 79 echo "Done." 80 81 build-ffmpeg0.7
注:因爲FFmpeg庫比較陳舊,該腳本使用xcode4.6下,編譯器爲GCC,採用6.1的SDK進行編譯。若是你的機器上裝的同事安裝了xcode4.x和xcode5的話,能夠在命令行下使用以下命令切換當前的默認編譯環境爲xcode4.6便可:
設置好xcode的編譯環境之後,只須要將該腳本拷貝到FFMpeg源文件路徑下運行便可一鍵生成armv7,armv7s,i386以及合成後的全平臺庫。
5、如何使用以及編譯連接中可能遇到的問題
第四部分中咱們對build-ffmpeg.sh的腳本進行了修改和精簡後獲得了build-ffmpeg0.7.sh,咱們只須要運行該腳本就能夠一鍵完成FFmpeg 0.7版本庫的編譯工做了。編譯後咱們獲得的是lib目錄(包含全部生成的靜態庫)以及include目錄(包含相應的頭文件),使用時咱們只須要將這些文件添加到工程中便可。
問題到這裏彷佛就所有解決了,若是順利的話,恭喜你,你能夠直接使用了。
若是你跟我同樣的"不幸"的話,可能還會遇到一些其餘問題。下面是我遇到的問題及解決辦法:
一、time.h重複問題
咱們知道通常靜態庫都是搭配頭文件使用的,要在項目裏面使用FFmpeg庫,咱們出了須要在xcode的build phases中添加靜態庫之外,還須要導入該庫對應的頭文件。FFmpeg庫對應的頭文件有不少,一般會採用設置header search path的方式來導入頭文件,這樣作有兩個好處: 第一能夠避免對咱們的工程結構形成干擾。第二能夠在必定程序上下降頭文件衝突。
time.h衝突的問題就是屬於頭文件衝突,系統的標準庫中有time.h文件,FFmpeg應該是在1.1以後也加入了一個time.h文件,路徑爲libavutil/time.h。因此若是你使用的是FFmpeg1.1以後的版本,那麼在使用中就可能會碰到頭文件衝突的問題。解決這個問題,網上流傳一個方法是修改FFmpeg庫中time.h文件的名字,我以爲這太麻煩了,並且也容易出錯。後來查看FFmpeg源碼的時候偶然發現它自身內部引用這個time.h的時候都有帶一層父目錄,如#include "libavutil/time.h"。所以想是否是經過指定頭文件搜索路徑就能夠解決這個問題。
打開工程設置頁面,搜索header search path以下圖所示:
若是你的FFmpeg庫正好是放在當前的路徑下,且爲了偷懶設置了遞歸包含頭文件的話,那麼你極可能就會遇到time.h衝突的問題。由於xcode工程默認的設置是優先查找用戶路徑,編譯時FFmpeg中libavutil下的time.h就會優先被連接,從而致使不會再連接系統time.h文件,最終致使編譯失敗。
解決這個問題有兩個辦法:
a、取消掉Header Search Paths中的遞歸引用。
b、設置Always Search User Paths爲NO。
二、gcc c compiletest error問題
xcode5下面編譯FFmpeg都採用clang,一樣也會遇到相似問題。這個問題一般出如今配置文件錯誤的狀況下,通常都是gcc路徑錯誤,固然也多是其餘編譯參數錯誤問題。
出現這個問題咱們應該首先檢查gcc的路徑是否正確,若是確認了指定路徑上存在gcc程序,可是仍是報錯的,咱們再去檢查當前要編譯的平臺和指定的gcc路徑是否一致,若是你使用iPhoneOS.platform下面的gcc去編譯i386平臺的庫那確定是不會測試經過的。
三、C compiler test failed問題
編譯i386版本的FFmpeg庫和armv版本庫可能用到的參數不盡相同,例如我遇到這個問題,個人編譯選項中有一項以下:
--extra-cflags='-arch i386 -mfloat-abi=softfp -miphoneos-version-min=5.0'
在我確認其餘參數(如cpu,arch)都正確的狀況下,依然提示咱們「C compiler test failed.」 後面緊跟着一句查看config.log你能夠獲得更詳細的信息,因而打開該文件,你能夠在最開始的地方看到你的配置語句,若是是用腳本,這塊兒會顯示最終解釋後(替換參數爲真實值)的配置語句。而後緊跟着一堆具體的配置,一般哭啼的錯誤信息會在該文件的最末尾。我遇到的問題的信息以下:
看到標紅的這個區域了沒有,提示「-mfloat-abi=softfp」選項不支持,刪掉該選項後,在運行時配置就經過了。其餘配置問題,均可以經過查看config.log來獲取更詳細的錯誤信息。
四、因爲未導入libbz動態庫的問題
若是導入FFmpeg庫了,而且配置了頭文件搜索路徑,遇到"Undefined symbols for architecture armv7s: _BZ2_bzDecompressInit",以下圖所示:
這個問題是因爲沒有導入「libbz2.dylib」庫的緣由,導入庫便可解決該問題。
五、libavcodec/audioconvert.h頭文件缺失問題
不知道爲何執行make install的時候libavcodec中的audioconvert.h怎麼沒有拷貝到include目錄下的libavcodec中去,查看發現原來libavutil目錄下已經有一個audioconvert.h了。解決這個問題只須要從FFmpeg庫的libavcodec中拷貝audioconvert.h頭文件到include的libavcodec目錄中便可解決。
6、雜談
感謝我所遭遇的"不幸",若是當時接受的項目使用的最新版本的FFmpeg庫,我可能就直接運行一下那個牛逼的腳本,而後一切就能夠順順利利。若是真是那樣的話,我可能也就不會花時間去學習基本的腳本知識,去了解FFmpeg庫的相關配置,這樣的結果就是下次當我中獎遇到FFmpeg庫編譯連接等問題時,只能一籌莫展。
說了這麼多,當咱們使用一個技術的時候,不該該僅僅停留在會用的層次,花點兒時間瞭解一下背後的原理會更讓你對該技術有個更深的理解,多學,多看,多思考,最終會有有所收穫的。
7、編譯腳本及參考資料
一、編譯腳本
gas-preprocessor腳本地址: https://github.com/mansr/gas-preprocessor
FFmpeg 2.x一鍵化編譯腳本: https://gist.github.com/m1entus/6983547
FFmpeg0.7一鍵化編譯腳本: https://gist.github.com/smileEvday/7565260
二、參考資料
模擬器與真機下ffmpeg的編譯方法(總結版)
http://www.cocoachina.com/iphonedev/toolthain/2011/1020/3395.html
編譯在ios4.3中使用的ffmpeg庫(轉)
http://www.cocoachina.com/bbs/simple/?t70887.html
Installing ffmpeg ios libraries armv7, armv7s, i386 and universal on Mac with 10.8
評論
#1樓 2013-11-21 11:47 dreamhappy
#2樓[樓主] 2013-11-21 14:57 一片-楓葉
windows上的還沒搞過,這個問題還真無法回答你
#3樓 2013-12-11 14:39 三毛大哥80
macmatoMac-Pro:Downloads mac$ sh build-ffmpeg.sh
: command not foundne 2:
: command not foundne 15:
: command not foundne 19:
: command not foundne 21:
: No such file or directoryd: .
: command not foundne 24:
: command not foundne 30:
: command not foundne 31:
: command not foundne 34:
: command not foundne 41:
: command not foundne 43:
: command not foundne 45:
: invalid option line 47: set: -
set: usage: set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
#4樓 2013-12-11 14:52 三毛大哥80
#5樓[樓主] 2013-12-11 19:48 一片-楓葉
#6樓 2013-12-12 10:26 三毛大哥80
#7樓[樓主] 2013-12-13 15:12 一片-楓葉
這個腳本我試了,沒有問題的,你看看是否是有非法字符在裏面,下載下來有編輯過嗎?
#8樓 2014-01-02 23:51 龍象般若
#9樓[樓主] 2014-01-07 09:33 一片-楓葉
具體一點,報什麼錯?
#10樓 2014-01-07 15:40 吳春藝
--list-muxers show all available muxers
--list-demuxers show all available demuxers
--list-parsers show all available parsers
--list-protocols show all available protocols
--list-bsfs show all available bitstream filters
--list-indevs show all available input devices
--list-outdevs show all available output devices
--list-filters show all available filters
這幾個都是幹什麼用的啊?
#11樓 2014-01-07 15:41 吳春藝
#12樓 2014-01-07 16:20 飄蕩的雲
Downloading ffmpeg-2.0.2.tar.bz2
我是將腳本放到我下載的最新版本的ffmpeg中了 但爲何仍是去下載呢,爲何不下載最新版本的2.1呢,謝謝了
#13樓 2014-01-07 16:29 飄蕩的雲
#14樓 2014-01-07 16:50 飄蕩的雲
#15樓[樓主] 2014-01-07 19:43 一片-楓葉
arm64能夠兼容的,向下兼容而已,就像ios 7的系統能夠跑6的sdk編寫的程序同樣。
能夠修改腳本去掉模擬器支持,庫是會小一點兒。不過根據實際經驗在你編譯成最終ipa上傳的時候通常都會只支持真機,這個庫也會根據須要連接的,不會影響最終ipa的大小
#16樓[樓主] 2014-01-07 19:45 一片-楓葉
#17樓 2014-01-08 09:51 飄蕩的雲
ld: warning: ld: warning: ignoring file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavfilter.a, missing required architecture arm64 in file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavfilter.a (3 slices)ignoring file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libswresample.a, missing required architecture arm64 in file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libswresample.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavformat.a, missing required architecture arm64 in file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavformat.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavdevice.a, missing required architecture arm64 in file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavdevice.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavresample.a, missing required architecture arm64 in file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavresample.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavutil.a, missing required architecture arm64 in file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavutil.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavcodec.a, missing required architecture arm64 in file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libavcodec.a (3 slices)
ld: warning: ignoring file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libswscale.a, missing required architecture arm64 in file /Users/user/Desktop/公司資料/code/高清攝像頭/PlayerUseImage/PlayerUseImage/libs/libswscale.a (3 slices)
Undefined symbols for architecture arm64:
"_av_init_packet", referenced from:
-[VideoDecoder decodeWithData:] in VideoDecoder.o
"_avcodec_alloc_frame", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_sws_scale", referenced from:
-[VideoDecoder decodeWithData:] in VideoDecoder.o
"_avcodec_alloc_context3", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_av_free_packet", referenced from:
-[VideoDecoder decodeWithData:] in VideoDecoder.o
"_avcodec_open2", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_avpicture_alloc", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_av_register_all", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_avcodec_find_decoder", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_avpicture_free", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_sws_freeContext", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_avcodec_decode_video2", referenced from:
-[VideoDecoder decodeWithData:] in VideoDecoder.o
"_avcodec_register_all", referenced from:
-[VideoDecoder init] in VideoDecoder.o
"_sws_getContext", referenced from:
-[VideoDecoder init] in VideoDecoder.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
若是我把arm64位去掉的話,錯誤和警告就沒了,可是我以爲這不是長久之計,因此我以爲仍是如今解決一下比較好,我在網上找到了一個編譯ffmpeg arm64的,不是很懂,樓主能否將這兩個綜合一下呢,將arm64的編譯挪到你如今的腳本中,網址以下: https://github.com/kewlbear/FFmpeg-iOS-build-script
謝謝了
#18樓[樓主] 2014-01-08 13:00 一片-楓葉
你編譯的是0.7版本的仍是2.0?
#19樓 2014-01-08 13:09 飄蕩的雲
您好,樓主,是2.1的,我以前用的1.2也是這個問題,因此我換成2.1的試試,也是同樣的問題哈
#20樓 2014-01-08 13:17 飄蕩的雲
2.1有問題,不如以前的1.2版本問題,以前的1.2若是我穿進去的數據不是一幀的話,不會崩潰的,2.1的會崩潰,以前每秒10幀,一點問題沒有,用了2.1的話,也會崩潰,提示
[h264 @ 0x1d98ec00] corrupted macroblock 24 4 (total_coeff=-1)
[h264 @ 0x1d98ec00] error while decoding MB 24 4
[h264 @ 0x1d98ec00] concealing 3305 DC, 3305 AC, 3305 MV errors in I frame
[h264 @ 0x1d98ec00] no frame!
這種錯誤,貌似由於我傳進的速度,大於他的解碼速度了,致使出現這個問題的,不知道爲什麼們2.1的解碼速度這麼慢呢 樓主能加我qq嗎(532917100)謝謝了
#21樓[樓主] 2014-01-08 14:18 一片-楓葉
具體的解碼我也不懂,要支持arm64的話,直接在腳本最開始的地方armv7,armv7s 後面加上arm64應該就能夠了
#22樓 2014-01-08 14:25 飄蕩的雲
這個我試了哈 樓主 把i386改爲arm64位了,可是最後沒有生成啊 看來仍是須要改一些東西的啊
#23樓[樓主] 2014-01-09 08:59 一片-楓葉
我今天抽空看看,改好了qq通知你
#24樓 2014-01-09 09:06 飄蕩的雲
恩恩,謝謝你,樓主
#25樓 2014-02-13 10:42 碼農張三丰
Building without ccache
./configure: line 2870: /Users/zhangyu/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang: No such file or directory
./configure: line 2870: /Users/zhangyu/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang: No such file or directory
/Users/zhangyu/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang is unable to create an executable file.
C compiler test failed.
#26樓[樓主] 2014-02-13 15:40 一片-楓葉
路徑錯誤
/Users/zhangyu/Xcode5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
找不到Clang,你看看這個路徑下有嗎?
#27樓 2014-02-13 15:44 碼農張三丰
#28樓[樓主] 2014-02-14 12:35 一片-楓葉
#29樓 2014-03-24 09:03 vale_1988
Using ffmpeg-2.1.4.tar.bz2
Building without ccache
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang is unable to create an executable file.
C compiler test failed.
請問是啥問題引發的?個人環境是 Mac OX 10.9,Xcode5.1
------------------------------------------------------------
把腳本里的路徑一個個打印下來,發現原來是Xcode5.1中裝的是iOS7.1的SDK,而不是iOS7.0的SDK。謝謝。
-------------------------------------------------------
仍是有問題 後加入 " --disable-armv6 \
--disable-armv6t2 \" 這兩個參數就行了。
再次感謝。
#30樓 2014-04-21 18:23 lzh01
armv7s
i386
universal
博主,這是我生成的文件,我是否是須要合成一個啊?我怎麼合成?
#31樓 2014-04-21 19:27 lzh01
[swscaler @ 0xd0fb600] No accelerated colorspace conversion found from yuv420p to rgb24.
不知道你們有沒有遇到這樣的問題!
我使用編譯後的庫是universal
#32樓[樓主] 2014-04-22 11:12 一片-楓葉
universal裏面的就是合成好的庫
#33樓 2014-04-24 14:43 lzh01
謝謝博主!
還有一個問題,按照 http://www.cnblogs.com/ikodota/archive/2012/09/12/compile_ffmpeg_for_iOS.html
的教程,編譯總報
Configure options: --disable-asm --enable-cross-compile --enable-gpl --enable-postproc --enable-swscale --enable-avfilter
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc is unable to create an executable file.
C compiler test failed.
錯誤!不知博主是否也遇到過!
#34樓[樓主] 2014-04-24 18:31 一片-楓葉
參數不對,或者版本不對應,以前我遇到過只有畫面沒有聲音的問題
#35樓 2014-04-25 16:53 lzh01
我發現我編譯都沒經過!錯誤都是
Configure options: --disable-asm --enable-cross-compile --enable-gpl --enable-postproc --enable-swscale --enable-avfilter
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc is unable to create an executable file.
C compiler test failed.
#36樓 2014-05-07 11:55 騎驢追火箭
出現這個問題是什麼緣由啊
liangyingjundeMacBook-Pro:ffmpeg-2.0.2 Onery$ xcode -s /Applications/Xcode5.1.app/Contents/Developer
-bash: xcode: command not found
#37樓 2014-09-11 17:58 遇則安
看完這篇博客後深受啓發,但按照文中步驟編譯時老是有問題。iOS sdk:7.1,ffmpeg:2.3.3,Xcode 5.1.1,每次都是gas-preprocessor報錯,剛開始說找不到這個文件,而後將build-ffmpeg.sh腳本中的gas-preprocessor路徑改成/usr/bin/gas-preprocessor,而後顯示gas-preprocessor的第88行報錯。對應的文件都是在博文中的連接下載的,報錯信息在ffmpeg/config.log中看的。而後看到一些博客中說Xcode5以上不在須要gas-preprocessor文件了,因而把build-ffmpeg.sh腳本中關於gas-preprocessor的「--as='/usr/local/bin/gas-preprocessor.pl'」刪掉後,終於編譯成功了。不知道在使用過程當中還會遇到什麼問題。
#38樓 2014-11-21 15:25 廣州-小a
我如今將ffmpeg編譯好以後,想將本身編寫的sdk.c等其餘c源文件(調用到了ffmpeg裏面的方法)進一步編譯成一個庫,最後供後續調用,那麼如今想進一步編譯庫,應該怎麼作?
#39樓 2014-11-27 09:41 他三叔走啊
#40樓[樓主] 2014-11-28 09:23 一片-楓葉
#41樓[樓主] 2014-11-28 09:23 一片-楓葉
具體點,爲何不能用呢?
#42樓 2014-11-28 09:34 他三叔走啊
能夠用 是我不會用 我要作的功能是 多張圖片合成視頻 能指點一下麼? 我QQ490849131 謝謝了
#43樓 2014-12-02 16:17 他三叔走啊
#44樓 2014-12-02 16:24 paschal