1. 程式人生 > >[ffmpeg]學習(一)Mac上的編譯

[ffmpeg]學習(一)Mac上的編譯

Mac上的編譯

在Ubuntu系統下編譯ffmpeg的原始碼很方便,缺少什麼第三方的工具或者lib直接就可以apt-get,再不行就百度,總之解決起來很方便。最近屌絲鳥槍換Mac了,所以這裡就說說Mac上如何編譯ffmpeg原始碼以及如何解決編譯過程中遇見的問題。

下載原始碼配置環境

編譯原始碼

-cd ffmpeg
-./configure
-make
-make install
對於一些小白來說,可能都不知道這四個命令都是幹什麼的,我就簡單說明一下後三個命令:cd我就不說了,要是這個都不知道,那也就別編譯原始碼了。./configure是對所要編譯的原始碼的配置。這操作會檢測一些系統環境,例如,ffplay的編譯是需要sdl(Simple DirectMedia Layer),它是一套用C語言寫成的開放原始碼的跨平臺多媒體開發庫。如果沒有sdl,那麼就無法編譯出ffplay。我在編譯過程中也遇到了沒有sdl這個問題,後面我會以sdl為例子,講解如何解決編譯過程中遇到的問題。make命令就是編譯原始碼,因為原始碼的編譯規則已經寫在了makefile裡面,所以你只需要make一下就ok了。編譯結束後,在ffmpeg資料夾下面會生成幾個可執行檔案ffplay,ffserver,ffmpeg,ffprobe等。實際上,至此我們已經完成了原始碼的編譯。make install的作用就是把這些命令和編譯好的lib安裝到你的系統裡面。實際上你不安裝也可以,在你之後用的時候,就顯示的指明執行檔案的路徑,標頭檔案以及lib的位置就行,不過還是建議安裝一下,否則用起來還是比較費事的。

發現問題解決問題

前置條件:如果是Mac,請先安裝Xcode。

在執行上面的編譯操作後,我發現我並沒有生成ffplay,然後一臉懵逼的我不知所措了。。。。

為什麼呢? ./configure –help 。發現裡面有好多disable,enable的選項。我是不是忘了把ffplay enable了呢?於是,我在此config,./configure –enable-ffplay。結果,還是沒有把ffplay編譯出來。

開啟ffmpeg原始碼的根目錄,你會發現有三個檔案,從名字上就能判斷他們是和配置有關的,分別是:config.h, config.log還有config.mak。分析一下,程式碼沒編譯出ffplay肯定和標頭檔案有關,我就打開了config.h。搜尋ffplay關鍵字,發現有個巨集定義#define CONFIG_FFPLAY 0,值是0,可以確定,這就是導致無法編譯出ffplay的直接原因。通過名字我們可以看出config.log是配置的日誌檔案,同樣開啟它,並搜尋關鍵字ffplay,結果發現裡面終於出現了一些有用的資訊。通過log,可以看出ffplay編譯的時候是需要一些第三方的lib支援的,但是在檢查這些lib的時候,發現sdl檢測失敗。那好吧,既然問題找到了,就順著這個線索解決吧。在安裝sdl的時候,也遇見了一些曲折這裡就不說了。我就直奔主題說怎麼安裝sdl吧。首先你要先下載個工具brew,這個brew有點類似Ubuntu的apt-get,就是,你可以用它直接安裝一些東西。

  • 安裝pkgconfig
    sudo port install pkgconfig

  • 安裝sdl
    brew install sdl

開始正式編譯

cd $ffmpegSourceCodeDir
./configure
make
make install
這下終於把ffplay也編譯出來了。
這裡寫圖片描述

總結:

至此所有的編譯工作也就結束了,在網上有很多編譯ffmpeg的帖子,而且寫的也很詳盡。但是,很少有針對編譯過程中出現的問題怎麼去解決的文章。本文旨在說明編譯過程中遇見問題的解決方法,希望對您有幫助。如果在編譯期間遇見問題,請給我留言,我們相互交流探討。