日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

我自己的FFMpeg編譯之路

 londonKu 2012-04-30

為了編譯這個東西,快折騰了一個星期了。期間經(jīng)歷了很多痛苦的過程,今天我把整個過程,以及在這個過程的感悟?qū)懴聛?,以備日后查看,也希望能幫到一些像我一樣的兄弟姐妹?/p>

 

在這一個星期里前前后后加起來總共使用了3中方式編譯ffmpeg

1. 在基于linux內(nèi)核的操作系統(tǒng)中編譯。這種方式很簡單,也很順利。

2. 在windows下, 采用cygwin編譯,這種方法稍微復(fù)雜一點。

3. 在windows下,采用MinGW + MSys編譯,這種方法是這三個方法中最為復(fù)雜的一種。涉及的東西也最多,花費的時間也最長。

 

下面就這個三種方法詳細介紹一二。

我所選用ffmpeg source code 的版本是0.6,可以以下連接獲取。

 http://www./releases/ffmpeg-0.6.tar.gz

 

基于linux內(nèi)核的操作系統(tǒng)中編譯:

我所用的操作系統(tǒng)是ubuntu, 將下載ffmpeg的源碼放在/home目錄下面。或者你也可以用svn從服務(wù)器上checkout ffmpeg的代碼。ubuntu默認情況下是沒有安裝svn,但是你可以通過一個非常的簡單的命令就完成安裝,命令是sudo apt-get subversion。前提是你可以訪問因特網(wǎng)。這個過程大約需要幾分鐘,具體的時間跟你的網(wǎng)絡(luò)狀況有關(guān)系。

 

打開終端,進入ffmpeg目錄。依次輸入以下命令:

./configure --enable-memalign-hack --disable-debug

make

 

你也可以將2條命令合成一條,一次性執(zhí)行完成。

./configure --enable-memalign-hack --disable-debug && make

 

當(dāng)命令完成之后你就可以在ffmpeg的目錄下找到8個可執(zhí)行程序:

ffmpeg.exe

ffmpeg_g.exe

ffprobe.exe

ffprobe_g.exe

ffplay.exe

ffplay_g.exe

ffserver.exe

ffserver_g.exe

每個可執(zhí)行程序有一個_g的相對應(yīng)。這個帶調(diào)試信息的可執(zhí)行程序。

這樣編譯任務(wù)完成。

 

似乎很順利, 接下來我們輕松一下,用我們編譯出來的成果來看個電影,敲入如下命令:

./ffplay /media/downdriver/hly.mp4

 

然而我們被告知:

Could not initialize SDL library: No avaiable video device

 

這是怎么回事呢? 原來我的系統(tǒng)中沒有安裝x11的庫文件, 因此編譯出來的SDL庫就沒有加載視頻設(shè)備的能力了。那接下來我們首先下載對應(yīng)x11的庫文件,然后重新編譯SDL, 那么有沒有必要重新編譯ffmpeg呢, 沒有必要。

 

下載庫文件:

sudo apt-get install libx11-dev

 

下載必要的頭文件:

sudo apt-get install xorg-dev

 

安裝成功后,再次進入sdl源代碼目錄重新編譯, 不要忘了首先執(zhí)行:

make clean

 

接著是:

./configure

make && make install

 

再來一次:

./ffplay /media/downdriver/hly.mp4

 

呵呵,成功了,看到我們的視頻了...

 

 

通過windows + Cygwin編譯:

首先安裝Cygwin, 通過以下連接獲?。?/p>

http://www./setup.exe

 

這種方式的安裝過程,最復(fù)雜,和最耗時的就在安裝Cygwin上了。setup.exe下載非常簡單也很快,都不到1M. 但是這只是下載了安裝的包的客戶端。接下來的安裝是通過setup.exe從官方網(wǎng)站下載安裝包。速度會很慢,并且根據(jù)你所選的包種類,大小不一樣。如果全部選中那么你將要下載的總大小在六七百M以上。也許你覺得不大,但是當(dāng)我告訴你速度下載的速度很慢時,并且經(jīng)常會出現(xiàn)下載到半截就死活不動了。(至少在中國很慢,不光是我有這種感受,在網(wǎng)上看到很多人都有這個問題,甚至有位網(wǎng)友為了解決這個網(wǎng)速慢和下載不動的情況,自己研究一套方案)。并且如果全選安裝后會吃掉你兩三個G的空間。我們只是編譯ffmpeg,所以沒有必要全選,只選devel這個就可以了(忘了說怎么進行安裝,由于安裝向?qū)ё龅牟诲e,所以你只要按照向?qū)дf的一步一步往下走ok ,我這里只說其中關(guān)鍵的步驟)。另外在選mirror site的時候請選ftp://mirrors.kernel.org(如果你在中國這個網(wǎng)站可能會快一些)。為了下載我試過里面幾乎所有的網(wǎng)站,當(dāng)然如果你選用我推薦的這個網(wǎng)站,速度仍然很慢,你可以選用美國的那些鏡像。也許你會問我怎么知道那個是美國的鏡像,問得好,打開www.這個網(wǎng)站,這是cygwin的官方網(wǎng)站。在主頁的右面請點擊mirror site,那么現(xiàn)在你可以看到那些是美國的了。

 

好了,讓我們繼續(xù)。

假設(shè)你現(xiàn)在已經(jīng)安裝完成了cygwin的安裝。打開cygwin的命令窗口, 進入ffmpeg 的目錄。

鍵入 ./configure --enable-memalign-hack --disable-debug 然后回車

等待幾分鐘后,看到執(zhí)行成功,祝賀你。接下來我們要執(zhí)行的命令是make.

但是當(dāng)你輸入make后發(fā)現(xiàn),提示你make不認識。好,去 cygwin的bin目錄看看有沒有這個make.exe存在, 結(jié)果不存在,那我們?nèi)フ覀€一個最新的make.

這里有2個方法來解決這個問題,

1. 重新啟動cygwin的setup, 在安裝組件選擇界面中, 在最上方的文本框中輸入make, 下面就會相應(yīng)的顯示包,然后選擇安裝這個包,繼續(xù)完  成安裝.

2. 在網(wǎng)絡(luò)上找一個最新的make, 要求版本是3.81. 然后直接拷貝到 /cygwin/bin目錄.

好,現(xiàn)在再一次執(zhí)行命令make, 你會看到CC xxx, CC xxx之類的東西.說明已經(jīng)用gcc開始編譯了.

如果沒有什么編譯錯誤, 你可以在命令行的最后幾行看到ffmpeg.exe, ffserver.exe, ffprobe.exe

這說明成功了.

 

但是你會發(fā)現(xiàn)你沒有看到ffplay.exe

那是因為要編譯ffplay必須依賴于sdl庫,這同樣是一個opensource 的東西, 對應(yīng)的官網(wǎng)是http://www.. 這個庫負責(zé)一些輸入設(shè)備的事件以及界面的事情. 若想了解更多,請參看官網(wǎng).

 

接下來我們要做的是下載對應(yīng)的源代碼,編譯,安裝.

首先下載源代碼:

http://www./release/SDL-1.2.14.tar.gz

下載完畢后拷貝到 /cygwin/home/下面.然后cygwin的窗口中進入home目錄, 接著輸入tar -szvf sdl-1.2.14.tar.gz  這個命令是用來解壓我們剛才下載的文件的. 解壓完畢后, cd sdl-1.2.14進入sdl的源代碼目錄. 執(zhí)行sh autogen.sh, 大約一分鐘后, 你會看到 you are ready to run confingure. 這個表示剛才那條命令執(zhí)行成功了. 并且告訴你下一條命令是configure. 好接下來我們輸入./configure命令.

這個需要幾分鐘的時間. 我在執(zhí)行這條命令時出錯,

***Your compiler (gcc) does not produce Win32 executables

google了一下, 找到一個解決辦法:

是在一個老外的網(wǎng)站看到的, 他是這樣寫的

$ chmod 755 /usr/bin/set-gcc-default-3.sh
$ /usr/bin/set-gcc-default-3.sh

但是當(dāng)輸入第一條命令后, 錯了, 說找不到set-gcc-default-3.sh. 我們?nèi)?yīng)目錄找找, 果然沒有. 并且usr目錄下竟然沒有bin這個目錄. 我猜是不是在/cygwin/bin下面, 果然在那里找到了. 從這個可以看到開源代碼一個很大的問題, 版本很穩(wěn)定. 變化很大. 也許我的這個編譯文檔過幾個月可能就不能用了.好了回到主題.

當(dāng)編譯完畢后需要將gcc的版本切換回來, 切換回4的命令如下:

$ chmod 755 /usr/bin/set-gcc-default-4.sh
$ /usr/bin/set-gcc-default-4.sh

這個命令是的作用是將gcc的版本轉(zhuǎn)換為3, 當(dāng)前版本是4. 因為sdl要求的環(huán)境是3的.

接下來就是

make

make install

 

如果上面的命令執(zhí)行都沒有錯誤的話, 接下來我們要做的就是重來編譯我們的ffmpeg, 就是進入ffmpeg的目錄,執(zhí)行

./configure --enable-memalign-hack --disable-debug

make

這里有個小技巧, 可以幫助我們在不執(zhí)行make命令的情況下, 判斷執(zhí)行make命令后我們能不能得到ffplay. 畢竟make需要超過10分鐘的時間. 就是在configure命令執(zhí)行完畢后查看結(jié)果的最初20行左右, 找到sdl support, 如果它的右邊寫的是yes, 那就說明我們可以得到ffplay,如果是no, 那就得不到ffplay.

我的結(jié)果是yes, 接下來執(zhí)行make, 還是有錯誤, __assert 沒有定義之類的錯誤.有人說把對應(yīng)的libavformat等文件下 .a文件刪除.然后用

./configure --enable-memalign-hack --disable-debug --enable-shared --disable-static

如果要編譯出ffserver,還需要加上--enable-network --enable-protocols --enable-muxers

到這里在cygwin下面的編譯就通過了.

 

順便解釋一下,如果你要編譯出動態(tài)庫,就要加上

--enable-shared

--enable-static

 

另外, --enable-memalign-hack是指編譯時,使用內(nèi)存對齊方式,這樣以便編譯時用mmx或者sse指令對代碼進行優(yōu)化。


make install

在這種編譯方式下是把編譯出來的文件拷貝到C:\cygwin\usr\local\bin目錄,要看你的cygwin安裝到什么地方,我的安裝在c盤,所以是C:\cygwin\。如果是后面的一種編譯方式,則是將編譯出來的文件拷貝到msys的安裝目錄,如我的是安裝到c盤,就是c:\msys\local\bin

 

ffmpeg編譯時,還可以根據(jù)你cpu 核心的個數(shù),進行編譯時間的優(yōu)化,也就是說當(dāng)你指定你的cpu為雙核時,比你不指定編譯要快。例如指定2核心時:

make -j2

 

 通過windows + MinGW + MSYS編譯

這種編譯方式最為復(fù)雜, 也是花去我時間最多的一種.

首先去MinGW的官網(wǎng)下載安裝包.

官網(wǎng)是 www.

安裝包的連接:

http://cdnetworks-kr-1.dl./project/mingw/Automated%20MinGW%20Installer/MinGW%205.1.6/MinGW-5.1.6.exe

如果不可用去

http:///projects/mingw/

下載.

MSYS的下載地址:

http://downloads./mingw/MSYS-1.0.10.exe

接下來就是安裝mingw和msys.安裝順序一定要是先安裝mingw再安裝msys.因為在安裝msys的過程中要你指定mingw的安裝目錄.

mingw的安裝沒有什么可說的, 就是采用默認安裝, 不要更改它的默認目錄, c:/mingw. 接下來安裝msys.

msys安裝過程中會問你是否已經(jīng)安裝了mingw, 敲入y然后回車

接著讓你輸入mingw的安裝目錄, 輸入c:/mingw, 注意是反斜扛.

這樣我們環(huán)境似乎準(zhǔn)備好了(之所以這么說, 是因為我們在后面編譯的過程中會發(fā)現(xiàn)很多問題). 那么開始我們的編譯之旅吧.

在開始菜單中依次找到mingw->msys->msys.打開shell環(huán)境.

同樣需要進入ffmpeg目錄. 有些人直接把ffmpeg拷貝到mingw的home目錄, 這樣進入ffmpeg目錄很簡單. 只要在打開shell窗口后,輸入cd ffmpeg-0.6(這里ffmpeg-0.6是我放置ffmpeg的目錄). 就可以編譯了. 我是放在D盤. 因為本人不喜歡在系統(tǒng)盤下放太多的東西. 為了進入本人的ffmpeg目錄需要這樣:

cd /d

cd downloadcode

cd ffmpeg-0.6

這里 /d 代表進入d盤, 接著downloadcode文件夾, 再進入ffmpeg-0.6

從這里可以看出在cygwin的shell下面和msys的shell下面還是有點不一樣.

 

好了, 我們執(zhí)行

./configure --enable-memalign-hack --disable-debug

沒有出錯

接著輸入

make

告訴我make不認識, 看來遇到的是和windows+cygwin下面同樣的問題, 用同樣的方法解決.

成功的執(zhí)行完make后, 回到我們的ffmpeg文件下面看看, 編譯出來哪些東西.

發(fā)現(xiàn)只有ffprobe.exe ffmpeg.exe

沒有ffplay.exe, ffserver.exe

google后發(fā)現(xiàn), 有個老外碰到同樣的問題, 并給出了解決辦法. 從sdl的官網(wǎng)下載已經(jīng)編譯好的dll,連接如下:

http://www./release/SDL-devel-1.2.14-mingw32.tar.gz

然后解壓, 將其中的bin, lib, include 3個文件夾拷貝到mingw的目錄下, 當(dāng)詢問是否覆蓋, 選擇是.

到bin目錄找到sdl-config.用ultraedit打開. 將PREFIX=后面的值改為c:/mingw

 

接下來, 編譯, 成功獲得ffplay.exe.

打開windows命令窗口(cmd.exe). 經(jīng)入ffmpeg目錄, 執(zhí)行ffplay.exe, 發(fā)現(xiàn)崩潰了, 提示gcc的版本太舊, 我暈, 真是有點太繁瑣了, 從網(wǎng)站下載最新的gcc集合. 連接如下:

http://cdnetworks-kr-1.dl./project/tdm-gcc/TDM-GCC%20Installer/tdm-gcc-4.5.0.exe

安裝后在c盤下找到mingw32文件夾, 這就是我們剛才安裝gcc, 進入目錄將bin, inlude, lib 3個文件夾拷貝到mingw的目錄下, 當(dāng)詢問是否覆蓋, 選擇是.

 

再一次重新編譯.

在dos窗口輸入:

ffplay f:/coacol.mp4

回車. 呵呵, 看看到播放畫面了.

 

不過, 還有問題, 我們沒有編出ffserver.exe. google一下, 發(fā)現(xiàn)要解決這個非常困難. 要自己改腳本文件. 好像沒有幾個人去這樣做. 因此決定放棄. 想在windows自己編譯出ffserver只能用cygwin了.

 

到此. 整個編譯過程完畢.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多