您的位置:首页 > 移动开发 > Android开发

Android编译供ffmpeg使用的libx264

2016-12-07 17:45 316 查看
之前使用ffmpeg主要是为了解码H264和mux合成MP4文件,所以下载了一个ffmpeg,编译成库之后用着也没问题。直到最近要用到编码功能,于是在ffmpeg的./configure中直接加上--enable-libx264 --enable-encoder=libx264,结果出现了

ERROR: libx264 not found
搜索了一下,发现原来ffmpeg中是不集成libx264的,libx264属于第三方库,需要自己下载编译支持。从http://www.videolan.org/developers/x264.html下载了最新的libx264,找了一个基本的配置文件:

./configure --enable-pic --enable-static --cross-prefix=/root/android/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --sysroot=/root/android/android-ndk-r9d/platforms/android-19/arch-arm/ --host=arm-linux --prefix=./build --extra-cflags="-march=armv7-a  -mfloat-abi=softfp -mfpu=neon "


configure&make&make install,之后在build目录了下生成了libx264.a文件和include头文件。重新编译ffmpeg,在configure配置--extra-cflags和--extra-ldflags中加上libx264的路径:

#!/bin/bash
NDK=/root/android/android-ndk-r9d
SYSROOT=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--disable-shared \
--disable-network \
--disable-debug \
--disable-demuxers \
--disable-muxers \
--disable-encoders \
--disable-bsfs \
--disable-decoders \
--enable-gpl \
--enable-protocols \
--enable-muxer=mp4 \
--enable-decoder=h264 \
--enable-encoder=libx264 \
--enable-libx264 \
--enable-asm \
--enable-neon \
--disable-yasm \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-filters \
--disable-devices \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic -I./libx264/include $ADDI_CFLAGS" \
--extra-ldflags="-L./libx264/lib $ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one
运行脚本,编译生成ffmpeg的库,可以看到configure打印已经有libx264了:

pod2man enabled           yes
makeinfo enabled          no

External libraries:
libx264

Enabled decoders:
h264

Enabled encoders:
libx264


另外在使用libx264的时候,出现了 “libx264.a(encoder.o): in function x264_encoder_open_148:encoder.c(.text+0x7480): error: undefined reference to 'log2f'” 的错误,参考http://blog.csdn.net/huangkaiyue1/article/details/42081299文章在mips平台下编译出现的错误,将config.h中的#define
HAVE_LOG2F 1改成0就ok了。

如果出现“libx264.a(pixel-a.o) for Cortex-A8 erratum because it has no mapping symbols.”的话,参考http://blog.csdn.net/lngwu/article/details/49338043在libx264的Makefile中含有(strip) -x的地方加上
 -K \$$a -K \$$t -K \$$d  
即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android ffmpeg libx264
相关文章推荐