Windows下使用MinGW编译FFmpeg

在linux下编译FFmpeg很方便,但在Windows下还是有不少坑的,试了下使用Windows+MinGW编译FFmpeg,过程还是挺顺利的。记录一下(这里针对的平台是Android)。

下载FFmpeg源码

首先,去FFmpeg官网下载源码。

FFmpeg

然后解压至任意盘中,解压之后的目录如下。

Source

NDK下载

下载NDK可以通过Android Studio自带的SDK管理工具来进行下载。也可以自行去官网下载解压。

NDK

MinGW下载配置

MinGW - Minimalist GNU for Windows-是Windows下模拟Linux运行的库、头文件等的集合。我们编译FFmpeg源码需要用到它。

点击这里直接下载安装程序,安装过程时长视网速而定。

安装完成后,打开MinGW Installation Manager,选中Basic Setup,在右边的package中选中如下几项:

MinGW

然后点击Installation->Apply Changes,过一会就ok了。

到这里,我们的准备工作已经完成了。

编译

在之前FFmpeg解压后的文件夹中找到configure文件,将其中的这段代码:

1
2
3
4
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'

替换为:

1
2
3
4
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

这段代码是控制将来编译生成so库的命名格式,如果按照原来的命名格式编译出来将会是libavcodec.so.57这样的格式,android不能识别,改过之后为libavcodec-57.so,这样就可以了。

然后在FFmpeg解压后的目录中新建build_android.sh文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash
NDK=D:/Android/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-21/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

注意要把NDK的位置改为自己本地NDK的位置。然后双击运行 MinGW安装目录\msys\1.0\msys.bat 文件,启动MinGW命令行,切换到FFmpeg目录下,运行build_android.sh脚本,开始编译:

compile

编译过程有点慢,这个跟电脑的速度有关。大概半小时后,编译完成,FFmpeg目录下多了一个android文件夹:

android

打开android->arm->lib:

finish

编译成功。至于集成到Android平台,可以查阅官方API文档,通过JNI方式调用相关接口即可。

FFmpeg功能十分强大,很多音视频处理的工作都会用到它,以后还需要深入研究。

文章目录
  1. 1. 下载FFmpeg源码
  2. 2. NDK下载
  3. 3. MinGW下载配置
  4. 4. 编译
|