FFMPEG install step on windowshtml
1. 下载MinGW和MSYSwindows
连接: https://sourceforge.net/projects/mingw/files/bash
Download mingw-get-setup.exe (86.5 kB)ui
双击进行安装,安装后路径C:\MinGWspa
双击C:\MinGW\msys\1.0\msys.bat能够启动MinGW.net
2. 下载yasm命令行
http://yasm.tortall.net/Download.htmlcode
yasm-1.3.0-win64.exe,修改成yasm.exe复制到MinGW的bin目录下C:\MinGW\binhtm
3. 下载Gettextblog
1)、下载gettext-runtime_0.18.1.1-2_win32.zip,地址http://www.gnu.org/software/gettext/
2)、将bin目录下的intl.dll放到C:\MinGW\bin 目录下。
4. 下载pkg-config.exe
1)、下载pkg-config
地址http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip (注:没有win64对应的包)
2)、将压缩包的bin目录的pkg-config.exe复制到C:\MinGW\bin目录下。
5. 下载pkg-config.exe依赖库
1)、下载地址:http://ftp.acc.umu.se/pub/gnome/binaries/win32/glib/2.28/glib_2.28.1-1_win32.zip
2)、将压缩包bin目录全部的.dll,放到C:\MinGW\bin 目录下。
6. 下载ffmpeg
编译ffmpeg
双击运行 C:\MinGW\msys\1.0\msys.bat,便可进入 MinGW 的工做目录了。
他和cmd命令有区别,反斜杠须要换成斜杠,盘符D:也要改为/d
输入命令 "ls" , 这等价于 "dir"。列出当前目录下的文件。
输入 cd ffmpeg,进入ffmpeg 目录。
在命令行下输入以下命令:
./configure --enable-memalign-hack --enable-shared
make
make install
即获得ffmpeg.exe, ffprobe.exe
注释:
FFmpeg-2.8.6在MinGW下可以编译成功
Ffmpeg-3.0下make报错
FFmpeg-3.1.3下make报错
7. 编译ffplay
可是在编译ffmpeg的过程当中,老是不能编译出来ffplay,查看config.mak文件,找CONFIG_FFPLAY 一行,发现前面老是有!结果make 怎么都出错,报告ffplay.c编译错误。
解决办法:
下载SDL-1.2.15,因为SDL v2和SDL v1区别比较大,在没有特殊需求的状况下建议使用SDL v1,并且SDL v2的发布版本有明显的编译问题。
将压缩包下的include、lib、bin分别放大mingw安装目录的对应目录下若是采用默认安装目录c:\mingw,那么能够拷贝到c:\mingw\include、c:\mingw\lib、c:\mingw\bin,特别注意include文件不要包含文件夹,直接拷贝.h文件。
这样在FFmpeg的configure的时候,就能够检测到SDL,并经过配置,编译生成ffplay.exe。
完成以后检查下SDL是否正常检测到,能够查看FFmpeg编译目录下的config.h文件,找到HAVE_SDL、CONFIG_SDL宏,若是都是1,表示SDL配置成功,能够放心编译出ffplay了,以及查看config.mak是否CONFIG_FFPLAY=yes。
修改内容SDL-1.2.15\bin\sdl-config
#!/bin/sh prefix=/c/mingw/ exec_prefix=${prefix} exec_prefix_set=no libdir=${exec_prefix}/lib usage="\ Usage: sdl-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs]" #usage="\ #Usage: sdl-config [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs] [--static-libs]" if test $# -eq 0; then echo "${usage}" 1>&2 exit 1 fi while test $# -gt 0; do case "$1" in -*=*) optarg=`echo "$1" | LC_ALL="C" sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case $1 in --prefix=*) prefix=$optarg if test $exec_prefix_set = no ; then exec_prefix=$optarg fi ;; --prefix) echo $prefix ;; --exec-prefix=*) exec_prefix=$optarg exec_prefix_set=yes ;; --exec-prefix) echo $exec_prefix ;; --version) echo 1.2.15 ;; --cflags) echo -I${prefix}/include/SDL -D_GNU_SOURCE=1 -Dmain=SDL_main ;; --libs) echo -L${exec_prefix}/lib -lmingw32 -lSDLmain -lSDL -mwindows ;; # --static-libs) ## --libs|--static-libs) # echo -L${exec_prefix}/lib -lmingw32 -lSDLmain -lSDL -mwindows -lm -luser32 -lgdi32 -lwinmm -ldxguid # ;; *) echo "${usage}" 1>&2 exit 1 ;; esac shift done
其中ffplay的编译参考连接:
http://www.cnblogs.com/tocy/p/windows_mingw_compile_ffmpeg_with_ffplay.html
在经过cmd命令,调用ffplay.exe播放会发现提示缺库。
下一步研究如何能避免此问题。