Android编译供ffmpeg使用的libx264
2016-12-07 17:45
316 查看
之前使用ffmpeg主要是为了解码H264和mux合成MP4文件,所以下载了一个ffmpeg,编译成库之后用着也没问题。直到最近要用到编码功能,于是在ffmpeg的./configure中直接加上--enable-libx264 --enable-encoder=libx264,结果出现了
configure&make&make install,之后在build目录了下生成了libx264.a文件和include头文件。重新编译ffmpeg,在configure配置--extra-cflags和--extra-ldflags中加上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
即可。
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中通过jni方式使用编译好的FFmpeg库-Android中使用FFmpeg媒体库(二)
- 在Android中通过jni方式使用编译好的FFmpeg库-Android中使用FFmpeg媒体库(二)
- 关于使用Android NDK编译ffmpeg
- window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库
- FFmpeg Android平台编译与使用
- ffmpeg在android手机上的几种编译与使用方法(未完待续)
- 在Android编译并使用FFMPEG
- ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用
- Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2
- FFmpeg Android平台编译与使用
- Android多媒体开发(2)————使用Android NKD编译原版FFmpeg
- 一个使用FFmpeg库读取3gp视频的例子-Android中使用FFmpeg媒体库(三).so文件编译过程问题的解决
- 在Android中通过jni方式使用编译好的FFmpeg库-Android中使用FFmpeg媒体库
- ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用
- 在Android中通过jni方式使用编译好的FFmpeg库-Android中使用FFmpeg媒体库(二)
- Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2
- Android多媒体开发(2)————使用Android NKD编译原版FFmpeg
- android ffmpeg内核 开源播放器编译与使用 支持2.3及4.0
- Ubuntu下为AndroidStudio编译并使用FFmpeg(二)AndroidStudio部分
- qt for android从编译ffmpeg x264 aac 到在qtcreator上使用