Android ffmpeg编译

准备过程:
1. 下载ffmpeg源码,最新的: git://source.ffmpeg.org/ffmpeg.git
2. 下载x264: git clone git://git.videolan.org/x264.git
3. 安装ndk,见Android ndk开发
编译过程:
1) x264编译
编译脚本:

#!/bin/bash

NDK=/opt/android-19-toolchain
PLATFORM=${NDK}/sysroot

../x264/configure  --enable-static --enable-pic  --disable-asm --disable-cli --host=arm-linux  --cross-prefix=${NDK}/bin/arm-linux-androideabi-   --sysroot=${NDK}/sysroot  --prefix=./target

make
make install

注意脚本中的路径
2) ffmpeg编译
修改ffmpeg-2.2/configure文件

如果直接按照未修改的配置进行编译,结果编译出来的so文件类似libavcodec.so.55.39.101,版本号位于so之后,Android上似乎无法加载。因此需要按如下修改:

将该文件中的如下四行:

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

替换为:

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

2、 创建一个空txt文件,改名字为ffmpeg-build.sh,将以下脚本复制进去,另外,NDK,SYSROOT ,TOOLCHAIN依据自己的系统配置进行修改

#!/bin/bash
SOURCE_DIR=$1
NDK=/home/patrick/adt/android-ndk-r10
SYSROOT=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86
function build_one
{
${SOURCE_DIR}/configure \
    --prefix=./build/install \
    --enable-shared \
    --disable-static \
    --enable-runtime-cpudetect \
--enable-memalign-hack \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --enable-libx264 \
    --enable-decoder=h264 \
    --enable-encoder=libx264 \
    --enable-gpl \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-I$SOURCE_DIR/libx264/armv7/include  -fPIC -DANDROID -D__thumb__ -mthumb -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \
    --extra-ldflags="-L$SOURCE_DIR/libx264/armv7/lib" 
}
build_one

3、建立空文件夹,将上面脚本放进去,执行 ffmpeg-build ffmpeg_source_dir,等待完成。
4、执行 make &make install
遇到问题 :
1、 resolve to a path with no project.properties file for project
解决:project.properties文件中android.library.reference.1 后面的路径有问题 ,或者路径指向的文件不存在,加上去就ok了。
2、 invalid resource directory name: /home/patrick/git/WebviewSnap/WebviewSnap/bin/res/crunch
解决:把crunch 文件夹直接删掉就可以了,因为他会自动生成。
3、Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
解决:只需要在你的工程的:jni下增加
Application.mk
文件中添加如下代码即可:
APP_PLATFORM := android-8
4、System.loadLibrary() 加载失败
解决:1) 名称要去掉lib 和后缀.so ,如 libavcodec-57.so,就应该写成System.loadLibrary(“avcodec-57”);
2)多个库的加载顺序不能随意。无依赖的先加载,有依赖库的要放在所有依赖库之后。
5、Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1287]: 143 cannot locate ‘log2f’…
解决:将x264 和ffmpeg 源码下的 config.h 里的关于LOG2F 的宏改为 0,重新编译即可。
6、Invalid indirect reference 0x4eaec010 in decodeIndirectRef
解决:函数引用问题
7、Fatal signal 11 (SIGSEGV) at 0x51d0001d (code=1), thread 30456 (ple.webviewsnap)
解决:同8
8、 JNI ERROR (app bug): accessed stale local reference 0x21800021 (index 8 in a table of size 7)
解决: 把 targetSdkVersion 设置为更小的即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值