關於iOS上使用ffmpeg的編譯配置

      使用ffmpeg進行音視頻開發,首先編譯需要把ffmpeg的源碼編譯成靜態庫,編譯不是大問題,關鍵問題是編譯的時候的各種配置該怎麼設置的問題。之前在網上搜索學習,這篇文章不錯:iOS: FFmpeg編譯和使用問題總結 。有些文章給出編譯的整個命令,有的給腳本鏈接,但是都有一些問題,因爲ffmpeg版本更新了、iOS版本更新了(我下的是ffmpeg2.3)。最後東拼西湊,終於編譯成功了一個,編譯命令是:

(1)

./configure --prefix=../i386 --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --enable-avresample --enable-cross-compile --sysroot="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk" --target-os=darwin --cc="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" --extra-cflags="-arch i386 -mfpu=neon -miphoneos-version-min=7.0" --extra-ldflags="-arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk -miphoneos-version-min=7.0" --arch=i386 --cpu=i386 --enable-pic --disable-asm --enable-decoder=h264 --enable-decoder=rv40

(2)
sudo make&&sudo make install

   1、完整過程:

   首先編譯是使用終端進行編譯,打開終端後,進入到你下載解壓後的ffmpeg的文件目錄下,然後執行上面的命令。(1)部分是配置,(2)部分 make執行後會開始編譯,會看到迅速生成許多 cc 開頭的命令;make install生成靜態庫,完成。

      後面編譯完成,加到項目中也OK了,但是一看大小,我靠,200多M,沒辦法,來研究下配置項,看看怎麼把不必要的內容不變異進來。所以瞭解了下各個命令的意思。

   2、各個命令:

  (1)首先,每個單獨的配置項之間是隔了一個空格的,這是一個需要注意的問題,怕手一抖,把兩條命令貼在了一起,比如

 --disable-ffmpeg --disable-ffplay   寫成了--disable-ffmpeg--disable-ffplay

然後編譯的時候,報錯說不識別--disable-ffmpeg--disable-ffplay,你還以爲自己這兩條命令打錯了,其實系統是把它看成了一條命令。

  (2)--prefix=後面跟的是編譯成功後靜態庫存放的路徑,可以自己新建一個文件夾,拖進來就可以了。

  (3)然後是一連串--disable-xxx或--enable-xxx這種格式的東西,就是這些影響了編譯後庫裏面的東西,disable是不編譯xxx,anable是編譯xxx。不過這裏有個要注意的,比如解碼方式你只需要h264,不想把其他東西解碼方式編譯進來怎麼辦,使用:

--disable-decoders 和 --enable-decoder=h264結合。前面一句其實是禁用了所有的解碼方式,然後你再編譯某一種解碼方式,這樣就只有這一種解碼方式編譯進來,這樣可以大大的縮小靜態庫而又可以滿足使用需要。而至於有哪些解碼方式,可以使用

./configure --list-decoders來查看。./configure --help可以查看其他很多可執行命令。

Help options:
  --help                   print this message
  --list-decoders          show all available decoders
  --list-encoders          show all available encoders
  --list-hwaccels          show all available hardware accelerators
  --list-demuxers          show all available demuxers
  --list-muxers            show all available muxers
  --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</span>
   至於該禁用那些,該啓用哪些,從而達到最優的編譯,額,這可能還需要對ffmpeg的各個組件以及它們在音視頻處理過程中的作用比較瞭解了才行,能力有限,仍在探索中。

   (4)--enable-cross-compile是允許交叉編譯,--target-os=darwin是指定目標操作系統爲蘋果系統內核(darwin)。

   (5)--sysroot=後面跟的是編譯對應的iOS SDK的路徑,ffmpeg真機和模擬器的編譯是不同的,這裏路徑也相應的不同。這裏的“

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk

”是模擬器的路徑。

    (6)--cc=後面是編譯器的路徑,Xcode5之後默認編譯改爲clang了,使用gcc好像也可以。

    (7)--arch=i386 --cpu=i386是選擇系統的結構和cpu類型,模擬器都是i386,iphone3GS以上爲:--arch=arm --cpu=cortex-a8,iphone5s爲--arch=arm --cpu=cortex-a9。

     (8)這裏沒寫的,還有一個命令:--disable-static,使用了之後,編譯出來的是動態庫,不過蘋果貌似不允許使用動態庫,沒去深究,有需要的朋友可以去研究下動態庫的ffmpeg。

     

    編譯過程出問題,可以去ffmpeg的目錄下查看config.log文件,打開可以查看關於錯誤的更詳細信息。

  3、使用:

      編譯成功後,會有兩個文件夾:include和lib,一個頭文件、一個庫。把它們添加進項目裏面,然後需要配置Header SearchPaths和Library Search Paths,也就是頭文件和庫的路徑,否則會報錯提示“xxx/xxx.h”文件未找到。然後配置好了,還是提示某些文件缺失,可能一是需要添加某些系統動態庫或者框架,而是可能在編譯的時候disable了某些組件。需要了解了項目的需求後,把相應的庫編譯進來。


參考文章:第一篇

                   第二篇


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