特此聲明:本文是通過網上收集整理加上自己親自實驗得來的。感謝所有網上分享的辛勤勞動者,本文僅供iOS學習使用。在學習的過程中,如果有問題或者不清楚的地方,歡迎留言,我們共同探討互相學習。歡迎批評指正。
如果轉載,請註明出處:http://blog.csdn.net/yangshebing21/article/details/43986913
一、編譯ffmpeg庫:
編譯調試ffmpeg庫的步驟:
開發環境:ffmpeg-2.5.4/Xcode6.1
請點擊此鏈接http://ffmpeg.org/download.html
注:我的ffmpeg-2.5.4是解壓放至Desktop的
(1)、安裝yasm:
方法一:
在終端輸入:sudo curl http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz >yasm.tar.gz
方法二:
1、Download yasm sourcecode from:
http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
2、Unpack tar xvzfyasm-1.2.0.tar.gz
3、cd yasm-1.2.0
4、Configure and build:
./configure && make -j 4 &&sudo make install
(2)、下載pearl腳本文件:gas-preprocessor.pl:
下載地址: https://github.com/libav/gas-preprocessor
如果找不到/usr/bin目錄,直接使用”Finder—>前往—> 前往文件夾—>/usr/bin”或者使用快捷鍵“shift+command+G”前往文件夾,到指定目錄下粘貼gas-preprocessor.pl文件。
(二)、修改gas-preprocessor.pl文件的讀寫權限,使用 chmod a+rwxgas-preprocessor.pl
用終端命令cd定位到 gas-preprocessor.pl文件夾下執行:chmod a+rwxgas-preprocessor.pl命令
(3)、下載build-shell.sh腳本文件:
下載地址:https://github.com/kewlbear/FFmpeg-iOS-build-script
(一)下載解壓build-shell.sh文件
(二)定位至build-shell.sh文件夾執行build-shell.sh腳本文件
使用方式有4種,我們可以根據特定的使用環境來執行對應的腳本,一般我們就直接執行:./build-ffmpeg.sh
(1)To build everything:
./build-ffmpeg.sh
(2)To build arm64 libraries:
./build-ffmpeg.sh arm64
(3)To build fat libraries for armv7 and x86_64 (64-bit simulator):
./build-ffmpeg.sh armv7 x86_64
(4)To build fat libraries from separately built thin libraries:
./build-ffmpeg.sh lipo
注:我的build-shell.sh是解壓放至Desktop的,以上四種shell腳本的使用方式來自 https://github.com/kewlbear/FFmpeg-iOS-build-script,後面幾種方式大家可以自己去嘗試。
(4)、腳本執行完成之後,會在桌面上生成三個文件夾:“FFmpeg-iOS”“scratch”和”thin”文件夾
scratch文件夾裏面是單獨編譯的庫,FFmpeg-iOS文件夾裏面是合併編譯的庫。在使用的過程中,我們主要會用到FFmpeg-iOS 文件夾下的“include”文件夾和"lib"文件夾中的文件。
二、在工程中使用FFmpeg,網上成熟的有kxmovie。
1、下載kxmovie工程進行測試:
下載地址: https://github.com/kolyvan/kxmovie
把FFmpeg編譯出來的.a文件添加到工程中。
在使用的時候得注意添加下面的動態鏈接庫文件:
libz.dylib
libbz2.dylib
libiconv.dylib
運行工程
以下是在編譯運行工程中可能會報的錯誤:
注意:如果在FFmpeg編譯的時候出現“ffmpeg yasm not found,use --disable for a crippled build”,原因是 yasm是彙編編譯器,因爲FFmpeg中爲了提高效率用到了彙編指令,解決這個問題有兩種方法,一是下載一個yasm.exe安裝在mingw/bin下面;二是不使用匯編指令,在配置上加上 即 ./configure --disable-yash 。(這就是爲什麼前面提到了要安裝yasm)
成功通過編譯(這裏是指FFmpeg編譯成靜態庫文件)
通過後會生成一個compiled(FFmpeg-iOS)的文件夾,裏面有include和lib兩個文件夾,這兩個文件夾都要拷貝至工程目錄下面。include是靜態鏈接庫要用到的頭文件,lib是存放靜態鏈接庫的文件,然後把這些文件存放在項目裏面即可,一定要把文件也copy進去,然後在項目的build settings中的header search paths字段加入include文件的路徑 如:“$(SRCROOT)/ffmpeg/include”
前面的複選框選不選都可以;再在library search paths字段中加入a文件的路徑 如:“$(SRCROOT)/ffmpeg/lib” 。否則可能會出現libavformat/avformat.h file not found 的錯誤。(出現這個錯誤是指編譯kxmovie工程找不到相應的頭文件)
上面圖示:在工程目錄下有個“FFmpeg”的文件夾,分別把編譯FFmpeg完成後產生的“ FFmpeg-iOS ”文件夾中的“include”和”lib”文件夾拷貝至”FFmpeg”文件夾中,include文件夾中存放的是頭文件,lib文件夾中存放的是.a靜態庫文件。最後就是在工程目錄下的FFmpeg文件夾包含“include”和”lib”兩個文件夾。設置Header
Search Paths和Library Search Paths時直接include和lib兩個文件夾拖上去,自動顯示路徑。
如果還出現找不到 avformat_open_input 的錯誤(我的沒有出現過這個錯誤),說明你的ffmpeg還是太新了,之前的那個方法名已經改成了這個名字,把avformat_open_input改成av_open_input_file
就可以了。其他錯誤請自行谷歌或者留言,我們共同探討。
上面報錯總結文章來自:http://www.dnetzj.com/Content/267.html
最後一步,別忘了安裝kxmovie.xcworkspace的cocoapods
pod install --verbose --no-repo-update
否則會報鏈接錯誤
三、iFrameExtractor-master(iFrameExtractor)工程編譯和運行
(1)運行iFrameExtractor-master工程,與上面kxmovie工程操作一樣,把FFmpeg文件夾拷貝至工程目錄下:
(工程目錄下本來是沒有FFmpeg文件夾的)
iFrameExtractor-master下載地址:https://github.com/lajos/iFrameExtractor
(2)設置好Header Search Paths和Library Search Paths
(3)最後還是會報鏈接錯誤:
此報錯問題出自:http://stackoverflow.com/questions/21211215/ffmpeg-wont-build-in-my-project-works-fine-in-example-app/28777851#28777851
至此完成iFrameExtractor-master工程編譯和運行
本文參考文章資料:
http://blog.csdn.net/oqqQuZi1234567/article/details/43152689
http://www.th7.cn/Program/Ruby/201502/385491.shtml
歡迎共同學習進步,本着分享的精神,只是爲了讓你學習起來更加輕鬆。如需轉載,請註明出處:http://blog.csdn.net/yangshebing21/article/details/43986913