作者:世界和平啊 | 来源:互联网 | 2023-08-22 11:16
1.简介之前有两篇文章讲到如何在windowsPC端使用FFMPEG命令行程序。FFMPEG在windows上的安装FFMPEG命令行工具的使用但是我想要在android开发时使用
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库,大功告成!
如果总是编译失败,不妨推倒重来,多吸取失败经验,一定会成功的!