<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    在Windows下編譯FFmpeg詳細說明

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    MinGW:一個可自由使用和自由發布的Windows特定頭文件和使用GNC工具集導入庫的集合,允許你生成本地的Windows程序而不需要第三方C運行時

     

    MinGW,即 Minimalist GNU For Windows。它是一些頭文件和端口庫的集合,該集合允許人們在沒有第三方動態鏈接庫的情況下使用 GCC產生 Windows32 程序。

     

    開發 MinGW 是為了那些不喜歡工作在 Linux(FreeBSD) 操作系統而留在 Windows 的人提供一套符合 GNU 的 GNU 工作環境。

    所以,使用 MinGW 我們就可以像在 Linux 下一樣使用 GNU 程序開發工具。 

    Minimal GNU(POSIX)system on Windows,是一個小型的GNU環境,包括基本的bash,make等等。是Windows下最優秀的GNU環境。

    ---------------------------------------搭建-------------------------------------------------

    感謝軟件業的告訴發展,可以讓菜鳥們更容易地學習和搭建運行環境。

    本來搭建MinGW+MSys環境是一件麻煩事,可是新版本的MinGw直接安裝就可以使用。下面是WinGW的網頁http://www.mingw.org/wiki/InstallationHOWTOforMinGW.在里面下載最新版本的MinGW可以直接搭建MinGW+MSys環境。

    以下的小修改,為了實現ffmpeg的編譯。

    3)修改“msys.bat”
      用文本編輯器打開X:\msys\msys.bat,由于打算用MSVC++編譯程序,所以需要有.lib文件才能鏈接到FFmpeg的庫,這些.lib文件可以使用微軟的工具鏈中lib命令產生。為此,機器上必須已經安裝了微軟的Visual Studio或是Visual C++。把下面一行加到msys.bat的最前面,把路徑替換成機器上vcvars32.bat實際存在的路徑,比如我的在“D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin”,于是就添加:
      call "D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat"

     

    4)系統整合
      復制X:\msys\etc\fstab.sample為X:\msys\etc\fstab,用文本編輯器打開X:\msys\etc\fstab編輯。(需要使用一個支持Unix換行風格的編輯器,比如Notepad++),把下面這行:
      X:/mingw /mingw
      改為:
      X:/msys/mingw /mingw

    好了,環境搭建完畢。進入編譯ffmpeg階段。

    --------------------------------------編譯--------------------------------------------------

    3.      編譯,獲取FFMPEG庫(頭文件,lib,和DLL)

    首先通過MSys安裝目錄下的msys.bat啟動MSys,這時會出現一個命令行窗口,它是一個運行著bash的rxvt程序,如下圖:

    圖2

    這是一個類似Linux的shell并且在Windows上運行,就像是在使用一個真正的Linux shell。不過使用這個shell時需要注意:
      →目錄名使用正斜杠來分割,而不是Windows所使用的反斜杠(比如說要寫成"D:/ffmpeg"而不是"D:\ffmpeg")。
      →盤符(例如"C:\")可以從根目錄處訪問(像這樣"/C/")。
      →文件名或目錄名中如果帶有空格,必須用雙引號括起(例如這樣"/C/Program Files",帶有雙引號)。
      下面切換到存放FFmpeg源代碼的目錄(假如你的代碼解壓之后的路徑是D:\ffmpeg),方法是輸入:"cd /D/ffmpeg"。
      接下來要配置FFmpeg,選擇編譯時包含的庫,這里先輸入:
      ./configure --enable-shared --disable-static --enable-memalign-hack
      --enable-memalign-hack選項是FFmpeg在Windows上編譯成功所必須指定的,待配置完成后,將回到命令提示符,看到下圖所示的畫面:

    圖3

    如果沒有錯誤的話,就可以"make"具有基本功能的FFmpeg了,在提示符后輸入:make。
      編譯的過程將持續很長時間。如果一切正常,結束后將返回提示符,并有如下的最后編譯結束的輸出畫面:

    最后獲取編譯生成的ffmpeg庫(頭文件,lib,dll) 

    在提示符后輸入:make install。 

    執行完后會生成幾個文件下在MSys目錄的local文件夾下。目錄如: 

    4.      在VC下配置(這個指如何在VC中調用ffmpeg庫),測試

    VC環境配置:(假如目錄為上圖所示)

    方法當然就像其他額外庫一個,一種是設置VC全局的Include路徑為你E:\msys\local\include,設置VC全局lib路徑為E:\msys\local\bin,增加操作系統的一個Path

    E:\msys\local\bin。另一種就是設置某個工程的lib和Include的路徑。增加一個指向上面對應的地址。這個我就不是說的詳細,想必玩VC的都知道。

     

    首先 建一個VC的控制臺工程,然后把E:\ffmpeg\libavcodec\api-example.c(ffmpeg的存放目錄)拷貝到你建的那個工程。然后改名api-example.cpp。編譯。你會發現卻頭文件。這個時候你需要將E:\msys\mingw\include(mingw安裝目錄下的include)的inttypes.h,stdint.h,_mingw.h三個文件拷到E:\msys\local\include(你ffmpeg庫的目錄下的include)。編譯還是有很多錯。

    1.       需要在inttypes.h中 #define __restrict__ __restrict

    2.       如果是long long 錯誤就改成__int64

    3.       c->time_base.den= (AVRational){1,25}; 改成    c->time_base.num = 1; c->time_base.den = 25;//

    4.       最上面的頭文件定義如下:

    #include <math.h> // 注意這個別忘了,不然會出現math模板的一個錯誤

    #include <stdlib.h>

    #include <stdio.h>

    #include <string.h>     

     

    extern "C"

    {

          #ifdef HAVE_AV_CONFIG_H

          #undef HAVE_AV_CONFIG_H

          #endif

                

          #include <libavcodec\avcodec.h>

          #include <libavutil\mathematics.h>

     

          #pragma comment(lib, "avcodec.lib")

          #pragma comment(lib, "avutil.lib")

    }

     

    最后編譯應該是不沒有錯誤了。里面由于有些測試的視頻文件沒有,所以代碼執行起來也看不出什么效果。用上面的一個代碼,就是僅僅為了測試,然后告訴我們使用我們已經編譯好的ffmpeg庫還需要做那么的操作。

     

    (以上大部分轉載于該空間http://apps.hi.baidu.com/share/detail/20685063,感謝他的無私奉獻)

     

     

    【前言】

    本文參考網上大量資料,經整理而成,并經實踐驗證,最后更新日期2010年3月11日。另外本人使用開發工具為Delphi,不會VC,所以沒有編譯VC相關的lib庫部分。

    本文搭建MinGW+MSYS環境路徑分別假設為C:\MinGW和C:\MSYS,并且為純手工安裝,即下載相應的壓縮包,直接解壓到相應目錄。

    本文鏈接——http://www.codecoolie.com/ffmpeg/compile-ffmpeg-under-windows/

    本文作者——CodeCoolie

    【簡介】

    ■FFmpeg

    http://www.ffmpeg.org

    FFmpeg是一套用于錄制、轉換和流化音頻、視頻的完整解決方案,其中包含一組叫做libavcodec的領先的音頻、視頻編碼解碼庫。FFmpeg雖然是在Linux平臺下開發的,但可以在包括Windows在內的大多數操作系統下進行編譯。

    ■MinGW

    http://www.mingw.org

    在Windows下編譯FFmpeg所需編譯環境是MinGW,是Minimalist GNU for Windows的縮寫。MinGW包含Windows平臺頭文件、GCC、以及一些GNU工具。

    ■MSYS

    http://www.mingw.org/wiki/msys

    MSYS是MinGW的Shell環境,是Minimal SYStem的縮寫。MSYS提供了一些開發工具,如make等。

    【編譯環境】

    ■MinGW

    http://sourceforge.net/projects/mingw/files/

    下載如下壓縮包:

    GNU Binutils:binutils-2.20.1-2-mingw32-bin.tar.gz
    MinGW Runtime:mingwrt-3.18-mingw32-dev.tar.gz
    MinGW API for MS-Windows:w32api-3.14-mingw32-dev.tar.gz
    GCC Version 4:gcc-core-4.2.1-sjlj-2.tar.gz(GCC 4.4有bug,將x264、xvid等與ffmpeg一起編譯時候GCC會崩潰)

    將上述壓縮包按順序解壓到同一個目錄下即可,例如解壓到C:\MinGW

    復制或重命名如下文件,其實就是去掉sjlj后綴:

    從C:\MinGW\bin\gcc-sjlj.exe到gcc.exe

    NOTICE:libiberty.a使用GNU Binutils包里較新的,而不是GCC Core包里的

    ■MSYS

    http://sourceforge.net/projects/mingw/files/

    下載如下壓縮包:

    msysCORE-1.0.11-bin.tar.gz
    msysCORE-1.0.13-2-msys-1.0.13-bin.tar.lzma
    make-3.81-2-msys-1.0.11-bin.tar.lzma
    coreutils-5.97-2-msys-1.0.11-ext.tar.lzma(只需要pr.exe,configure ffmpeg時候用到)
    vim-7.2-1-msys-1.0.11-bin.tar.lzma(不打算使用vi可以不裝)

    將上述壓縮包按順序解壓到同一個目錄下即可,例如解壓到C:\MSYS

    ■MinGW+MSYS

    編輯C:\MSYS\etc\fstab文本,指定MinGW在MSYS下的掛接目錄

    C:/MinGW /mingw

    ■yasm

    編譯x264時候需要

    http://www.tortall.net/projects/yasm/

    下載:http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz

    解壓,編譯安裝:

    ./configure –prefix=/mingw
    make
    make install

    【基本庫】

    ■zlib

    http://sourceforge.net/projects/mingw/files/

    下載如下壓縮包:

    MinGW zlib:libz-1.2.3-1-mingw32-dev.tar.gz

    將其解壓到C:\MinGW

    刪除C:\MinGW\lib\libz.dll.a(否則會使用動態鏈接,需要libz.dll)

    ■bzip2

    http://sourceforge.net/projects/mingw/files/

    下載如下壓縮包:

    MinGW bzip2:bzip2-1.0.5-2-mingw32-dev.tar.gz

    將其解壓到C:\MinGW

    刪除C:\MinGW\lib\libbz2.dll.a(否則會使用動態鏈接,需要libbz-2.dll)

    ■SDL

    http://www.libsdl.org/

    編譯ffplay時候需要

    下載:http://www.libsdl.org/release/SDL-devel-1.2.13-mingw32.tar.gz

    解壓,修改Makefile:CROSS_PATH := /mingw

    編譯安裝:make cross

    【FFmpeg基本編譯】

    源碼取得:svn://svn.mplayerhq.hu/ffmpeg/trunk

    配置編譯:假設安裝路徑為/FFmpeg/Release

    ./configure –prefix=/FFmpeg/Release –enable-memalign-hack
    make
    make install

    【編解碼庫】

    假設第三方庫安裝路徑為/olibs

    ■libgsm

    GSM support via libgsm

    GSM 06.10 lossy speech compression

    http://user.cs.tu-berlin.de/~jutta/toast.html

    下載gsm-1.0.12.tar.gz

    解壓,修改Makefile中的CC = gcc -ansi -pedantic為CC = gcc

    編譯安裝:

    make

    編譯到后來會出錯,但庫已經編譯完成,用如下命令拷貝即可

    cp lib/libgsm.a /olibs/lib/
    cp inc/gsm.h /olibs/include/gsm/

    ffmpeg編譯參數:–enable-libgsm

    ■libmp3lame

    MP3 encoding via libmp3lame

    http://sourceforge.net/projects/lame/files/

    下載lame-3.98.3.tar.gz

    解壓,修改lame-3.98-3/libmp3lame/i386/Makefile.in中下面這行

    $(ECHO) “non_pic_object=’$*.o’” >>$@

    $(ECHO) “non_pic_object=’ .libs/$*.o’” >>$@

    編譯安裝:

    ./configure –prefix=/olibs –disable-shared –enable-static –disable-frontend
    make
    make install

    ffmpeg編譯參數:–enable-libmp3lame

    ■opencore-amr

    AMR-NB de/encoding、AMR-WB decoding via libopencore-amrnb

    http://sourceforge.net/projects/opencore-amr/

    下載opencore-amr-0.1.1.tar.gz(0.1.2編譯需要g++、libstdc++.dll.a)

    解壓,注釋掉以下Makefile中的幾行

    ./opencore-amr/amrnb/Makefile
    install: libopencore-amrnb.a $(SHLIB)
    install -d $(DESTDIR)$(PREFIX)/lib
    install -m 644 libopencore-amrnb.a $(DESTDIR)$(PREFIX)/lib
    # install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
    ifneq ($(shell uname), Darwin)
    # ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
    # ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrnb.so
    endif

    ./opencore-amr/amrwb/Makefile
    install: libopencore-amrwb.a $(SHLIB)
    install -d $(DESTDIR)$(PREFIX)/lib
    install -m 644 libopencore-amrwb.a $(DESTDIR)$(PREFIX)/lib
    # install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
    ifneq ($(shell uname), Darwin)
    # ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
    # ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrwb.so
    endif

    編譯安裝:

    make CC=gcc
    make install PREFIX=/olibs

    ffmpeg編譯參數:–enable-version3 –enable-libopencore-amrnb –enable-libopencore-amrwb

    ■libogg

    供libvorbis和libtheora用

    http://www.xiph.org/downloads/

    下載libogg-1.1.4.tar.gz

    解壓,編譯安裝:

    ./configure –prefix=/olibs –disable-shared
    make
    make install

    ■libvorbis

    Vorbis encoding via libvorbis

    http://www.xiph.org/downloads/

    下載libvorbis-1.2.3.tar.gz

    解壓,編譯安裝:

    ./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
    make
    make install

    ffmpeg編譯參數:–enable-libvorbis

    ■libtheora

    Theora encoding via libtheora

    http://www.xiph.org/downloads/

    下載libtheora-1.1.1.zip

    解壓,編譯安裝:

    ./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
    make
    make install

    ffmpeg編譯參數:–enable-libtheora

    ■libx264

    H.264 encoding via x264

    http://www.videolan.org/developers/x264.html

    ftp://ftp.videolan.org/pub/videolan/x264/snapshots/

    下載最新的源碼包

    解壓,編譯安裝:

    ./configure –prefix=/olibs
    make
    make install

    ffmpeg編譯參數:–enable-gpl –enable-libx264

    ■libxvid

    Xvid encoding via xvidcore

    http://www.xvid.org/

    下載xvidcore-1.2.2.tar.gz

    解壓,修改:

    ./build/generic/configure: “libxvidcore. <- “xvidcore.

    編譯安裝:

    cd xvidcore/build/generic
    ./configure –prefix=/olibs –disable-shared
    make
    make install

    刪除/olibs/lib/libxvidcore.dll

    ffmpeg編譯參數:–enable-gpl –enable-libxvid

    ■libfaac、libfaad

    ffmpeg內置已經支持aac編碼、解碼,不需要libfaac、libfaad了,而且libfaac是nonfree的,nonfree是unredistributable即禁止發布

    【FFmpeg高級編譯】

    假設安裝路徑為/FFmpeg/Release,假設第三方庫所在路徑為/olibs

    配置編譯:

    ./configure \
    –prefix=/FFmpeg/Release \
    –disable-debug \
    –disable-static \
    –enable-shared \
    –enable-gpl \
    –enable-version3 \
    –enable-avfilter \
    –enable-avfilter-lavf \
    –enable-memalign-hack \
    –enable-avisynth \
    –enable-libgsm \
    –enable-libmp3lame \
    –enable-libopencore-amrnb \
    –enable-libopencore-amrwb \
    –enable-libtheora \
    –enable-libvorbis \
    –enable-libx264 \
    –enable-libxvid \
    –extra-cflags=-I/olibs/include \
    –extra-ldflags=-L/olibs/lib
    make
    make install

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全