Mac环境下使用NDK编译FFMPEG for android

一、FFMPEG是什么?

1.FFMPEG可以做到对视频文件编码、解码、转码。

2.可以对多路音频复用、解复用。

3.可以对音视频流处理。

4.音视频的过滤器、播放。

5.支持从远古时期到现在的几乎所有格式。

6.Linux、Windows、Mac OS全平台支持。

7.高可移植性。

大家知道Android系统又是基于linux的,所以,FFMPEG在Android下也是可用的。因此我们在Android平台上对音视频处理,基本就绕不开FFMPEG。

但FFMPEG在Android上并不能直接用,而是需要把源码下载下来自己编译,当然网上也有别人编译好的,不过最好还是自己编译一下。这个时候我们就需要NDK了。NDK就是Native Development kit。本地开发工具包。

我们需要下载FFMEPG和NDK到本地了。这个时候需要注意了,在版本选择上一定注意,我刚开始在网上看到别人说不要下载最新版,最新版引进后有各种各样的问,我不以为然,顺手就下载了最新版本的FFMEPG和NDK,结果各种报错,解决了好几天,吃尽了苦头。最后还是如网上的人一样老老实实下载了老的版本,最终从FFMPEG的最新版到4.1.3,再到3.4,最后到3.3,而NDK也从21、17,最后降到14b。最终匹配。所以我最终的方案就是:

ffmpeg-3.3+android-ndk-r14b

NDK的下载很简单,直接在官网的旧版本下载中就很容易找到。而ffmpeg的旧版本下载中并没有提供所有完整的版本的下载。这里附上3.3版本下载的地址:

 http://ffmpeg.org/releases/ffmpeg-3.3.tar.gz

二、配置NDK

在NDK下载完成后,需要配置下环境变量:

1.启动终端

2.输入pico .bash_profile 进行编辑

3.

export ANDROID_NDK_HOME=/Users/wangfeng/Documents/hivi/soft/android-ndk-r14b
export ANDROID_SDK_HOME=/Users/wangfeng/Library/Android/sdk
export PATH=$PATH:$ANDROID_NDK_HOME
export PATH=$PATH:$ANDROID_SDK_HOME
export PATH=$PATH:/Users/wangfeng/Documents/hivi/soft/android-ndk-r14b/toolchai$

4.Control+x 保存退出。 Y确认,然后再按Enter.

5.输入 source ~/.bash_profile使改动立即有效。

6.输入ndk-build

如果出现如下提示,则说明配置成功:

Android NDK: Could not find application project directory !    
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.    
/Users/wangfeng/Documents/hivi/soft/android-ndk-r14b/build/core/build-local.mk:151: *** Android NDK: Aborting    .  Stop.

三、修改FFMPEG相关文件

接着,将FFMPEG解压后,对configure文件进行修改替换,替换的原因是:编译后的文件会在.so后面加上动态库的版本号,而这种命名格式是不能被Android所能识别的。使用subline打开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)'

注意第二行中间的空格,根据我和网友的试验,有些文章没有空格的,编译会报错。

注意位置顺序不能变。

四、新建脚本文件

在FFMPEG的根目录下,新建build_android.sh文件,内容如下:

#!/bin/bash

make clean
# NDK的路径,根据自己的安装位置进行设置
export TMPDIR=/Users/wangfeng/Documents/hivi/soft/ffmpeg-3.3/ffmpeg_install
export NDK=/Users/wangfeng/Documents/hivi/soft/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-21/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"
function build_one
{
./configure \
    --prefix=$PREFIX \
    --target-os=linux \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --arch=arm \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    --cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
    --nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \
    --enable-shared \
    --enable-runtime-cpudetect \
    --enable-gpl \
    --enable-small \
    --enable-cross-compile \
    --disable-debug \
    --disable-static \
    --disable-doc \
    --disable-asm \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --enable-postproc \
    --enable-avdevice \
    --disable-symver \
    --disable-stripping \
$ADDITIONAL_CONFIGURE_FLAG
sed -i '' 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
sed -i '' 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
sed -i '' 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
sed -i '' 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
sed -i '' 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
sed -i '' 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
sed -i '' 's/HAVE_CBRT 0/HAVE_CBRT 1/g' config.h
sed -i '' 's/HAVE_RINT 0/HAVE_RINT 1/g' config.h
make clean
# 这里是定义用几个CPU编译,我用4个,一般在5分钟之内编译完成
make -j4
make install
}
build_one

这里注意,这个TEMPDIR的临时路径,指定的文件夹ffmpeg-install需要自己先创建。

1.接着打开终端,cd到ffmpeg的根目录。

2.赋予脚本权限:chmod +x build_android.sh

3.编译:sh build_android.sh -> /Users/wangfeng/Documents/hivi/soft/ffmpeg-3.3/log.txt

在编译的时候会申请各种各样的权限,我们一路允许,有些权限需要到系统安全设置里去手动授权。

在5分钟左右编译完成之后,在ffmpeg的根目录下。会创建一个android文件夹。

 

编译完成。

祝各位同僚顺利!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值