在Mac OS X環境中從原始碼編譯安裝FFmpeg
最近因為一個項目要求,需要開發即時視頻編解碼功能,準備採用 FFmpeg 以 x264 方式進行即時的視頻編解碼。Windows 以及 Linux 環境下的 FFmpeg 動態庫、標頭檔等資源都非常容易獲得,編譯環境也容易構建,但 Mac OS X 下的開發編譯環境就不那麼容易了。因為 FFmpeg 預設沒有提供 Mac OS X 下的已經編譯好的動態連結程式庫(甚至連靜態庫都沒有提供),而網上找到的多是編譯好的單獨的 FFmpeg 可執行程式,滿足不了開發過程中對 FFmpeg 動態庫(或靜態庫)的編譯串連要求,因此考慮自己動手從原始碼編譯安裝 FFmpeg,以獲得 Mac OS X 下的 FFmpeg 動態連結程式庫(以及靜態庫)版本,並構建好開發編譯環境。 首先要確保 Mac OS X 下已經具備編譯開發環境,一般都是安裝 XCode 以及對應的 Command line tools。 然後,從 FFmpeg 官方網站下載 FFmpeg 最新版本的原始碼,可直接下載打包好的原始碼壓縮檔,也可以通過 git 擷取完整原始碼鏡像,推薦用 git,命令如下: git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg 這時不要急著馬上開始進行編譯配置!因為首先要明白一點,FFmpeg 是一個編解碼架構,能夠支援各種不同的轉碼器,並採用統一的 api 去調用。但其預設只提供了針對各種媒體格式的解碼器(基本上涵蓋得比較全了),而編碼器預設提供很少的幾個開源的格式(或者已經無需專利保護的格式)。所以,如果你需要 FFmpeg 具備支援多種媒體格式的編碼能力,你需要額外下載並安裝那些編碼器(主要是通過安裝這些編碼器獲得它們的標頭檔、動態庫及靜態庫用於 FFmpeg 編譯),才能保證在 FFmpeg 編譯時間載入這些編碼器的二進位代碼,使 FFmpeg 具備這些編碼功能。經過對比分析,就我這個項目需求而言,基本上編碼器需要先額外下載並安裝這幾個:x264、fdk-aac、libvpx、libvorbis、LAME(mp3)就足夠了。 接著,分別下載 x264、fdk-aac、libvpx、libvorbis、LAME 的原始碼,然後分別編譯安裝。注意在執行各自的 configure 建立編譯設定檔時,最好都強制帶上 --enable-static 和 --enable-shared 參數以確保產生靜態庫和動態庫。另外因為是在 Mac OS X 環境下編譯,因此在各自編譯完後,都要執行 sudo make install,安裝到預設的 /usr/local 目錄下相應位置(Mac OS X 下不推薦 /usr),因此不要在 configure 時指定 --prefix,就用預設的 /usr/local 目錄首碼即可。 在安裝完上述編碼器後,就可以開始編譯安裝 FFmpeg 了。進入 FFmpeg 的原始碼目錄,執行以下命令: ./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264 --enable-static --enable-shared make sudo make install 即可完成編譯安裝,FFmpeg 的標頭檔將會複製到 /usr/local/include 下面相應位置,靜態庫及動態庫會被複製到 /usr/local/lib 目錄下,FFmpeg 的可執行程式(ffmpeg、ffprobe、ffserver)會被複製到 /usr/local/bin 目錄下,這樣 FFmpeg 的開發環境就構建好了。補充說明一點,因為預設情況下 Mac OS X 沒有 SDL,所以 FFmpeg 編譯時間檢測不到 SDL 支援,就不會編譯 ffplay 這個可執行程式了。