Windows 下用 VS2015+MSYS 一键编译 FFMPEG 生成 FFPLAY
前提条件,你已经安装了可以编译FFMPEG的编译环境。
如果你还没有配置好编译环境,可以看这里:用VS2015编译FFMPEG
因为编译 ffplay 需要 sdl2 ,所以你首先的编译 sdl2。
从管网上下载 sdl2 源码,我下载的是 SDL2-2.0.5,zip
用VS2015 编译很容易,用 VS2015 打开 D:\SDL2-2.0.5\VisualC\SDL.sln 工程,直接编译就可以了。
工程有很多 test 工程,我们仅要编译 SDL2 就可以了。在工程管理器中,选中 sdl2 工程,右键选择编译,仅编译 SDL2 就可以了。
注意红色标识部分。
第一处标识,表示是一个VS2010工程,但我们也可以用VS2015打开。
第二处标识,表示我们仅编译这个 sdl2,其它的因为用不到,可以不编译。节约编译时间。
把 编译生成 sdl2.dll,sdl2.lib 和 include 目录下头文件复制到 d:\sdl2目录下:
D:\sdl2\SDL2.dll
D:\sdl2\include\...
...............................
D:\sdl2\include\...
D:\sdl2\lib\SDL2.lib
在任意位置,建立 bat 文件,build.bat,内容如下:
call "D:\Language\VS2015\VC\bin\vcvars32.bat"
set MSYS=D:\Language\MinGW32\msys\1.0\bin
if exist %msys%\sdl2-config del %msys%\sdl2-config
echo #! /bin/sh>>%msys%\sdl2-config
echo SDL_MAJOR_VERSION=2 >>%msys%\sdl2-config
echo SDL_MINOR_VERSION=0 >>%msys%\sdl2-config
echo SDL_MICRO_VERSION=5 >>%msys%\sdl2-config
echo includedir='D:\\\\SDL2\\\\include'>>%msys%\sdl2-config
echo SDL_CFLAGS=>>%msys%\sdl2-config
echo libdir='D:\\\\SDL2\\\\lib'>>%msys%\sdl2-config
echo SDL_RLD_FLAGS=>>%msys%\sdl2-config
echo SDL_LIBS="-lSDL2">>%msys%\sdl2-config
echo SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION>>%msys%\sdl2-config
echo while test $# -gt 0; do>>%msys%\sdl2-config
echo case $1 in>>%msys%\sdl2-config
echo --cflags)>>%msys%\sdl2-config
echo echo -I${includedir} ${SDL_CFLAGS}>>%msys%\sdl2-config
echo ;;>>%msys%\sdl2-config
echo --libs)>>%msys%\sdl2-config
echo echo /LIBPATH:${libdir} ${SDL_RLD_FLAGS} ${SDL_LIBS}>>%msys%\sdl2-config
echo ;;>>%msys%\sdl2-config
echo --version)>>%msys%\sdl2-config
echo echo ${SDL_VERSION}>>%msys%\sdl2-config
echo ;;>>%msys%\sdl2-config
echo esac>>%msys%\sdl2-config
echo shift>>%msys%\sdl2-config
echo done>>%msys%\sdl2-config
path=%MSYS%;%path%
set INCLUDE=%INCLUDE%
set LIB=%LIB%
cd\
E:
cd source\ffmpeg
bash -c "./configure --enable-gpl --enable-static --prefix=./vs2015 --toolchain=msvc"
bash -c "make all"
bash -c "make install"
pause
vs2015,msys 的安装路径安装你的实际路径修改。
ffmpeg 的源码目录,也按照你的实际路径修改。
执行 build.bat ,就开始编译了。
结束后,你会在 ffmpeg 源代码目录下的 vs2015 目录下,看见你要的ffmpeg 开发的 头文件、库文件,以及bin目录下的: ffmpeg.exe、ffplay.exe、ffprobe.exe。
把sdl2.dll 复制到 bin 目录下,ffplay.exe 就可以运行了。
编译OK。
生成的 libavcodec.a 等静态库文件VC可以直接引用。
将 ffmpeg 封装成一个dll文件,就轻而易举了。
用VS2015建立一个dll,工程名称:ffdec
在 ffdec.cpp 中添加如下内容:
#pragma comment(lib, "libavcodec.a")
#pragma comment(lib, "libavdevice.a")
#pragma comment(lib, "libavfilter.a")
#pragma comment(lib, "libavformat.a")
#pragma comment(lib, "libavutil.a")
#pragma comment(lib, "libpostproc.a")
#pragma comment(lib, "libswresample.a")
#pragma comment(lib, "libswscale.a")
#pragma comment(lib, "Strmiids.lib")
#pragma comment(lib, "Shlwapi.lib")
#pragma comment(lib, "Vfw32.lib")
#pragma comment(lib, "Ws2_32.lib")
#pragma comment(lib, "Secur32.lib")
设置一下 模块定义文件 ffdec.def,设置好头文件、库文件搜索路径好后,编译。
就可以得到一个独立的 ffdec.dll文件了。
OVER。