在iOS上使用ffmepg

來源:互聯網
上載者:User

說明,我在網上大量的找文章看如何把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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.