• android ffmpeg编译遇到的问题


    {

      //转载自http://www.51testing.com/html/88/377588-834412.html

      //好文要顶

    }

    {

    问题一:
    由于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默认支持的默认编译选项仅支持ARMv5ARMv5TE架构,因此如果要使用比较高级的特性的话有两种方法:

    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 terminatedffmpeg目录下运行
    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>改成"jni.h"

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

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

    问题六:
    关于ffmpegavformat_open_input返回-1的问题有这样几种可能:

      • config.shdemuxerdisable掉了路径错误,

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

      • 就是/mnt/sdcard/*文件格式不支持 通常支持mp4 avi flv

      • pFormatCtx没有赋值为NULL

    问题七:
    ffmpeg | branch: master | Michael Niedermayer <michaelni@gmx.at> | Sat Dec 10 18:42:52 2011 +0100| [cc616431238c6c450a8bd53cf7983b12dda7f134] | committer: Michael Niedermayer h264: improve "no picture" debug output. Signed-off-by: Michael Niedermayer <michaelni@gmx.at> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=cc616431238c6c450a8bd53cf7983b12dda7f134 --- libavcodec/h264.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)

    Patch

    diff --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
    ");
    +        av_log(s->avctx, AV_LOG_DEBUG, "no picture %s
    ", 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.



    在源码00623

    av_log(c,AV_LOG_WARNING,

    00624            "No accelerated colorspace conversion found from %s to %s.
    ",
    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



    }

  • 相关阅读:
    解决VS2005打开js,css等文件,中文都是乱码的问题
    PHP代码优化43条方法实战列表
    php长文章分页
    ASP通用分页类
    用Asp隐藏文件路径,实现防盗链
    用 PHP5 打造简易的 MVC 架构
    一男赶集卖猪,天黑遇雨发生的4个故事,有启发意义的哦!
    西湖雾湖夜湖雪湖
    php生成静态html分页实现方法
    将网络上的图片下载到本地ASP代码
  • 原文地址:https://www.cnblogs.com/YZFHKMS-X/p/13227807.html
Copyright © 2020-2023  润新知