#!/bin/bash

NDK=/opt/android-ndk-r9d

SYSROOT=$NDK/platforms/android-9/arch-arm/

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64

function build_go_go_go
{
echo "go go go"
}
function build_ffmpeg
{
echo "start ./configure"
sed -i 's#require_pkg_config speex speex/speex.h#require speex speex/speex.h#g' ./configure
./configure \
    --prefix=$PREFIX    \
    --disable-shared    \
    --enable-static    \
    --enable-runtime-cpudetect \
    --disable-doc \
    --enable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-symver \
    --enable-gpl \
    --enable-nonfree \
    --enable-libfaac \
    --enable-libx264 \
    --enable-cross-compile \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --cc=$CC \
    --nm=$NM \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic -DANDROID  -I$(pwd)/../x264-build/arm/include/" \
    --extra-ldflags="-L$(pwd)/../x264-build/arm/lib/" \
    --extra-libs="-lgcc -ldl" \
    #--enable-libspeex \
    #--enable-encoder=libx264 \
    #--enable-libx264 \
    #--extra-cflags="-Os -fpic -DANDROID $ADDI_CFLAGS -I../x264-build/arm/include -I../faac/include -I../speex/include" \
    #--extra-ldflags="$ADDI_LDFLAGS -L../x264-build/arm/lib -L../faac/obj/local/armeabi -L../speex/obj/local/armeabi" \

$ADDITIONAL_CONFIGURE_FLAG \
    || exit 1
make clean || exit 1
sed -i 's/HAVE_CBRT 0/HAVE_CBRT 1/g' ./config.h
sed -i 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' ./config.h
sed -i 's/HAVE_ROUND 0/HAVE_ROUND 1/g' ./config.h
sed -i 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' ./config.h
sed -i 's/HAVE_LRINT 0/HAVE_LRINT 1/g' ./config.h
sed -i 's/HAVE_RINT 0/HAVE_RINT 1/g' ./config.h
sed -i 's/HAVE_ISINF 0/HAVE_ISINF 1/g' ./config.h
sed -i 's/HAVE_ISNAN 0/HAVE_ISNAN 1/g' ./config.h
make -j4 || exit 1
make install || exit 1
}
function build_mcy
{
    ./configure --target-os=linux \
        --prefix=$PREFIX \
        --enable-cross-compile \
        --extra-libs="-lgcc" \
        --arch=arm \
        --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 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
        --disable-shared \
        --enable-static \
        --extra-ldflags="-Wl, -L../x264-build/arm/lib -nostdlib -lc -lm -ldl -llog" \
        --disable-everything \
        --enable-demuxer=mov \
        --enable-demuxer=h264 \
        --disable-ffplay \
        --enable-protocol=file \
        --enable-avformat \
        --enable-avcodec \
        --enable-decoder=rawvideo \
        --enable-decoder=mjpeg \
        --enable-decoder=h263 \
        --enable-decoder=mpeg4 \
        --enable-decoder=h264 \
        --enable-parser=h264 \
        --disable-network \
        --enable-zlib \
        --enable-avfilter \
        --disable-avdevice \
        $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 libavfilter/libavfilter.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.6/libgcc.a
}

function build_one
{
  echo "$TOOLCHAIN/bin/$EABIARCH-gcc -Wl,-rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib -L$PREFIX/lib -shared -Wl,-soname,$SONAME -nostdlib -Wl,-Bsymbolic -o $OUT_LIBRARY -Wl,--whole-archive -lavcodec -lavfilter -lavformat -lavutil -lswresample -lswscale -Wl,--no-whole-archive --sysroot=$SYSROOT -Wl,--as-needed -lc -lm -lz -ldl -llog $TOOLCHAIN/lib/gcc/$EABIARCH/4.6/libgcc.a"
  $TOOLCHAIN/bin/$EABIARCH-gcc -Wl,-rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib -L$PREFIX/lib -L../x264-build/arm/lib -L../faac/obj/local/armeabi -L../speex/obj/local/armeabi -shared -Wl,-soname,$SONAME -nostdlib -Wl,-Bsymbolic -o $OUT_LIBRARY -Wl,--whole-archive -lavcodec -lavdevice -lavfilter -lavformat -lavutil -lswresample -lswscale -lpostproc -lx264 -lfaac -lspeex -Wl,--no-whole-archive --sysroot=$SYSROOT -Wl,--as-needed -lc -lm -lz -ldl -llog $TOOLCHAIN/lib/gcc/$EABIARCH/4.6/libgcc.a || exit 1
  cp -f $OUT_LIBRARY $OUT_LIBRARY.sym
  $TOOLCHAIN/bin/$EABIARCH-strip $OUT_LIBRARY
 
  echo "$TOOLCHAIN/bin/$EABIARCH-g++ -Wl,--gc-sections -Wl,-z,nocopyreloc --sysroot=$SYSROOT -Wl,-rpath-link=$SYSROOT/usr/lib -Wl,-rpath-link=. cmdutils.o ffmpeg_filter.o ffmpeg.o ffmpeg_opt.o -lgcc -no-canonical-prefixes  -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now  -L$SYSROOT/usr/lib -L$PREFIX/lib -Wl,--whole-archive -lavcodec -lavfilter -lavformat -lavutil -lswresample -lswscale -Wl,--no-whole-archive -Wl,--as-needed -llog -lc -lm -lz -ldl -o ffmpeg"
  $TOOLCHAIN/bin/$EABIARCH-g++ -Wl,--gc-sections -Wl,-z,nocopyreloc --sysroot=$SYSROOT -Wl,-rpath-link=$SYSROOT/usr/lib -Wl,-rpath-link=. cmdutils.o ffmpeg_filter.o ffmpeg.o ffmpeg_opt.o -lgcc -no-canonical-prefixes  -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now  -L$SYSROOT/usr/lib -L$PREFIX/lib -L../x264-build/arm/lib -L../faac/obj/local/armeabi -L../speex/obj/local/armeabi -Wl,--whole-archive -lavcodec -lavdevice -lavfilter -lavformat -lavutil -lswresample -lswscale -lpostproc -lx264 -lfaac -lspeex -Wl,--no-whole-archive -Wl,--as-needed -llog -lc -lm -lz -ldl -shared -o libffmpeg2.so || exit 1
  $TOOLCHAIN/bin/$EABIARCH-strip ffmpeg
}

CPU=arm
PREFIX=$(pwd)/../ffmpeg-build/$CPU
ADDI_CFLAGS="-marm -I$PREFIX/include"
ADDI_LDFLAGS="-Wl,-rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib -nostdlib -lc -lm -ldl -llog -L$PREFIX/lib"
EABIARCH=arm-linux-androideabi
SONAME=libffmpeg.so
OUT_LIBRARY=$PREFIX/$SONAME
CC=$TOOLCHAIN/bin/$EABIARCH-gcc
NM=$TOOLCHAIN/bin/$EABIARCH-nm

build_go_go_go
build_ffmpeg
#build_one
#build_mcy
#make install || exit 1

ndk编译ffmpeg的更多相关文章

  1. Linux下NDK编译FFMPEG包含neon参数

    FFMPEG编译成Android库已经有很多案例了,编译优化neon的也很多,以下是我通过实践成功的案例,这里主要讲编译的配置文件,其他设置可结合Linux下使用NDK编译FFMPEG(libstag ...

  2. anroid ndk编译ffmpeg 引用librtmp libx264

    Ffmpeg 无处不在,自然android系统少不了它,折腾了不少时间完成 ndk编译ffmpeg,生成so库中引用了外部库librtmp,libx264.条条大路通罗马, 也许还有别的更好的方法去完 ...

  3. 64位 CentOS NDK 编译 FFMPEG

    64位 CentOS NDK 编译 FFMPEG 一.           参考文章: http://www.cnblogs.com/baopu/p/4733029.html http://www.c ...

  4. 用Android NDK编译FFmpeg

    附(2018-01-06):     有一个将x264及lame等库集成进去了且基于android的ffmpeg的编译方法,地址参见:       https://github.com/writing ...

  5. Linux下使用NDK编译FFMPEG(libstagefright)

    这个月要负责一个项目,使用FFMPEG渲染视频,主要是Android端的,由于性能要求,要使用硬解码,但网上大多数教程都是没有libstagefright的,所以个人觉得,生成的so库文件也是没有开启 ...

  6. [原]如何用Android NDK编译FFmpeg

    我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...

  7. NDK编译FFMpeg[Linux]

    最近在研究视频直播相关的技术,了解到了FFmpeg,就在网上查看如何将FFmpeg移植到Android中,查了几天,看的东西不少,就是没有一个可以完全移植成功的,最后通过产看各种资料,结合网上的资料, ...

  8. 一个小玩具:NDK编译FFmpeg的例子

    FFmpeg NDK编译 和最简单的APK 准备 硬件: 一台电脑,实验在Lenovo T430上 一个Android设备,实验在 三星S3/A7 编译环境: Ubuntu 14.04 (ant\ja ...

  9. FFmpeg编译:Linux下使用NDK编译FFmpeg

    环境: Ubuntu 1.下载并解压FFmpeg3.4.zip(略) 2.将编译脚本放入到FFmpeg解压后的目录. 3.执行编译脚本: ./linux_build_android.sh linux_ ...

  10. Android NDK 编译FFmpeg(不需要复杂的环境变量设置)

    环境: CentOS6.2——64位 借鉴:https://vec.io/posts/how-to-build-ffmpeg-with-android-ndk 在根目录下创建work文件夹:cd  / ...

随机推荐

  1. Deep face recognition: a survey v4

    http://www.cnblogs.com/shouhuxianjian/p/9789243.html

  2. Java Swing 编程 JComboBox 实现模糊查找功能。

    废话不多说,直接上代码.代码如下: import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util ...

  3. CAS5.3.0安装部署

    部署环境:JDK1.8.x maven-3.5.2 tomcat-8.x.x 1.下载地址 https://github.com/apereo/cas-overlay-template/tree/5. ...

  4. python 将png图片格式转换生成gif动画

    先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...

  5. UOJ#370. 【UR #17】滑稽树上滑稽果 动态规划

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ370.html 题解 首先易知答案肯定是一条链,因为挂在链的最下面肯定比挂在其他节点上赚. 问题被转化成了从一个集合中不断 ...

  6. UOJ#291. 【ZJOI2017】树状数组 树套树

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ291.html 题解 结论:这个写错的树状数组支持的是后缀加和后缀求和.这里的后缀求和在 x = 0 的时 ...

  7. Delphi 10.3版本获取windows系统版本和CPU信息

    procedure TForm1.Button1Click(Sender: TObject); var mm:TRegistry; cpu:string; begin mm:=TRegistry.Cr ...

  8. 输出第n个丑数

    方法一:暴力法 代码如下: 判断是否是丑数 public static boolean isUgly(int n){ while(n!=1){ if(n%2 == 0){ n /= 2; }else ...

  9. 022 Jquery总结

    1.大纲 jQuery 库中的 $() 是什么? 网页上有 5 个div元素,如何使用 jQuery来选择它们? jQuery 里的 ID 选择器和 class 选择器有何不同? 如何在点击一个按钮时 ...

  10. 自动化设计模式Page Object

    https://blog.csdn.net/qq_37546891/article/details/79052054#t1