android开发-Windows环境下编译FFMPEG源码

1.简介


之前有两篇文章讲到如何在windowsPC端使用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。

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

接下来讲具体流程,如何下载?如何安装?如何配置环境变量,如何检验配置成功?最终到如何编译使用?

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库,大功告成!

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

猜你喜欢

转载自blog.csdn.net/qq_38261174/article/details/83210458