本来这一篇是给解码到播放的第一篇的,但是这两天做到了编码部分,需要编入libx264库进来,所以才来插一篇。
本节,基于序章(零)的编库,再加入了libx264的支持以及各个CPU架构的支持。
本文顺序会先说编libx264,再说支持各个架构的方式。
--------------------------------正文分割线------------------------------
编x264库其实脚本很简单,脚本如下:
#!/bin/bash
NDK=/path/to/your/ndk
PLATFORM=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=path/output/x264lib
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--enable-static \
--disable-asm \
--enable-pic \
--enable-strip \
--host=arm-linux-androideabi \
--cross-prefix=$CROSS_PREFIX \
--sysroot=$PLATFORM \
--extra-cflags="-Os -fpic" \
--extra-ldflags="" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
}
build_one
运行完,在对应输出目录就有了include文件和lib文件。
然后修改FFMPEG的编译脚本,如下:
#!/bin/bash
NDK=/path/to/your/ndk
SYSROOT=$NDK/platforms/android-21/arch-arm
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/arm-linux-androideabi
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=path/output/ffmpeg/armeabi
EXTRA_X264_CFLAGS="path/to/x264/lib/include"
EXTRA_X264_LDFLAGS="$path/to/x264/lib/lib"
function build_one
{
./configure \
--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-symver \
--enable-nonfree \
--disable-securetransport \
--enable-gpl \
--enable-libx264 \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -Os -fpic -I$EXTRA_X264_CFLAGS" \
--extra-ldflags="-L$EXTRA_X264_LDFLAGS"
make clean
make
make install
}
cd ../../../ffmpeg
build_one
cd ../so/build_script/ffmpeg
编完在对应目录就能找到包含x264库的ffmpeg库了。
足够简单。
然后,就来到多CPU架构了。
嫌麻烦就是多写几个脚本,复制粘贴,修改编译的属性就好
PLATFORM=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
...
--host=arm-linux-androideabi \
就这几条替换成对应的CPU属性就好了,继续编译就好了,如果嫌每次要切路径很麻烦,再多些点脚本去执行这些脚本就好了。
很简单。
但是在编x264 arm64-v8a 这个版本的时候,出了点意外。
libx264.a(bitstream-8.o): In function `x264_8_bitstream_init':
bitstream.c:(.text+0x19c): undefined reference to `x264_8_nal_escape_neon'
...
报了这个错误,Google大爷说得是neon不支持64位。但是,不应该啊!!!
试了很多方法,都无解,最后在configure加了条属性 --enable-asm。就解决了!就解决了!就解决了!
无奈(摊手)