#!/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. centOS7在VirtualBox中装好后的网络连接问题

    1. 环境 物理机OS:Windows 7 虚拟机:VirtualBox 虚拟机OS:CentOS7 2. 虚拟机网络设置 (该部分内容参考于网络,未深究原因,待后续研究补充) 网卡1设置如下图: 网 ...

  2. 九 Jenkins持续集成

    随时随地将代码合并的方法叫做 持续集成 =================================================================== 视频用的10.0.0.1 ...

  3. Revit二次开发 推荐

    学习revit二次开发,建议还是先把revit熟悉一下,去建立一下模型,亲自感受一下是如何创建模型的流程,其中会遇到什么问题.这样在自己做二次开发的时候,一些问题自己就能提前想到,规避掉.我大概用了半 ...

  4. Python学习笔记十二

    HTML全称:Hyper Text Markup Language超文本标记语言 不是编程语言 HTML使用标记标签来描述网页 2.  HTML标签 开始标签,结束标签.  例如:<html&g ...

  5. html_Dom

    Document: 每个载入浏览器的HTML文档都会成为一个Document对象. Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问. 并且Document 对象是 Wi ...

  6. JMeter通过beanShell脚本生成随机手机号

    package xnzx; /** * @author xn088587 * */ public class getTel{ public static int getNum(int start,in ...

  7. Python学习(四十三)—— Djago-admin管理工具

    一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...

  8. 数组中的第K个最大元素leetcode(Top K的问题)

    在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 ...

  9. vue-cli3.0使用及配置

    1.先全局安装vue-cli3.0 检测安装: vue -V 2.创建项目(这个就跟react创建脚手架项目比较像了)   这里如果你是第一次用3.0版本的话,是没有前两个的,而只有最后两个,这里是 ...

  10. 七、OpenStack—dashboard组件安装

    1.安装包# yum install openstack-dashboard2.编辑 /etc/openstack-dashboard/local_settings 文件 需要更改的几处内容如下: ) ...