1. 程式人生 > >用VS2013編譯FFMPEG232

用VS2013編譯FFMPEG232

down logs ase speech svc 單步調試 app lan 出錯

http://blog.csdn.net/finewind/article/details/38854517

如果只是拿來使用,網上有現成的SDK。但我是想深入研究FFMPEG代碼,又不熟悉Linux開發環境,因此需要編譯一個在windos平臺下能用VS單步調試的FFMPEG,網上現有資料大部分都是基於很老的版本,不斷摸索,終於成功了。

之所以選擇VS2013,是因為VS2013支持大部分C99的特性,不需要改動代碼,也不需要使用C99轉C89的工具。

MinGW和yasm是繞不過去的,因為需要使用MinGW來生成config.h,而ffmpeg的匯編語法和VS的不一樣,因此需要yasm。

具體步驟:

1. 下載FFMPEG源碼,下載地址:http://ffmpeg.zeranoe.com/builds/;

2. 下載MinGW安裝器,下載地址:http://www.mingw.org/;下載完成後安裝,安裝完成後點運行,標記上以下幾項:

技術分享

然後在Installation菜單下點擊Apply Changes(mingw32-gcc-g++不用選擇);

3. 下載yasm,下載地址: http://yasm.tortall.net/ ;下載後改名為yasm.exe,復制到C:/MinGW/msys/1.0/bin目錄下;

4. 配置C:/MinGW/msys/1.0/msys.bat,在此文件的最前面(@echo off之後)添加一行如下內容:

call "D:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat" (依實際安裝路徑修改路徑);

5.重命名 C:/MinGW/msys/1.0/bin/link.exe 為link_renamed.exe (依實際安裝選擇路徑),這一步是防止這個link.exe與vc的link.exe發生沖突,編譯完成後可修改回來;

6. 配置編譯,雙擊msys.bat,轉到FFMPEG源代碼根目錄下,可運行 ./configure --help查看編譯配置選項,我使用的選項為:

靜態庫:./configure --enable-static --prefix=./vs2013_build --enable-debug --toolchain=msvc
動態庫:./configure --enable-shared --prefix=./vs2013_build --enable-debug --toolchain=msvc

等待配置完成返回;

7. 輸入 make all 編譯;

8. 輸入make install安裝。

完成,此時生成的頭文件及庫已經在ffmpeg源代碼下的vs2013_build目錄下,使用這個庫,即可在VS下單步進入FFMPEG函數內部。

參考資料:

http://ffmpeg.org/platform.html#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows

http://www.cnblogs.com/xylc/p/3683203.html

在Windows下編譯FFmpeg詳細說明

http://blog.csdn.net/lipengyao2010/article/details/52317243


■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

用VS2013編譯FFMPEG232