#!/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. MySQL时区错误导致server time zone value 'Öйú±ê׼ʱ¼ä' 错误

    时区错误 由于中国是东八区,跟mysql配置不同,需要修改: 管理员登录MySQL OK成功

  2. FHQ-Treap小结

    \(Orz\) 范浩强大爷,竟然搞出了如此夺天地造化的数据结构. \(FHQ-Treap\),又名非旋\(Treap\),是范浩强大爷在某些奇特的灵感之下发明的一种平衡树,因其与\(Treap\)相似 ...

  3. Windows10远程报错:由于CredSSP加密Oracle修正导致远程失败

    解决方案:Windows 10 家庭版,没有 gpedit.msc,只能修改本地电脑的注册表,在本地“运行”输入: regedit   按以下目录进入:HKEY_LOCAL_MACHINE\Softw ...

  4. C语言第01次作业--顺序、分支结构

    1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本周我学到了很多C语言中基础的结构和语法(见思维导图),能对一些生活中的简单问题对应编写程序解决一些这些简单 ...

  5. 有意思的算法题:有10个文件,每个文件大概有10G,求里面最大的100个数;

    算法思路 1: 第一个阶段:对于单个10G文件而言 1. 初始化:先取100个数,构建最小堆: 开始比较: 2. 取一个数 A,与最小堆的根节点进行比较: 3. 如果 A > 最小堆根节点,则替 ...

  6. 指针*p,p,&p等辨别

    #include<iostream> #include<iomanip> #include<cmath> using namespace std; int main ...

  7. selenium操作浏览器的前进和后退

    前进关键字:driver.forward() 后退关键字:driver.back() 测试对象:1.https://www.baidu.com/ 2.https://www.sogou.com/ 实例 ...

  8. ISP PIPLINE (十三) CSM/CSC(color space matrix/convert)

    1.RGB为何要转换为YCbCr,历史遗留问题! 一般一个技术如果为了保证原有的设备可以继续使用,就需要兼容以前的技术.黑白电视到彩色电视的进化就是转换为YCbCr的原因,同时YCbCr比RGB传输占 ...

  9. python程序入门 基础教程

    1.VSCode基础使用+VSCode调试python程序入门 2.pip 安装 3.scrapy安装 4.python解析xml

  10. vue-cli 2篇官方文档记录收藏

    https://cli.vuejs.org/guide/ http://vuejs-templates.github.io/webpack/