你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 關於iOS上使用ffmpeg的編譯配置

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

編輯:IOS開發綜合

使用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
至於該禁用那些,該啟用哪些,從而達到最優的編譯,額,這可能還需要對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了某些組件。需要了解了項目的需求後,把相應的庫編譯進來。

 

 

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved