Windows系统下编译FFmpeg for Android

工作中需要编译一个Android平台下的FFmpeg库,大概流程记录一下。

一、准备工作

1、下载并安装MinGW

下载地址:
https://osdn.net/projects/mingw/downloads/68260/mingw-get-setup.exe/
下载完成后双击
在这里插入图片描述
进行安装,进行到如下界面时,左边选“Basic Setup”,右边全选中进行安装
Windows系统下编译FFmpeg for Android_第1张图片默认情况下会安装到C:\MinGW,进入C:\MinGW\msys\1.0,将"msys.bat"发送到桌面快捷方式,以后双击快捷方式直接进入即可。

2、下载并解压NDK

下载地址:
https://developer.android.google.cn/ndk/downloads/
Windows系统下编译FFmpeg for Android_第2张图片
选择Windows 64位 版本下载(根据实际情况)
解压到D盘Work_FIles文件夹下,得到D:\Work_Files\android-ndk-r16b。

3、设置环境变量

将“D:\Work_Files\android-ndk-r16b”添加到环境变量的“Path”中。

4、下载并解压FFmpeg

下载地址:
http://ffmpeg.org/download.html
Windows系统下编译FFmpeg for Android_第3张图片我下载的是3.4.5版本。
解压压缩包得到ffmpeg-3.4.5文件夹。

二、编译FFmpeg

1、双击msys.bat桌面快捷方式打开终端;

2、进入ffmpeg-3.4.5目录下;

Windows系统下编译FFmpeg for Android_第4张图片

3、在ffmpeg目录下新建build_android.sh脚本文件,内容如下:

#!/bin/bash

# 设置编译中临时文件目录,不然会报错 unable to create temporary file
export TMPDIR=./temp
mkdir $TMPDIR

# NDK的路径,根据实际安装位置设置
NDK=D:/Work_Files/android-ndk-r16b

# 编译针对的平台,这里选择最低支持android-23, arm架构,生成的so库是放在libs/armeabi文件夹下的,若针对x86架构,要选择arch-x86
SYSROOT=$NDK/platforms/android-23/arch-arm

# 工具链的路径,arm-linux-androideabi-4.9与上面设置的PLATFORM对应,4.9为工具的版本号
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64

ARCH=armv7-a

PREFIX=./output/$ARCH

EXTRA_CFLAGS="-fdata-sections -ffunction-sections -fstack-protector-strong -ffast-math -fstrict-aliasing -march=$ARCH -D__ANDROID_API__=23 -isystem $NDK/sysroot/usr/include -isystem $NDK/sysroot/usr/include/arm-linux-androideabi"

EXTRA_LDFLAGS="-Wl,--gc-sections -Wl,-z,relro -Wl,-z,now"

function build_one
{
./configure \
--prefix=$PREFIX \
--enable-static \
--enable-shared \
--enable-small \
--enable-runtime-cpudetect \
--disable-programs \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--enable-pthreads \
--disable-decoders \
--enable-decoder=h264_mediacodec \
--disable-encoders \
--disable-hwaccels \
--enable-hwaccel=h264_mediacodec \
--disable-parsers \
--enable-parser=h264 \
--disable-demuxers \
--disable-muxers \
--disable-protocols \
--disable-filters \
--disable-bsfs \
--disable-indevs \
--disable-outdevs \
--disable-v4l2_m2m \
--enable-jni \
--enable-mediacodec \
--arch=$ARCH \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--target-os=android \
--disable-symver \
--enable-asm \
--enable-neon \
--extra-cflags="$EXTRA_CFLAGS" \
--extra-ldflags="$EXTRA_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}

build_one

注意:
(a)一开始参考网上其他的方法,配置时总是配置不通过,提示“jni not found”,后来通过在EXTRA_CFLAGS中指定了头文件目录才配置通过
(b)如果–target-os指定为android,则不用去修改configure文件(我指定的是android,没有去修改也通过了配置和编译,没有试–target-os=linux的情况)
(c)需要将脚本文件转换为UNIX格式,我在WIndows系统上使用的是Notepad++编辑器,通过“编辑”–》“文档格式转换”–》“转换为UNIX格式”完成转换。

4、执行build_android.sh脚本文件进行配置

./build_android.sh

5、执行make、make install命令进行编译安装

最后在D:\Work_Files\ffmpeg-for-android\ffmpeg-3.4.5\output\armv7-a目录下得到需要的头文件和库文件
Windows系统下编译FFmpeg for Android_第5张图片
Windows系统下编译FFmpeg for Android_第6张图片

你可能感兴趣的:(开源软件-FFmpeg)