基於Ubuntu交叉編譯FFmpeg Windows SDK

來源:互聯網
上載者:User

標籤:extra   參考   mod   動態   include   time   mingw   做了   朋友   

寫在前面

  FFmpeg是一個開源且跨平台的音視頻解決方案,集採集、轉碼、流式化為一身,項目的libavcodec編解碼模組和libavformat媒體格式模組,支援非常非常豐富的編解碼格式和容器封裝格式,是做媒體相關開發工作必須要掌握和借鑒的一個項目。定製和編譯ffmpeg是做流媒體開發遲早要面對的,linux平台上相對簡單,windows平台就比較麻煩了。本文的目的就是詳細介紹下如何基於ubuntu交叉編譯環境,編譯和定製ffmpeg。

 

一  概述

  ffmpeg主要是基於linux開發,當然它也支援windows,不過並不支援visual studio系列IDE(因為它使用了大量C99特性,而vs不支援C99),所以要想在windows上使用,必須要通過mingw或cygwin來編譯,或者在linux上構建windows交叉編譯環境,後者要簡單些。這裡有個網站http://ffmpeg.zeranoe.com/,作者提供了ffmpeg已經編譯好的windows版本,包括靜態串連的,動態串連的,以及sdk,基本上隔幾天就編譯一次。大家可以先上去看一下,如果它編譯的符合你的需求(上次看的時候它好像沒有加入libfaac,現在不知道了),而你又懶得編譯,就可以使用它的。對linux不太熟悉的朋友可能不太想繼續往下看,請不要擔心,ubuntu的安裝和使用非常簡單,直接在虛擬機器裡使用就行。編譯的時候,你也只需要使用幾個很簡單的命令而已。

 

二 環境準備

  1. Ubuntu Linux,本人使用的Ubuntu 11.10,安裝在VMware Workstation

  2. MinGW編譯環境,我們要非常感謝,zeranoe,它做了一個自動下載和編譯ffmpeg所需要的mingw及其他工具鏈的指令碼,請到http://ffmpeg.zeranoe.com/blog/下載最新的“MingGW-w64 Build Script 2.8.2”。解壓後建立一個目錄把它放進去(本人的目錄是/home/haibindev/studio/mingw-w64/),然後開啟終端,cd 到MinGW-w64所在目錄,執行"chmod +x mingw-w64-build-2.8.2",使這個指令碼可以執行。之後運行"./mingw-w64-build-2.8.2",就可以按照提示來做了。如果它提示你缺少依賴庫,就按照它的提示先安裝依賴庫,方式是,執行"sudo apt-get install 庫名字"。

  3. 設定終端的環境變數

  執行一下命令即可。(注意,如果你關閉了終端,或者建立一個終端,需要重新執行一下這個命令。)

export PATH="$PATH:/home/haibindev/studio/mingw-w64/mingw-w64-i686/bin"

 

三 下載FFmpeg源碼和你需要的編解碼庫的源碼

  這點不用做什麼介紹,先到ffmpeg官網,下載ffmpeg原始碼,然後再Google你需要的編解碼庫,到相關網站下載即可。本人這次編譯共下載了以下代碼,以做大家參考。

libx264 libfaac libmp3lame libopenjpeg libogg libspeex libvorbis libtheora libxvid ffmpeg

  下載完後解壓,然後統一放到一個目錄中,本人的目錄是/home/haibindev/studio/opensource/。是全家福(build-ffmpeg是編譯ffmpeg的工作目錄,下面介紹,freetype我沒有編譯)。

四 編譯

  為了方便,我把所有庫編譯後的結果都存放到了一個統一的目錄/home/haibindev/opensdk,方法請見下面的編譯命令。

  除了第一個命令以外,其餘的都是configure命令,執行完之後,還需要執行make命令,然後執行make install。我就不再寫出來了。

  1. 先執行以下命令

ln -s "/usr/bin/pkg-config" /home/haibindev/studio/mingw-w64/mingw-w64-i686/bin/i686-w64-mingw32-pkg-config

  2. libx264

./configure --enable-static --enable-win32thread --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --cross-prefix=i686-w64-mingw32-

  3. libfaac

./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared --with-mp4v2=no

  4. libmp3lame

CFLAGS=-DFORCEINLINE= ./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared --disable-frontend

  5. libopenjpeg

./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared

  6. libogg

./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared

  7. libspeex

./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared --disable-oggtest

  8. libvorbis

./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared --disable-oggtest 

  9. libtheora

./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --enable-static --disable-shared --disable-oggtest --disable-vorbistest --disable-sdltest --with-ogg-includes=/home/haibindev/opensdk/include --with-ogg-libraries=/home/haibindev/opensdk/lib

  10. libxvid

./configure --host=i686-w64-mingw32 --prefix=/home/haibindev/opensdk --disable-pthread

  11. ffmpeg

  先建立/home/haibindev/studio/opensource/build-ffmpeg,然後cd到該目錄,執行

../ffmpeg-0.8.7/configure --disable-static --enable-shared --enable-version3 --enable-gpl --enable-nonfree --disable-pthreads --enable-w32threads --enable-runtime-cpudetect --enable-memalign-hack --enable-libfaac  --enable-libmp3lame --enable-libopenjpeg --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-zlib --enable-cross-compile --target-os=mingw32 --arch=x86 --prefix=/home/haibindev/opensdk/ffmpeg --cross-prefix=i686-w64-mingw32- --extra-cflags="-I/home/haibindev/opensdk/include" --extra-ldflags="-L/home/haibindev/opensdk/lib"

  注意,編譯xvid時需要先編輯configure檔案,然後刪除裡面的“-mno-cygwin”欄位,否則make會失敗,提示-mno-cygwin無效。libmp3lame命中中最前面的“CFLAGS=-DFORCEINLINE= ”是為了防止mp3lame中的一個編譯錯誤,要記得帶上。

  以上編譯成功之後,ffmpeg win32 sdk就出現在/home/haibindev/opensdk/ffmpeg裡面了,bin目錄下就是我們需要的所有檔案了。

 

五 驗證編譯後的程式

  拷貝到windows上,在命令中運行ffmpeg.exe,看

  驗證一下,做個轉碼操作就行了,執行

ffmpeg.exe -i s.avi -vcodec libx264 -acodec libfaac s.mp4

  運行正常,產生了264編碼和aac編碼的,mp4檔案,播放正常,ok了。

 

六 最後說一下

  請大家編譯的時候千萬別忘了configure之後,要執行make和make install!另外,一定要看清楚我貼出來的命令,把我的目錄,換成你的目錄,不要直接拷貝,那是不行的,因為你不叫haibindev:)。如果有的庫在make的時候出現了編譯錯誤,簡單修改一下源檔案就能搞定。

  ffmpeg有很多配置選項,你可以對它深度定製,可以把avcodec編譯得很小,大家可以自己研究。

基於Ubuntu交叉編譯FFmpeg Windows SDK

相關文章

聯繫我們

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