zoukankan      html  css  js  c++  java
  • [原]在ubuntu 10.04.4下用NDK6编译ffmpeg

    参考文章:http://www.cnblogs.com/scottwong/archive/2010/12/17/1909455.html#2363900

    http://www.cnblogs.com/shaobin0604/archive/2011/08/05/2128619.html

    http://blog.csdn.net/vrix/article/details/6930081

    最近要做到与视频相关的项目,于是要了解一下ffmpeg,这就要先编译ffmpeg,但本人却是一个对ffmpeg不了解的菜鸟,于是去网上找了一些资料(如本文开头部分的链接),然后按照其中的方式来,编译了一天怎么也编译不出来。郁闷中,一点点的尝试、修改,终于编译成功了。总结一下遇到的问题:

    1、sed: can't read config.h: No such file or directory,解决办法:就在执行可执行文件config.sh之前执行cat  > config.h创建一个config.h。

    2、error:static declaration of "trunc' follows non-static declaration错误,解决办法:将libavutil/libm.h打开,把中间的static方法去掉。(粗暴的解决方法,会产生什么样的后果目前还暂未得知,如果有那位大哥知道原因也不妨告知一二)

    3、编译到最后的时候报错Error 1, 解决办法:将config.h中的一个地方的关键词restrict去掉一个。

    第一步:下载软件

    1 下载相应的Android NDK r6文件
    2 下载FFmpeg0.8.1的版本(将其解压之后放在/data/ffmpeg/下面重命名为jni)

    本文的相关路径如下:

    第二步:配置编译环境

    NDK r6 路径:/opt/android/android-ndk-r6/

    ffmpeg 路径:/data/ffmpeg/jni

    第二步:创建可执行脚本

    在/data/ffmpeg/jni/下创建一个可执行脚本config.sh

    ./configure \
         --disable-static \
        --enable-shared \
         --enable-gpl \
        --enable-version3 \
        --enable-nonfree \
         --disable-doc \
         --disable-ffmpeg \
         --disable-ffplay \
         --disable-ffprobe \
        --disable-ffserver \
        --disable-avdevice \
         --disable-avfilter \
         --disable-postproc \
        --enable-small \
         --cross-prefix=/opt/android/android-ndk-r6/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi- \
       --enable-cross-compile \
        --target-os=linux \
        --extra-cflags='-I/opt/android/android-ndk-r6/platforms/android-8/arch-arm/usr/include' \
      --extra-ldflags='-L/opt/android/android-ndk-r6/platforms/android-8/arch-arm/usr/lib -nostdlib' \
        --arch=arm \
         --disable-debug \
        --disable-stripping \
      
     sed -i 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
     sed -i 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
     sed -i 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
     sed -i 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
     sed -i 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
     sed -i 's/HAVE_SYMVER 1/HAVE_SYMVER 0/g' config.h

    以下几个属性需要根据ndk安装的位置做相应的修改

    • cross-prefix
    • extra-cflags
    • extra-ldflags

    第四步:编写Android.mk文件,路径:/data/ffmpeg/jni/。

    内容可以去https://gist.github.com/1126971这里下载。

    第五步:生成ffmpeg配置文件

    打开终端,定位到 /data/ffmpeg/jni 目录,执行 chmod +x config.sh修改config.sh的权限。

    接着执行:./config.sh,注意:如果这个地方报错sed: can't read config.h: No such file or directory,就在执行可执行文件config.sh之前执行cat  > config.h创建一个config.h。

     这里有一个警告,暂时不知道如何解决,如果那位大哥知道的话还希望指点一二。

    接着执行:定位到 /data/ffmpeg/jni 目录,执行/opt/android/android-ndk-r6/ndk-build,这个时候会报错,用gedit工具将/data/ffmpeg/jni/libavutil/libm.h打开,把中间的static方法去掉

    然后重新执行ndk-build命令。

    这个时候编译还是失败了,如下截图

    原来忘了将config.h中的一个地方的关键词给去掉

    最后终于编译成功了,截图为证。

     

     

  • 相关阅读:
    @PostConstruct和 @PreDestroy注解
    【JQuery】,ajax请求中,url出现[Object Object]
    筛法求素数
    母牛的故事
    将一个数拆分
    计算两个日期差
    用二分查找——查找比目标元素略大的索引
    反向输出字符串
    bootstrap table合并单元格(该版本是简单的应用)
    获取访问者IP
  • 原文地址:https://www.cnblogs.com/tanlon/p/2471550.html
Copyright © 2011-2022 走看看