因项目需要,需要在vs2010下裁剪ffmpeg,使得它只支持h264解码。
VS2010编译的工具和结果:https://download.csdn.net/download/shenhaiboqq/10571844
1、准备一下工具
(1)Visual Studio vs2010
(2)ffmpeg下载:可以到官网:http://ffmpeg.org/releases/ 下载,我使用的是ffmpeg-3.0.1版本
(3)MinGW : http://www.mingw.org/ ,运行下载的MinGW安装管理器,包含msys。假设安装好后MinGW路径为:C:/MinGW ,则msys路径应为:C:/MinGW/msys 。将:C:/MinGW/bin和C:/MinGW/msys/1.0/bin加到系统path环境变量中;
安装可以参考:https://blog.csdn.net/cclovepl/article/details/70520412
(4)yasm : http://yasm.tortall.net/ ,(for general use on 32-bit Windows), 改名叫yasm.exe,复制到:C:/MinGW/msys/1.0/bin 目录下;
(5)c99-to-c89 : https://github.com/libav/c99-to-c89/downloads , 将c99conv.exe和c99wrap.exe复制到:C:/MinGW/msys/1.0/bin 目录下;
(6),C99头文件inttypes.h和stdint.h : http://code.google.com/p/msinttypes/downloads/list ,将此两个头文件复制到: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include 目录下(自行修改为自己的安装目录);
2、配置
1,复制:d/MinGW/msys/1.0/msys.bat 到同目录下,改名叫做msys_vs2010.bat,在msys_vs2010.bat开头部分添加:call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat" ;
2,重命名 C/MinGW/msys/1.0/bin/link.exe 为link_renamed.exe ,这一步是防止这个link.exe与vc的link.exe发生冲突,编译完成之后记得修改回来;
3,打开msys_vs2010.bat,切换到ffmpeg目录下。
3、配置编译
1,配置:ffmpeg编译配置选项很丰富,详细请运行“./configure --help > ffmpegcfg.txt ”查看其选项。这里我的选项是:
./configure --enable-static --prefix=./vs2010_build --toolchain=msvc --disable-encoders --disable-debug --disable-protocols --disable-decoders --enable-decoer=h264 --disable-outdevs --disable-filters --disable-doc --disable-bsfs --disable-demuxers --enable-demuxer=h264 --disable-muxers --enable-muxer=h264 --disable-indevs --disable-parsers --enable-parser=h264
运行./configure之前先修改:configure文件下的 cc_default的cl改为c99wrap cl
msvc)
# Check whether the current MSVC version needs the C99 converter.
# From MSVC 2013 (compiler major version 18) onwards, it does actually
# support enough of C99 to build ffmpeg. Default to the new
# behaviour if the regexp was unable to match anything, since this
# successfully parses the version number of existing supported
# versions that require the converter (MSVC 2010 and 2012).
cl_major_ver=$(cl 2>&1 | sed -n 's/.*Version \([[:digit:]]\{1,\}\)\..*/\1/p')
if [ -z "$cl_major_ver" ] || [ $cl_major_ver -ge 18 ]; then
cc_default="c99wrap cl"
else
cc_default="c99wrap cl"
fi
执行./configure后会出现下面错误:
e:\shb\ffmpeg\ffmpeg-3.0.1_727\ffmpeg-3.0.1\libavutil\x86/intmath.h(58) : error
C4013: “_tzcnt_u32”未定义;假设外部返回 int
make: *** [libavdevice/alldevices.o] Error 1
修改configure.h文件:
#define HAVE_FAST_CLZ 1改为#define HAVE_FAST_CLZ 0
2,编译:make & make install ;
3,编译结果在vs2010_build 下。