android ffmpeg log,android ffmpeg编译遇到的问题

问题一:

由于Android环境非常复杂,框架都是用Java,因此要使用C/C++都需要做很多配置,使用汇编的话需要做更多的工作。

我这边使用的是最新的Android4.0的开发工具,NDK也是最新支持4.0的。这个NDK与老版本的有一些比较明显的不同。

由于我用的是Mac

OS X,因此配置起来比瘟抖死上的要容易许多,你不需要再装些杂七杂八的第三方工具,直接可以使用你下载好的NDK。

首先,设置目标路径——在你的Terminal中进入NDK的根目录,随后打NDK_PROJECT_PATH=""。回车,再输入export NDK_PROJECT_PATH

回车。

这里要注意的是NDK_PROJECT_PATH=后面的路径需要加引号,否则无效。

由于NDK默认支持的默认编译选项仅支持ARMv5到ARMv5TE架构,因此如果要使用比较高级的特性的话有两种方法:

1、你有办法将TARGET_ARCH_ABI的值变为armeabi-v7a,俺自己试了一下,木有成功。因此可以使用第二种方法,更简单便捷:

2、在你的NDK目录下,找到toolchains,然后找到arm-linux-androideabi-x.y.z目录,在进去可以发现setup.mk文件。找到-march=armv7-a,将上面的神马#ifdef都去掉,下面的#endif也都删了。这样就能确保编译器使用ARMv7A来编译。问题二:

error: libavutil/samplefmt.h: No such file or directory

compilation terminated在ffmpeg目录下运行cat

libavcodec/avcodec.h | libavcodec/codec_names.sh config.h

libavcodec/codec_names.h

问题三:

libavformat/libavformat.a(log2_tab.o):(.rodata+0x0):

multiple definition of `ff_log2_tab'

libavcodec/libavcodec.a(log2_tab.o):(.rodata+0x0):

first defined here

libavutil/libavutil.a(log2_tab.o):(.rodata+0x0):

multiple definition of `ff_log2_tab'

libavcodec/libavcodec.a(log2_tab.o):(.rodata+0x0):

first defined here

解决办法:移植ffmpeg的时候如果遇到这样的情况,在两个文件的Makefile中删掉一个log2_tab.o文件就可以了问题四:

/home/seuic-exp/video/android-ndk-r8d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/http://www.cnblogs.com/http://www.cnblogs.com/arm-linux-androideabi/bin/ld: error: cannot find -ljnigraphics

在ndk-build的时候会出现这个问题,吧.c文件中的改成"jni.h"问题五:

在ndk-build的时候如果出现non-numeric second argument to `wordlist' function: ''.这个error是由于jni上层的AndroidManifest.xml的问题导致的。所以在生成so的时候,先把这个文件删除编译即可。

编译库的时候一定要与工程文件在一起是因为jni接口与包名的问题,下次修改jni层,只需要更新库文件,src改不改无所谓。问题六:

关于ffmpeg中avformat_open_input返回-1的问题有这样几种可能:在config.sh中demuxer被disable掉了路径错误,

比如在jni中访问sd卡中的文件要加/mnt

/mnt/sdcard/*

就是/mnt/sdcard/*文件格式不支持

通常支持mp4 avi flv

pFormatCtx没有赋值为NULL问题七:

ffmpeg | branch: master | Michael Niedermayer | Sat Dec 10 18:42:52 2011 +0100| [cc616431238c6c450a8bd53cf7983b12dda7f134] | committer: Michael Niedermayer

h264: improve "no picture" debug output.

Signed-off-by: Michael Niedermayer

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=cc616431238c6c450a8bd53cf7983b12dda7f134

---

libavcodec/h264.c | 2 +-

1 files changed, 1 insertions(+), 1 deletions(-)

Patchdiff --git a/libavcodec/h264.c b/libavcodec/h264.c

index d35938c..a9a5277 100644

--- a/libavcodec/h264.c

+++ b/libavcodec/h264.c

@@ -1531,7 +1531,7 @@ static void decode_postinit(H264Context *h, int setup_finished){

} else

h->next_outputed_poc = out->poc;

}else{

- av_log(s->avctx, AV_LOG_DEBUG, "no picture\n");

+ av_log(s->avctx, AV_LOG_DEBUG, "no picture %s\n", out_of_order ? "ooo" : ""); //源码的1514行}

if (h->next_output_pic && h->next_output_pic->sync) {问题八:

12-29 08:46:28.265: D/ffmpeg(9857): No accelerated colorspace

conversion found from yuv420p to rgb565le.

在源码0062300624 "No accelerated colorspace conversion found from %s to %s.\n",

00625av_get_pix_fmt_name(c->srcFormat),av_get_pix_fmt_name(c->dstFormat));

问题九:

enable-asm

/opt/android-ndk-r8d/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ranlib

"./android/armv7-a/lib/libavcodec.a"

libavcodec/libavcodec.a(fft_fixed_init_arm.o): In function

`ff_fft_fixed_init_arm':

fft_fixed_init_arm.c:(.text.unlikely+0x2c): undefined reference to

`ff_fft_fixed_calc_neon'

libavcodec/libavcodec.a(fft_init_arm.o): In function

`ff_fft_init_arm':

fft_init_arm.c:(.text.unlikely+0x30): undefined reference to

`ff_fft_permute_neon'

fft_init_arm.c:(.text.unlikely+0x34): undefined reference to

`ff_fft_calc_neon'使用最新的版本就没有这个问题,我现在最新版本时1.1.1,好像出现这个问题的在1.0.1版本

问题十:

能够编译neon,同时arm

NDK=/opt/android-ndk-r8d

PLATFORM=$NDK/platforms/android-14/arch-arm/

PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86

function build_one

{

./configure --target-os=linux \

--prefix=$PREFIX \

--enable-cross-compile \

--enable-nonfree \

--enable-asm \

--cpu=cortex-a8 \

--arch=armv7-a \

--enable-neon \

--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \

--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \

--nm=$PREBUILT/bin/arm-linux-androideabi-nm \

--sysroot=$PLATFORM. \

--extra-cflags=" -O3

-fpic -DANDROID -DHAVE_SYS_UIO_H=1 $OPTIMIZE_CFLAGS " \

--disable-shared \

--enable-static \

--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib

-L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \

--disable-ffmpeg \

--disable-ffplay \

--disable-ffprobe \

--disable-ffserver \

--disable-avfilter \

--disable-avdevice \

--disable-swscale \

--disable-swresample \

--disable-muxers \

--disable-demuxers \

--disable-encoders \

--disable-decoders \

--enable-avformat \

--enable-avcodec \

--enable-decoder=h264 \

--enable-fft \

--enable-mdct \

--disable-parsers \

--enable-parser=h264 \

--enable-yasm \

--enable-vis \

--disable-mmx \

--disable-mmx2 \

--disable-bsfs \

--disable-filters \

--disable-network \

--disable-protocols \

--disable-optimizations \

--disable-indevs \

--disable-debug \

--disable-symver \

--disable-doc \

--disable-postproc \

--disable-stripping \

--disable-pthreads \

$ADDITIONAL_CONFIGURE_FLAG

make clean

make -j4 install

$PREBUILT/bin/arm-linux-androideabi-ar

d libavcodec/libavcodec.a inverse.o

$PREBUILT/bin/arm-linux-androideabi-ld

-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname

libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic

--whole-archive --no-undefined -o $PREFIX/libffmpeg.so

libavcodec/libavcodec.a libavformat/libavformat.a

libavutil/libavutil.a -lc -lm -lz -ldl -llog --warn-once

--dynamic-linker=/system/bin/linker

$PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a

}

#arm v7 neon

#CPU=armv7-a

#OPTIMIZE_CFLAGS="-mfloat-abi=softfp

-mfpu=neon -marm -mcpu=cortex-a8"

#PREFIX=./android/$CPU

#ADDITIONAL_CONFIGURE_FLAG=

#build_one

#arm v7 vfp3

CPU=armv7-a

OPTIMIZE_CFLAGS="-mfloat-abi=softfp

-mfpu=vfpv3-d16 -marm -march=$CPU"

PREFIX=./android/$CPU

ADDITIONAL_CONFIGURE_FLAG=

build_one

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值