用VS2013編譯FFMPEG232
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