环境准备:
Ubuntu12.04 TLS
android-ndk-r9d-linux-x86_64.tar.bz2
ffmpeg2.2
---------------------------------------------------------
第一步:下载
1.配置ubuntu12.04 TLS 系统环境。
2.下载ndk版本为 r9d。
3.下载ffmpeg2.2版本。
第二步:在ubuntu下编译环境设置
1. 安装好ubuntu12.04 TLS 64位linux系统之后,可以选择安装一下内容:
在在参考一些其他有关linux下NDK环境搭建资料上看到64位ubuntu 安装之后需要再下载 bison
64位ubuntu下还需要下载 gcc-multilib 和g++-multilib:
终端命令:" sudo apt-get install bison gcc-multilib g++-multilib "
2.下载ndk之后解压后目录:/home/admin/develop/android-ndk-r9d
配置NDK环境变量:
(2.) 配置NDK的环境变量:
终端内执行:“ gedit ~/.bashrc ”
在打开的文件末尾添加如下内容:
NDK=/home/admin/develop/android-ndk-r9d
export NDK
(3.)在当前bash环境下读取并执行 ~/.bashrc 中的命令:
终端执行:" source ~/.bashrc "
(4.)查看是否生效:
终端执行: " echo $NDK "
结果:/home/test/develop/android-ndk-r9d
(5.)测试NDK编译JNI工程:
到android-ndk-r9d 的sample目录的hello-jni 目录里
终端执行:“ $NDK/ndk-build ”
如果环境配置成功会生成so库的。
3.解压ffmpeg-2.2源码
将ffmpeg-2.2.tar.gz解压后拷贝到任意目录,本例是拷贝到.../android-ndk-r9d/sample/ffmpeg2.2 目录内。
拷贝之后添加" build_android.sh "文件:
#!/bin/bash
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffserver \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one
有的资料上面 build_android.sh 的前几行是这样写的:
#!/bin/bash
NDK=/home/admin/develop/android-ndk-r9d
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
.....
.....
因为之前已经在linux下设置NDK的环境路径,所以就不需要在build_android.sh里指定NDK的路径了。
在编译ffmpeg的时候推荐先设置NDK的环境路径到系统环境中,因为如果不设置的话,使用" NDK=/home/admin/... " 个人感觉是非常恶心的,尤其是在windows下使用cygwin编译的时候经常出现NDK路径找不到的问题,所以windows下编译最好也配置好NDK环境路径。
修改configure文件:
很多ffmpeg编译资料上面说要修改configure文件 ,说的原因是 如果不修改的话,在android上 System.loadLibrary("xxx"); 的时候个别so库无法加载的问题。
打开 ffmpeg源码内 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)'
第三步:在ubuntu 64位下进行编译ffmpeg源码以得到android平台 arm下能使用的那几个so库
1.给build_android.sh 和 configure 增加可执行权限:
终端执行:
“ $chmod+x ./build_android.sh ”
“ $chmod+x ./configure ”
2.给build_android.sh 和 configure 转换格式:
终端执行:(需要先安装 dos2unix)
“ $dos2unix ./build_android.sh ”
“ $dos2unix ./configure ”
3.最后编译:
终端执行:
“ $ ./build_android.sh ”
“ $ make ”
“$ make install ”
----------------------
编译成功会在ffmpeg源码目录下生成一个“android”目录里面有编译好的 so库和 需要的头文件等等。
其中so库应该是一下几个:
libavutil-52.so
libavcodec-55.so
libswresample-0.so
libavformat-55.so
libswscale-2.so
libpostproc-52.so
libavfilter-4.so
libavdevice-55.so
原文链接: http://www.cnblogs.com/wainiwann/p/3785485.html