iOS FFmpeg編譯及kxmovie、iFrameExtractor調試詳解(無障礙閱讀,絕對是你想要的)

特此聲明:本文是通過網上收集整理加上自己親自實驗得來的。感謝所有網上分享的辛勤勞動者,本文僅供iOS學習使用。在學習的過程中,如果有問題或者不清楚的地方,歡迎留言,我們共同探討互相學習。歡迎批評指正。

如果轉載,請註明出處:http://blog.csdn.net/yangshebing21/article/details/43986913

開發環境: 最新 ffmpeg-2.5.4/iOS SDK8.1/Xcode6.1/OS X Yosemite版本10.10.2

一、編譯ffmpeg庫:

        編譯調試ffmpeg庫的步驟:
        開發環境:ffmpeg-2.5.4/Xcode6.1


        1、下載ffmpeg源碼:

        請點擊此鏈接http://ffmpeg.org/download.html
        注:我的ffmpeg-2.5.4是解壓放至Desktop的


       2、調試編譯ffmpeg源碼

            (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

                   (一)、拷貝gas-preprocessor.pl文件到 /usr/bin 目錄下。

                            如果找不到/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
   否則會報鏈接錯誤


以上kxmovie工程編譯調試完畢,模擬器真機都通過測試。目前沒有進一步的去研究這個工程,發現播放的視頻質量有點粗糙。有時間再做進一步的研究。

三、iFrameExtractor-master(iFrameExtractor)工程編譯和運行

   (1)運行iFrameExtractor-master工程,與上面kxmovie工程操作一樣,把FFmpeg文件夾拷貝至工程目錄下:
       (工程目錄下本來是沒有FFmpeg文件夾的)

                iFrameExtractor-master下載地址:https://github.com/lajos/iFrameExtractor

(2)設置好Header Search Paths和Library Search Paths


             

       (3)最後還是會報鏈接錯誤:


                  Undefined symbols for architecture i386:
                        "_iconv", referenced from:      
                     _avcodec_decode_subtitle2 in libavcodec.a(utils.o)  
                "_iconv_close", referenced from:
               _avcodec_open2 in libavcodec.a(utils.o)
                    _avcodec_decode_subtitle2 in libavcodec.a(utils.o)
                  "_iconv_open", referenced from:
              _avcodec_open2 in libavcodec.a(utils.o)
             _avcodec_decode_subtitle2 in libavcodec.a(utils.o)
                 ld: symbol(s) not found for architecture i386
                clang: error: linker command failed with exit code 1 (use -v to see invocation)
解決辦法:"TARGETS" - > "BuildSettings" - > "Other Linker Flags" 添加other Linker Flags 項:-liconv

此報錯問題出自: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章