1.简介
之前有两篇文章讲到如何在windowsPC端使用FFMPEG命令行程序。

FFMPEG 在windows上的安装
FFMPEG命令行工具的使用
但是我想要在android开发时使用FFMPEG的功能又该怎么办?所以就需要编译FFMPEG,然后才能使用。这才有了这篇文章。

1.先讲思路,2.后讲具体流程!

但是首先有个问题就是我的电脑是windows系统,如何编译FFMPEG? 看网上的许多例子都是Linux和MAC系统。实在是看的我两眼发萌。

幸好有解决办法,那就是在Windows电脑上装一个MinGW。因为WIndows没有编译环境,只有装了这个(类似或CygWin)才有编译环境,我们才能进行编译。

MinGW是什么?

MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库。
允许你在Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。
MSYS是MinGW的一个子系统,是一套运行在Windows上的bash,也就是运行在Win上的Linux Terminal [1]。其实就是在Win上使用Linux的命令行进行操作,可以代替cmd来使用。对一些GNU的开源软件,MSYS可能是必需的,因为它们通常需要./configure然后make才能运行。我们将MSYS和MinGW配合使用就可以打造出一个Win下的GNU命令行终端和编译系统。
下载安装MinGW时,自动里面会有MSYS。
有了编译环境,是不是要有东西可以编译,所以就需要下载FFMPEG源码。

有了源码,还不能直接编译,因为编译时要执行一个脚本文件,而这个脚本文件里面有NDK的配置,所以我们还需要下载一个NDK。

所以我们总共需要下载的东西有:

NDK      https://developer.android.google.cn/ndk/downloads/    版本r14
MInGW     https://sourceforge.net/projects/mingw/files/     
FFMPEG源码     https://ffmpeg.org/download.html   版本3.3.8(HilBert)
接下来讲具体流程,如何下载?如何安装?如何配置环境变量,如何检验配置成功?最终到如何编译使用?

2.NDK的配置
至于为什么不从androidStudio直接下载NDK,怎么说呢?我自己也测试过,总是有问题,少东西,最终导致编译不成功,导致我之前放弃过要编译FFMPEGE。后来迎难而上,终于编译成功。一定要注意一些不为人知的小细节,不然,就算按着流程来也可能最终导致编译失败。你有福了,幸好看了我这篇文章,我将会告诉你不为人知的小细节,相信你一定可以编译FFMPEG成功。

1.我下载ndk压缩包到D盘的一个文件夹,并解压缩了。

 

 

 

2.配置ndk环境变量path,在其中加入

;D:\NDK\android-ndk-r14b;

3.检验是否配置成功

在cmd命令行输入   ndk-build    ,出现如下情况,则表示配置成功。

 

 

 

 

3.MinGW下载安装配置
1.下载

 

 

 

2.得到一个.exe文件(不管你放在哪),点开,然后选择安装位置,我是安装到了D盘的MinGW文件夹

 

 

 

3.选择了安装位置之后,需要选择需要安装的组件,如上图,我全部勾选,然后执行安装。

执行安装点击左上角的installation,然后点击apply change

4.安装之后文件夹中的情况:

 

 

 

5.配置环境变量path,在其中加入两个路径:

;D:\MinGW\bin;

D:\MinGW\msys\1.0\bin

6.检验配置是否成功?出现下图,即表示配置成功。

 

 

 

7.在msys/1.0/ 有一个msys.bat 的文件,待会下面编译脚本文件时是打开它,而不是cmd。

 

 

 

 

3.FFMPEG源码下载,及修改configure文件,及创建build_android.sh脚本文件
1.我下载了ffmpeg源码压缩包,并解压到了一个文件夹。

 

 

 

2.进入ffmpeg源码文件夹,修改configure文件:

# 原来的配置内容:
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)’

#替换后的内容:

SLIBNAME_WITH_MAJOR=’$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)’

LIB_INSTALL_EXTRA_CMD=’$$(RANLIB)”$(LIBDIR)/$(LIBNAME)”‘

SLIB_INSTALL_NAME=’$(SLIBNAME_WITH_MAJOR)’

SLIB_INSTALL_LINKS=’$(SLIBNAME)’
3.新建一个 build_android.sh 脚本文件 , 用于配置及编译使用 (名字不唯一)

 

 

 

4. build_android.sh 脚本文件里面的内容如下:你也可以百度有其它的内容,这个不唯一

#!/bin/bash
#自己修改对应的路径,要配置到环境变量中去
NDK=D:/NDK/android-ndk-r14b
#android4.9 对应的SDK在20左右,所以你的platforms应该选择小于20的,因为向前兼容,大于20的会有问题
SYSROOT=$NDK/platforms/android-18/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 \
–enable-cross-compile \
–cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
–target-os=linux \
–arch=arm \
–sysroot=$SYSROOT \
–extra-cflags=”-Os -fpic $ADDI_CFLAGS” \
–extra-ldflags=”$ADDI_LDFLAGS” \
$ADDITIONAL_CONFIGURE_FLAG
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS=”-marm”
build_one

read -p “Press any key to continue.”
5.打开 msys.bat 而不是cmd.

进入到ffmpeg源码文件夹

 

 

 

然后输入

$chmod 777 build_android.sh

等待一段时间,然后输入

$make

等待两段时间,然后输入

$make install

 

6.编译完成,会在ffmpeg源码文件夹中生成一个android文件

其/android/arm/lib目录下的so库文件就是能够在Android上运行的so库。

 

 

 

 

至此,编译结束,得到了so库,大功告成!

如果总是编译失败,不妨推倒重来,多吸取失败经验,一定会成功的!

 

 

 

————————————————
版权声明:本文为CSDN博主「*八步赶蝉*」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_38261174/article/details/83210458