尝试编译android版本的x264 lib
一 取 x264最新版的源码
方法有二:
1 直接 git clone 最新版的代码
git clone https://code.videolan.org/videolan/x264.git
2 上官网下载最新代码压缩包,解压到本地
https://www.videolan.org/developers/x264.html
我用的x264版本如下:
#define X264_REV 2970
#define X264_REV_DIFF 0
#define X264_VERSION " r2970 5493be8"
#define X264_POINTVER "0.157.2970 5493be8"
二 写编译脚本
#!/bin/sh
ANDROID_NDK=~/my_bin/android_ndk/android-ndk-r14b
SDK_VERSION=21
build() {
ARCH=$1
if [ "$ARCH" = "arm64" ]; then
PLATFORM_PREFIX="aarch64-linux-android-"
HOST="aarch64"
PLATFORM_VERSION=4.9
elif [ "$ARCH" = "arm" ]; then
PLATFORM_PREFIX="arm-linux-androideabi-"
HOST="arm"
PLATFORM_VERSION=4.9
else
echo "unsupport ARCH:$ARCH."
exit
fi
PREFIX=~/android/${ARCH}
SYSROOT=$ANDROID_NDK/platforms/android-${SDK_VERSION}/arch-${ARCH}
TOOLCHAIN=$ANDROID_NDK/toolchains/${PLATFORM_PREFIX}${PLATFORM_VERSION}/prebuilt/linux-x86_64
CC=$TOOLCHAIN/bin/${PLATFORM_PREFIX}gcc
CXX=$TOOLCHAIN/bin/${PLATFORM_PREFIX}c++
CROSS_PREFIX=$TOOLCHAIN/bin/${PLATFORM_PREFIX}
NM=$TOOLCHAIN/bin/${PLATFORM_PREFIX}nm
./configure \
--prefix=$PREFIX \
--cross-prefix=$CROSS_PREFIX \
--sysroot=$SYSROOT \
--host=arm-linux \
--prefix=$PREFIX \
--enable-shared \
--disable-asm \
--enable-pic \
--disable-cli \
--host=arm-linux \
make clean
make -j4
make install
}
build arm
build arm64
注意事项:
1、脚本中必须有 ANDROID_NDK=‘你本地ndk的路径’
尽管你在 ~/.bashr中 export了 ANDROID_NDK 指向了你的ndk路径
仍然需要加这句话,因为不加这句话,下面会找不到 ANDROID_NDK变量
导致你编译32位lib时, CC 为
/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
当然在这个路径下找不到编译器了,所以会一直遇到 No working C compiler found 问题
(当初在configure 脚本中的加句log查看下根音就好了,一直没有从根上找,导致这个问题浪费了我两天时间)
2、使用 android-ndk-r14b 的话, SDK_VERSION就选择21吧,因为之前的版本没有arm64编译器。
三 编译出的lib如下
四 ffmpeg中使能 libx264
如果需要在ffmpeg编译中使能 libx264
需要加如下configure 选项
--enable-libx264 \
--enable-gpl \
--extra-cflags="-marm -I/home/xxx/android/x264/arm/include/" \
--extra-ldflags="-L/home/xxx/android/x264/arm/lib/" \
因为x264代码遵循gpl协议
所以选项中需要制定 --enable-gpl
–extra-cflags里要制定 x264的头文件路径
–extra-ldflags里要制定x264库的路径
这样,就可以将x264编译到ffmpeg中了。