在Mac上编译FFmpeg3.3.2的Android版本

前言

为了提升自己的专业竞争力,终于下定决定开始学习音视频开发,在网上查询了各种相关资料后,那就从捣鼓FFmpeg开始吧。虽然只是个简单的编译过程,却踩了很多的坑,在这里记录一下。

环境

系统环境: Mac

FFmpeg: 3.3.2

Android NDK: android-ndk-r10e

注意不同版本的FFmpeg和NDK编译会出现不同的问题,确保版本和上面的一致

开始编译

1.下载FFmpeg压缩包后解压,找到configure文件,将以下内容替换:

SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
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_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'  
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'  
SLIB_INSTALL_LINKS='$(SLIBNAME)'

2.在FFmpeg目录中创建,编译脚本build_android.sh

#!/bin/bash
NDK=/Users/monster/Library/Android/android-ndk-r10e
SYSROOT=$NDK/platforms/android-17/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_android
{
./configure \
--target-os=linux \
--prefix=$PREFIX \
--arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install    
}
build_android

这里将第2行的NDK路径修改成你本地的,同时确保文件开头的几个路径都存在;

3.运行build_android.sh

./build_android.sh

如果系统提示没有权限,则添加运行权限:

chmod +x build_android.sh

如果没有意外则会开始编译了,整个过程大概5分钟左右,成功之后会生成Android文件夹,里面就是编译出来的头文件和so动态库。

总结

虽然步骤简单,但还是花了自己一个晚上的时间,需要注意不同版本之间编译的差异,甚至到写这篇文章为止,我都还没编译通过4.1版本的FFmpeg,但是想想作为学习采用成熟稳定的版本就够了,相信随着时间的推移,这些问题都会慢慢变得不是问题,万事开头难,向前走吧。