ffmpeg官网只提供了ffmpeg源码,在Linux下可以比较方便的编译,如果使用的是centos操作系统可以参考"http://trac.ffmpeg.org/wiki/CompilationGuide/Centos"
但是Windows的编译比较扯淡,主要原因在于Windows编译动态库的时候需要增加一些非标准c++的语法,ffmpeg并没有对其做适配,所以一般情况下我们有两种方式可以编译生成Windows平台使用的ffmpeg:
第一种:在Linux下安装mingw进行交叉编译;
第二种:在Windows下安装mingw编译;
本篇博文我们介绍第二种方案。
准备
1、ffmpeg源码
2、MSYS2
3、Mingw-w64(mini gnu for windows)
ffmpeg源码我们可以从ffmpeg官网上下载,此处我们介绍一下MSYS2(Minimal SYStem 2),他在windows平台上提供了一个Linux仿终端,几乎可以使用Linux下的全部命令,软件安装包使用pacman,源于Arch Linux。
Mingw-w64:作用是Windows版gcc。我们不用在Windows环境下安装,直接在MSYS2中通过pacman命令安装,其实msys2中已经有了自己的gcc,但是通过msys2 自带的gcc编译出来的库文件vs 中的编译器无法使用,而通过Mingw-w64(或Mingw-w32)中的gcc编译生成的库文件vs可以直接使用。
更改msys2源:参考“https://www.cnblogs.com/flyinggod/p/10841291.html”,目的是使msys2中安装软件更迅速。
环境安装
MSYS2我们直接从其官网:“https://www.msys2.org/ 下载最新的安装包默认安装。
Mingw-w64(gcc)安装
我们通过下面命令查看哪些gcc已经安装:
pacman -Sl | grep "gcc"
我们可以看到mingw32 版gcc已经安装(第一行),注:此处一定要在后面提示[已安装],才表明已经安装,不是列出来就代表已经安装。
如果没有安装使用如下命令进行安装:
pacman -S mingw-w64-i686-gcc
pacman -S mingw-w64-x86_64-gcc
安装好后通过gcc -v命令查看当前默认环境是不是mingw32版gcc:
编译
在ffmpeg源码路径下通过如下命令编译
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--extra-libs=-lpthread \
--extra-libs=-lm \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-nonfree \
--enable-shared \
--enable-decoder=h264 \
--enable-parser=h264 \
--arch=x86_32
make
make install
参考:https://www.cnblogs.com/haibindev/archive/2011/12/01/2270126.html
参考:https://blog.csdn.net/u014552102/article/details/104400885(主要参考)
终极解决方案
使用vs编译器,不用安装mingw,只需在msys2中安装make和configure就可以,参考:
http://ffmpeg.org/platform.html#Windows
步骤
1、设置LIB环境变量
2、设置INCLUDE环境变量
3、编译
./configure --enable-shared --enable-small --disable-all --disable-autodetect --enable-avcodec --enable-decoder=h264 --enable-dxva2 --enable-hwaccel=h264_dxva2 --toolchain=msvc --prefix=host