windows下编译ffmpeg是个费尽的事情,本文主要参考以下文章
http://blog.youkuaiyun.com/jszj/article/details/4028716,需要下载的软件原文都给出了链接,最后结合自己的开发过程总结。
1.下载ffmpeg源代码
下载网址:svn://svn.mplayerhq.hu/ffmpeg/trunk首先需要安装svn客户端,我用的是TortoiseSVN,应该是可以很方便地从网上下载,下载之后安装。
安装之后,在你要保存ffmpeg源代码的位置上点右键,然后选择check out,输入以上的网址,包括前面的“svn:”,然后点OK按钮,它会把整个源代码下到本地,根据网速,可能几秒钟到几十分钟不等。
2. 安装windows下的编译系统
2.1 安装MSys
首先下载以下软件:
• MSYS-1.0.11-2004.04.30-1.exe
• MSYS-1.0.11-20080821-dll.tar.gz
• bash-3.1-MSYS-1.0.11-snapshot.tar.bz2
• coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2
• make-3.81-MSYS-1.0.11-2.tar.bz2
安装MSYS-1.0.11-2004.04.30-1.exe 的最后会出现一个dos窗口,大意是让用户选择是否让msys自己提交install,输入n后回车,以表示我们不允许msys自己进行这个操作。
为了方便后面的叙述,我们假设msys安装到了默认的目录c:/msys/1.0下。
执行如下操作:
1.解压MSYS-1.0.11-20080821-dll.tar.gz 到c:/msys/1.0下,覆盖原目录.
2.解压bash-3.1-MSYS-1.0.11-snapshot.tar.bz2 后,从解压出的目录中,bin下拷贝sh.exe到c:/msys/1.0/bin下,如果原来存在,则覆盖之,这个解压后的目录可以删除.
3.解压 coreutils,然后拷贝解压出来的 coreutils-5.97/bin/pr.exe 到c:/msys/1.0/bin中解码make-3.81-MSYS-1.0.11-2.tar.bz2 到c:/msys/1.0下,如果有文件存在,则覆盖它们为了产生正确的库文件,需要修改c:/msys/1.0/msys.bat:
使用记事本打开该文件,然后在其最开始处添加:
call "C:/Program Files/Microsoft Visual Studio 9.0/VC/bin/vcvars32.bat"
注意:这一行必需处在此文件的最开始处,同时修改你的vc路径,指定vc的vcvars32.bat文件位置并招待它
2.2 安装MinGW
下载以下6个安装包:
• binutils-2.18.50-20080109-2.tar.gz
• mingwrt-3.15.1-mingw32-dll.tar.gz
• mingwrt-3.15.1-mingw32-dev.tar.gz
• w32api-3.13-mingw32-dev.tar.gz
• gcc-core-3.4.5-20060117-1.tar.gz
• gcc-g++-3.4.5-20060117-1.tar.gz
解压以上6个到c:/msys/1.0/mingw中,如果有重复的,则覆盖掉。
2.3 整合MinGW 和 msys系统
这一步非常简单,修改c:/msys/1.0/etc/fstab.sample的名称为:fstab,即把括展名直接去掉,然后用记事本打开,修改
c:/mingw /mingw
为
c:/msys/1.0/mingw /mingw
然后保存即可,修改的内容应该是自己的安装路径。
2.4 安装yasm
直接把下载后重命名的yasm.exe放置到C:\msys\1.0\mingw\bin中
3.编译选项
首先启动msys,c:/msys/1.0/msys.bat在shell上的提示符下进入ffmpeg目录,如cd f:进入f盘。
编译一般是三个步骤,首先配置,然后编译,最后安装。如果是改变编译方式,则还要在配置之前先clean。我们这里是编译的静态库,编译选项配置如下:
./configure --prefix=./ffmpeg-sdk/ --enable-static --enable-gpl --enable-version3 --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --enable-w32threads --disable-network --enable-memalign-hack --disable-everything --enable-decoder=h264 --enable-decoder=mpeg2video --enable-parser=h264 --enable-encoder=mpeg2video --disable-debug
注意:红色部分是最终生成的文件路径。
然后make;
最后make install;
4.编译时的问题
1.需要配置相应的路径,将编译后生成目录配置到vc++包含目录和lib目录。
2.将C:\msys\1.0\mingw\include目录下的_mingw.h,inttypes.h,stdint.h三个文件复制到 编译生成目录下的include目录中,如我的是F:\ffmpeg\trunk\ffmpeg-sdk\include
3.由于编译问题,需要修改在最后一行的#endif /* __MINGW_H */前面添加#define __restrict__,如下
#define __restrict__
#endif /* __MINGW_H */
4.出现错误“UINT64_C”: 即使使用参数相关的查找,也未找到标识符,需要修改common.h文件,添加如下内容:
#ifndef INT64_C
#define INT64_C(c) (c ## LL)
#define UINT64_C(c) (c ## ULL)
#endif
5.如果出现包含的lib库不存在,则需要在C:\msys\1.0\mingw\lib中找到需要的lib,然后复制到包含目录中去。
最后祝大家好运,按照上面的过程应该是没有问题的。