Android編譯供ffmpeg使用的libx264

之前使用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   即可。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章