This comes from my github READMElinux
移植ffmpeg到android,编译可用于jni调用的so库.
编译出的so在android apk中的使用参考个人另外一个项目ffmpeg-jni-sampleandroid
ubuntu ubuntu15.10_64
ffmpeg 2.6.2
git
git clone https://github.com/tainzhi/ffmpeg-for-android-shared-library
安装android linux SDK以及NDK,并配置环境变量;github
个人是经过Android SDK manager下载, 默认安装在~/Android/Sdk/ndk-build
ubuntu
从ffmpeg官网下载ffmpeg源码包;也能够直接使用我本项目中的ffmpeg源码,我所使用的是2.6.2版本
若是要使用本身下载的ffmpeg源码,须要先将source/ffmpeg下的全部内容删除,而后将本身所下载的源码包解压到ffmpeg目录下
多线程
本项目提供了分别编译arm平台库和x86库和arm64平台的sh文件,分别为ide
source/build_android_arm.sh
工具
source/build_android_x86.sh
ui
source/build_android_aarch64.sh
idea
下面以build_android_arm.sh为例进行说明:
将source/build_android_arm.sh
复制到ffmpeg
目录下
export TMPDIR=/tmp
指定一个临时目录,能够是任何路径,但必须保证存在,ffmpeg编译要用;
NDK=~/Android/Sdk/ndk-build
SYSROOT=$NDK/platforms/android-21/arch-arm/
这里指定的ndk platform的路径,必定要选择比你的目标机器使用的版本低的
,好比你的手机是android-21版本,那么就选择低于21的
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=arm PREFIX=$(pwd)/android/$CPU
显然,生成的文件在source/ffmpeg/android/arm/
目录下
这个目录是ffmpeg编译后的so的输出目录,会有一个include和lib文件夹生成在这里,这也是咱们以后要在android apk中使用的.
source/ffmpeg/android/arm/lib/
目录下是动态库文件.so
source/ffmpeg/android/arm/include/
目录下的是头文件,不只须要动态库,还须要头文件
--enable-shared
和--disable-static
生成动态库
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-
是一些跨平台变异所须要的文件,不一样的平台是不同的
--target-os=android
指定适配android平台,我以前fork的原库是linux,若是是linux,那么生成的库名中有版本号,还须要重命名指定android后就不须要了
make -j8
多线程加速编译
具体查看ffmpeg文档.
cp source/build_android_arm.sh source/ffmpeg/ cd source/ffmpeg ./build_andrioid_arm.sh
若是编译过程当中出现错误,错误信息会输出在source/ffmpeg/config.log
文件中,通常在文件末尾.仔细分析该文件,能够找到编译出错的缘由
等待编译完成后,在source/android/arm/
目录下分别有动态库lib
和头文件include
.
修改了build_android_arm.sh
文件,发现参数没有起做用,原来没有清除以前configure生成的文件.这个命令,值得拥有
make distclean #delete files created by configure #then . ./build_android_arm.sh