說明,我在網上大量的找文章看如何把ffmpeg移植到iOS上,結果總是問題多多,而ffmpeg的協助也就那麼點,真是很頭痛, 花了兩個星期,總算是把這個ffmpeg給出來。所以,我完全感受到作為新手的那種迷茫與無助,決心把自己的經驗寫下來,讓更多人可以少走彎路。對給予我無私的協助的西安“我不知我是誰”,以及”隨風vs天下”網友表示極大的感謝.
如需轉載,請保留當前網址,至少對我費勁把這些寫下來並分享表示尊重。
步驟如下:
1從https://github.com/yuvi/gas-preprocessor下載最新的gas-preprocessor.pl檔案,並把它置於$PATH所對應的檔案夾下,如usr/sbin, 並添給其添加執行許可權, 這裡可以直接給予最高許可權 chmod777 gas-preprocessor.pl
如:
2從ffmpeg的官網下載最新代碼http://ffmpeg.org/download.html, 如當前最新的為0.10
在這裡任選一個下載
3下載iFrameExtractor這個項目從gitclone git://github.com/lajos/iFrameExtractor.git, 有可能不能下載, 因為國內公司一般都做了限制, 可以在網上去搜, 很多這個工程, 差別不大,不影響使用ffmpeg.
然後把下載下來的ffmpeg放在iFrameExtractor項目的檔案夾下,如下結構:
4開啟terminal, cd到ffmpeg-0.10檔案夾下面,執行一下makeclean, 清除之前產生的庫檔案。
5如果要產生模擬器可以使用的庫檔案.
環境為:Mac Lion 10.7.2, XCode:4.2.1,
模擬器(運行時,我暫時以5.0的模擬器測試)
SDK:/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk
SDK:/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk
則用如下命令
./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-avfilter --disable-debug --disable-encoders --enable-cross-compile --disable-decoders --disable-armv5te--enable-decoder=h264 --enable-pic --cc=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc--as='gas-preprocessor/gas-preprocessor.pl/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc'--extra-ldflags=-L/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/usr/lib/system--sysroot=/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk--target-os=darwin
--arch=i386 --cpu=i386 --extra-cflags='-arch i386'--extra-ldflags='-arch i386' --disable-asm
這個命令執行完後,應當是不會報錯,類似於:
6執行make命令。(有時會有錯,建議多試兩次,無錯的情況,應該類似於)
這個時候,可以去到這個ffmepg檔案夾下查看libavutil/libavutil.a,libswscale/ libswscale.a,libavcodec/libavcodec.a,libavformat/libavformat.a檔案應該都已經產生。
7開啟下載後的iFrameExtracto項目,
設定Project中的build setting中的Header Search Paths為當前位置的./ffmpeg-0.10,如:
再設定Target中的build setting的Header Search Paths為當前位置的./ffmpeg-0.10。如:
這裡先暫時不設定Target下的Libaray Search Paths,把其中的Paths點擊全部刪除掉。(因為呆會加上這些庫檔案後,這個Libarary Search Paths會自動填滿)
8刪除掉這個項目之前的一些庫檔案引用, (包括在項目工程下的這些庫檔案,以及在Target右邊的庫檔案引用)
9點擊Target的Build Phases中的“LinkBinary With Libaries”下找到並加入這幾個庫檔案,加入完成後,可以去Target下的Build Settings下的“Library Search Paths”中已經自動填滿了這幾個庫檔案的路徑,並保證已經加入了庫libbz2.1.0.dylib
然後編譯運行,iFrameExtractor應該是運行到模擬器上了。
下面進行真機ffmpeg的編譯
5 (從上面第5步開始不同)
環境為:Mac Lion 10.7.2, XCode:4.2.1,
XCode中的真機 SDK版本為SDK:/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk
真機,iTouch 4(SDK 5.0.1 installed )
同樣先進行make clean清除已有的庫檔案
執行
./configure --disable-doc --disable-ffmpeg--disable-ffplay --disable-ffserver --disable-avfilter --disable-debug--disable-decoders --enable-cross-compile --disable-encoders --disable-armv5te--enable-decoder=h264 --enable-pic--cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc--as='gas-preprocessor/gas-preprocessor.pl/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc'--extra-ldflags='-arch
armv7 -isysroot/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk'--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk--target-os=darwin --arch=arm --cpu=cortex-a8 --extra-cflags='-arch armv7'
執行完畢後,如下:(沒什麼錯誤的情況下)
6.執行make時報錯, error:invalid operand in inline asm: 'adds $1, ${2:R}, ${2:Q}, lsr #31錯誤如下:
在網上查了一下,說是如果你的項目中不需要asm 支援的話,就可以把asm給禁止掉,於是乎,在./configure末尾加入了--disable-asm變成了如下:
./configure --disable-doc --disable-ffmpeg--disable-ffplay --disable-ffserver --disable-avfilter --disable-debug--disable-decoders --enable-cross-compile --disable-encoders --disable-armv5te--enable-decoder=h264 --enable-pic--cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc--as='gas-preprocessor/gas-preprocessor.pl/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc'--extra-ldflags='-arch
armv7 -isysroot/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk'--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk--target-os=darwin --arch=arm --cpu=cortex-a8 --extra-cflags='-arch armv7'--disable-asm
配置無錯,然後make,編譯成功, 如:
到相應的檔案夾下的確可以看到新產生的庫檔案
然後後面的步聚與前面模擬器上的一樣,最後就運行到你的手機上了。
上面真機方法適用於ios 4, ios5版本。
用下面這個命令可以適用於ios6系統上,已測試, iphone4, (ios 6)安裝正常
./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-avfilter --disable-debug --disable-decoders --enable-cross-compile --disable-encoders --disable-armv5te --enable-decoder=h264 --enable-pic --cc=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc
--as='gas-preprocessor/gas-preprocessor.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' --extra-ldflags='-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk'
--sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk --target-os=darwin --arch=arm --cpu=cortex-a8 --extra-cflags='-arch armv7' --disable-asm