首先默认你的电脑已经配置好了ndk环境。
一、编译x264
1.下载x264
http://www.videolan.org/developers/x264.html
将下载下来的压缩包解压,我这里是解压到download目录下x264文件夹
1.在终端下进入x264目录:
cd /home/kim/download/x264(换成你自己的路径)
2. 在x264文件夹下建立build_x264.sh
gedit build_x264.sh
3.在新建的文件中输入如下内容(修改为自己的目录):
export NDK=/home/kim/android-ndk
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt
export PLATFORM=$NDK/platforms/android-21/arch-arm
export PREFIX=/home/kim/download/x264
./configure --prefix=$PREFIX \
--enable-static \
--enable-pic \
--disable-asm \
--disable-cli \
--host=arm-linux \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--sysroot=$PLATFORM
4.在终端中输入
make
OK!一切顺利的话,你将会在x264文件夹下看到一个libx264.a的文件,编译成功!
…………………………………………………………error………………………………………………………………
当然,编译的过程有些人并非能一帆风顺,比如我就在make 的时候遇到一个错误:no working c compiler found x264,网上搜了很多方法,都没有解决。后来不得不去看config.log日志。发现是在配置-cross-prefix路径的时候填错了,编译的时候找不到路径。修改正确后,OK,编译通过!
所以,习惯看日志有多重要!!!
如果以上还是没能解决您的问题,这里留下我在编译的时候参考的文章,供您参考:
http://blog.youkuaiyun.com/chinabinlang/article/details/38561719
http://blog.youkuaiyun.com/seafit/article/details/46815263
http://blog.youkuaiyun.com/huahuahailang/article/details/27373169
二、编译ffmpeg
修改ffmpeg/configure文件
如果直接按照未修改的配置进行编译,结果编译出来的so文件类似libavcodec.so.55.39.101,版本号位于so之后,Android上似乎无法加载。因此需要按如下修改:
将该文件中的如下四行:
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)'
编写build_android.sh脚本文件
#!/bin/bash
NDK=/home/kim/android-ndk
SYSROOT=$NDK/platforms/android-21/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/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增加可执行权限:
$chmod+x build_android.sh
执行build_android.sh
$./build_android.sh
配置该脚本完成对ffmpeg的配置,会生成config.h等配置文件,后面的编译会用到。如果未经过配置直接进行编译会提示无法找到config.h文件等错误。
$make
$make install
-rwxr-xr-x 1 dennisdennis 55208 Mar 29 16:26libavdevice-55.so
-rwxr-xr-x 1 dennisdennis 632476 Mar 29 16:26 libavfilter-4.so
-rwxr-xr-x 1 dennisdennis 1442948 Mar 29 16:26 libavformat-55.so
-rwxr-xr-x 1 dennisdennis 7985396 Mar 29 16:26 libavcodec-55.so
-rwxr-xr-x 1 dennisdennis 83356 Mar 29 16:26libswresample-0.so
-rwxr-xr-x 1 dennisdennis 308636 Mar 29 16:26 libswscale-2.so
-rwxr-xr-x 1 dennisdennis 300580 Mar 29 16:26libavutil-52.so
注:以上列表去掉了符号链接文件和pkgconfig目录。
http://www.roman10.net/how-to-build-ffmpeg-for-android/