1.Mac系统版本10.14.6,ffmpeg-2.8.15
2.需要的文件ffmpeg,下载地址http://ffmpeg.org/
3.需要的NDK版本,要求比较旧的版本(android-ndk-r10e),因为旧的版本是使用gcc编译的,新的版本是clang编译的
NDK的下载地址:
参考https://www.jianshu.com/p/c5b59cbe65f7
4.Mac解压NDK . bin文件
1.获取文件权限
chmod a+x android-ndk-r10c-darwin-x86_64.bin
2. 解压出文件
./android-ndk-r10c-darwin-x86_64.bin
5.配置环境变量
open ~/.bash_profile
打开文件后输入(以下请填入自己的SDK和NDK的路径,不要直接使用Android Studio的NDK路径),输入ndk-build -v判断是否配置成功
export PATH=${PATH}:/Users/kitzzz/Library/Android/sdk/platform-tools
export NDK_ROOT=/Users/kitzzz/Library/Android/android-ndk-r10e
export PATH=$PATH:$NDK_ROOT
6.进入到电脑上存放的ffmpeg的目录,编写脚本文件
注意:为了解决编译成功的文件libavfilter.so.5这样结束符错误的问题,需要进行如下配置
vim configure(这个文件在ffmpeg文件下面)
输入“: ? build setting” 进行搜索
i
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)'
esc
shift+z+z
touch build.sh
chmod 777 build.sh
vim build.sh
i(进入编辑模式)
#!/bin/bash
make clean
export NDK=/Users/kitzzz/Library/Android/android-ndk-r10e//更换成自己的目录
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
./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
shift+:q!(强制退出)/shift+z+z(保存后退出)
另外一种写法(编译多种CPU):
# #!/bin/bash
# make clean
# export NDK=/Users/kitzzz/Library/Android/android-ndk-r10e
# export SYSROOT=$NDK/platforms/android-9/arch-arm/
# export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
# export CPU=arm
# export PREFIX=$(pwd)/android/$CPU
# export ADDI_CFLAGS="-marm"
# ./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
#!/bin/bash
export NDK_HOME=/Users/kitzzz/Library/Android/android-ndk-r10e
export PLATFORM_VERSION=android-9
function build
{
echo "start build ffmpeg for $ARCH"
./configure --target-os=linux \
--prefix=$PREFIX --arch=$ARCH \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-asm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--cross-prefix=$CROSS_COMPILE \
--enable-cross-compile \
--sysroot=$SYSROOT \
--enable-small \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
echo "build ffmpeg for $ARCH finished"
}
#arm
# ARCH=arm
# CPU=arm
# PREFIX=$(pwd)/android/$ARCH
# TOOLCHAIN=$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
# CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
# ADDI_CFLAGS="-marm"
# SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
# build
#x86
ARCH=x86
CPU=x86
PREFIX=$(pwd)/android/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/x86-4.9/prebuilt/darwin-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/i686-linux-android-
ADDI_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
build
7.编译ffmpeg,等待编译完成(生成android的目录)
./build.sh