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

來源:互聯網
上載者:User

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

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.