这两天在尝试用mac编译FFmpeg,因此顺手将过程记录一下。本文参考 《Android音视频开发》一书。
首先在官网下载FFmpeg3.1.11的安装包以及NDK安装包(android-ndk-r10e-darwin-x86_64.zip)解压两个安装包
启动终端terminal
进入当前用户的home目录(/Users/YourUserName)
创建.bash_profile文件(如果不存在的话)touch .bash_profile
编辑.bash_profile文件 open -e .bash_profile
配置NDK开发环境如下图
在自己机器上更改相应的路径就可以
保存文件并关闭
更新刚配置的环境变量 执行 source .bash_profile
输入$PATH来确认是否编辑成功
配置成功后进入终端NDK下的samples目录
输入 cd hello-jni/ 命令,然后执行ndk-build命令
出现下图表示配置成功
下面就可以开始编译FFmpeg
编译前修改FFmpeg源码的configure文件,因为编译出来的动态库文件名的版本号在.so之后
Android平台无法识别,所以要修改下
大概在3209行左右,找到这几行代码
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)'
接下来编写一个shell脚本,进入FFmpeg目录下,创建build_android.sh文件,编辑内容如下
#!/bin/sh
NDK=/Users/linhongyu/Documents/AndroidProject/android-ndk-r10e
SYSROOT=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CPU=arm
PREFIX=$(pwd)/android/$CPU/
ADDI_CFLAGS="-marm"
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
}
build_one
读者自行修改前几行代码对应自己机器上的环境
记得将将build_android.sh权限修改为可执行 chmod +x build_android.sh
在终端输入 ./build_android.sh 开始运行这个脚本
等待10分钟左右,编译完成后 FFmpeg目录下将会多出一个android目录,其中就包含我们所需要的.so库。