windows下搭建ffmpeg环境
在windows下编译ffmpeg可以采用cygwin或msys+mingw两种方案,我个人比较喜欢msys+mingw方式,因为这样可以在windows下搭建一个类Unix操作系统,并且配置比cygwin要简单,因此本就是描述怎样建立msys+mingw的环境。
在windows下搭建ffmpeg编译环境在网上的文章很多,最为详细的可能是这篇文章:http://ffmpeg.arrozcru.org/wiki/index.php?title=Main_Page。但是在由于版本问题,完全按照上面的描述是通不过的。
- 到http://sourceforge.net/projects/mingw/files/下载最新版MinGW安装程序,我的是MinGW-5.1.6.exe
- 到http://sourceforge.net/projects/mingw/files/MSYS%20Base%20System/msys-1.0.11/MSYS-1.0.11.exe/download下载MSYS-1.0.11,注意当前MSYS已经是1.0.14版,但是从1.0.11版之后,就再也没有安装程序了
- 到http://prdownloads.sourceforge.net/mingw/coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2?download下载coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2
- 运行MinGW-5.1.6.exe,注意选择安装g++和make,并将安装目录指定到c:\msys\mingw,该程序将自动下载并安装mingw系统,注意此时的gcc版本为3.4.5
- 运行MSYS-1.0.11.exe安装msys到c:\msys目录
- 解压并将coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2复制到c:\msys目录下,并选择合并目录,遇到冲突文件时选择保留两份
- 此时基本系统应该已经建成,编写一个test.c的hello world程序应该可以编译通过并正常运行
- 安装工具软件:
- wget.exe:拷贝到c:\msys\bin目录下
- 到ftp://ftp.info-zip.org/pub/infozip/win32/下载unzip程序unz600xn.exe,在临时目录下运行该程序,将unzip.exe拷贝到c:\msys\bin目录下
- 到http://www.tortall.net/projects/yasm/wiki/Download下载yasm-0.8.0-win32.exe,拷贝到c:\msys\mingw\bin目录下并重命名为yasm.exe
- 安装msysgit到c:\software目录
- 下载x264程序:/c/software/Git/bin/git clone git://git.videolan.org/x264.git
- 编译x264程序:./configure --prefix=/home/yantao/cic/static,然后运行make和make install
- 下载AMR支持:http://sourceforge.net/projects/opencore-amr/files/opencore-amr/0.1.2/opencore-amr-0.1.2.tar.gz/download
- 编译:./configue --prefix=/home/yantao/cic/static --enable-static,然后make和make install
- 下载SDL:http://www.libsdl.org/download-1.2.php
- 编译:./configure --prefix=/home/yantao/cic/static --enable-static --disable-shared
- 此时证明当前gcc 3.4.5环境配置基本正确,但是ffmpeg必须在gcc 4以上编译才能解决dll文件可以在VC中链接及异常退出等BUG,因此需要将gcc升级到最新系统,到sourceforge
- 升级msys bash:从http://sourceforge.net/projects/mingw/files/下载最新版bash,这里是bash-3.1.17-2-msys-1.0.11-bin.tar.tar,利用解压工具解开,将内容拷贝到c:\msys\bin目录下
- 升级msys coreutil:从http://sourceforge.net/projects/mingw/files/下载最新版coreutils-bin和coreutils-ext,这里是coreutils-5.97-2-msys-1.0.11-bin.tar.tar,利用解压工具解开,将内容拷贝到c:\msys\bin目录下
- 升级mingw binutils
- 升级mingw runtime dev
- 升级mingw runtime dll
- 升级mingw win32 api
- 升级gcc:下载所有gcc相关的下载项,尤其是dll项目,然后解压并拷贝到c:\msys\mingw目录下
- 从http://sourceforge.net/projects/mingw/files/的mingw proposed目录下下载libgmp-5.0.1-1-mingw32-dll-10.tar.tar并安装
- 从http://sourceforge.net/projects/mingw/files/的mingw proposed目录下下载libmpc-0.8.1-1-mingw32-dll-2.tar并安装
- 从http://sourceforge.net/projects/mingw/files/的mingw proposed目录下下载libmpfr-2.4.1-1-mingw32-dll-1.tar并安装
- 下载pthreads支持libpthread-2.8.0-3-mingw32-dll-2.tar.tar
- 为验证升级的正确性,首先确定能够正确编译test.c,然后重新编译x264、opencore-amr、SDL
- 将编译好的外部库拷贝到c:\msys\mingw\include及c:\msys\mingw\lib目录下,并注意修改每个pkconfig文件中的目录,将build4_5_0/bin目录下的sdl-config拷贝到mingw/bin目录下,并修改路径为/mingw
- 从ftp://sources.redhat.com/pub/pthreads-win32/prebuilt-dll-2-8-0-release/lib/下载pthreads补丁:包括include目录下的*.h及lib目录下的pthreadGC2.dll,将*.h文件拷贝到c:\msys\mingw\include目录下,将pthreadGC2.dll拷贝到c:\msys\mingw\bin及c:\msys\mingw\lib,同时拷贝到c:\msys\mingw\lib并改名为pthread.dll
- 编译ffmpeg:首先建ffmpeg目录,然后通过TortoiseSVN从svn://svn.mplayerhq.hu/ffmpeg/trunk下载最新代码,运行./configure --prefix=/home/yantao/cic/static --enable-static --disable-shared --enable-gpl --enable-libx264 --enable-pthreads --enable-nonfree --enable-opencore-amrnb --enable-opencore-amrwb --enable-version3 --enable-memalign-hack
- 修改libavformat/rtsp.c的1699行,将ETIME更改为ETIMEDOUT,修改mingw/include/errno.h文件,添加#define ETIMEDOUT 60定义
- 在mingw/include/sched.h的152行前添加typedef long pid_t;
- 运行make及make install
- 用带有AMR-NB的3gp文件测试ffplay.exe
- 测试视频捕捉