终于进入正题了。前提条件是你需要有ndk。我这边下载的是r11b的版本。其他的版本也不会出问题。但是为什么不用最新的呢?
在Linux/Mac下,开始x264的编译工作。
首先从官网上下载最新的x264源码:http://www.videolan.org/developers/x264.html。这里贴一下git的地址:
# git clone http://git.videolan.org/git/x264.git
下载完成之后,就可以开始编译了。这里我就先没有去了解怎么使用,因为目前还不需要使用它,编译出来才是第一步。
关于如何用NDK编译x264,网上有很多这样的代码。我是怎么做的呢:在github上搜索X264,然后进去看看有没有编译的相关脚本。一般运气不会太差,前几页就会有。
这里我贴一下我的脚本。虽然对cpu的支持还不是很全,但是能编译运行了。至于对CPU的支持,以后等整体跑通了,再去做支持。(以后去做,也许就不会去做了。。TODO一下吧!)
在x264的源码根目录下建一个build_android.sh文件,然后写入以下编译代码
#!/bin/bash
#这里需要配置一下你的NDK的根目录。
ANDROID_NDK=$NDK_HOME
if [ -z "$ANDROID_NDK" ]; then
echo "You must define ANDROID_NDK before starting."
echo "They must point to your NDK directories.\n"
exit 1
fi
# Detect OS
OS=`uname`
HOST_ARCH=`uname -m`
export CCACHE=; type ccache >/dev/null 2>&1 && export CCACHE=ccache
if [ $OS == 'Linux' ]; then
export HOST_SYSTEM=linux-$HOST_ARCH
elif [ $OS == 'Darwin' ]; then
export HOST_SYSTEM=darwin-$HOST_ARCH
fi
SOURCE=`pwd`
#这里配置最终生成。a的目录
PREFIX=$SOURCE/build/android/arm/
#目标编译版本
SYSROOT=$ANDROID_NDK/platforms/android-14/arch-arm
#arm-linux-androideabi-4.9 这个数字可能需要变化。不同的NDK版本版本号不一致。
#目标编译版本和toolchains下的目录有对应关系。arch-arm对应arm-linux或aarch64。arch-mips对应mipsel-linux或米皮sel-linux。x86同样。
CROSS_PREFIX=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/$HOST_SYSTEM/bin/arm-linux-androideabi-
EXTRA_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__"
EXTRA_LDFLAGS="-nostdlib"
./configure --prefix=$PREFIX \
--cross-prefix=$CROSS_PREFIX \
--extra-cflags="$EXTRA_CFLAGS" \
--extra-ldflags="$EXTRA_LDFLAGS" \
--enable-pic \
--enable-static \
--enable-strip \
--disable-cli \
--host=arm-linux \
--disable-asm \
--sysroot=$SYSROOT
make clean
make STRIP= -j4 install || exit 1
然后赋予build_android.sh执行权限。根目录下运行:
# ./build_android.sh
应该不会出错(如果有错,欢迎在文章下面评论,我会尽量帮助完善)。
编译完成之后,在源码的目录中,多了一个build目录。这个目录里面就是我们想要的头文件和静态库。两个头文件,和一个.a的静态库
include
|______x264_config.h
|______x264.h
lib
|______libx264.a
有了这几个文件,就可以开始安卓的采集工作了。
顺带提一句:x264里面有个example.c,这个文件里面是使用的示例代码。这也是我后面编译X264的主要参考文件。