前言

一顿折腾用老版本 NDK 编译成功了,然后再研究研究新版本的
毕竟要与时俱进嘛 ヾ(•ω•`)o
本文脚本均通过本地编译测试,如有问题清结合本地情况相应修改
注:NDK 路径别忘了改(除非用户名,放 NDK 的地方都和我一样,嘿嘿)
本脚本支持使用 Windows10 WSL 编译

环境

  • NDK r20b (Linux 64 位)
  • ffmpeg 4.2.2

armv7-a

#!/bin/bash
NDK=/home/guoguang/Android/android-ndk-r20b
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
#这里修改的是最低支持的android sdk版本(r20版本ndk中armv8a、x86_64最低支持21,armv7a、x86最低支持16)
API=16function build_android
{echo "Compiling FFmpeg for $CPU"./configure \--prefix=$PREFIX \--disable-neon \--disable-hwaccels \--disable-gpl \--disable-postproc \--enable-shared \--enable-jni \--disable-mediacodec \--disable-decoder=h264_mediacodec \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-avdevice \--disable-doc \--disable-symver \--cross-prefix=$CROSS_PREFIX \--target-os=android \--arch=$ARCH \--cpu=$CPU \--cc=$CC \--cxx=$CXX \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAGecho "Configure complete!"
make clean
echo "Start building..."
make -j4
echo "Start installing..."
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}#armv7-a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"build_android

armv8-a

#!/bin/bash
NDK=/home/guoguang/Android/android-ndk-r20b
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64/
#这里修改的是最低支持的android sdk版本(r20版本ndk中armv8a、x86_64最低支持21,armv7a、x86最低支持16)
API=21function build_android
{#相当于Android中Log.i
echo "Compiling FFmpeg for $CPU"./configure \--prefix=$PREFIX \--disable-neon \--disable-hwaccels \--disable-gpl \--disable-postproc \--enable-shared \--enable-jni \--disable-mediacodec \--disable-decoder=h264_mediacodec \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-avdevice \--disable-doc \--disable-symver \--cross-prefix=$CROSS_PREFIX \--target-os=android \--arch=$ARCH \--cpu=$CPU \--cc=$CC \--cxx=$CXX \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAGecho "Configure complete! cleaning lase make..."
make clean
echo "Start building..."
make -j4
echo "Start installing..."
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}#armv8-a
ARCH=arm64
CPU=armv8-a
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"build_android

原脚本及说明

包含 armv7-a armv8-a x86 x86_64
脚本来自下方大佬文章,有少许改动

#!/bin/bash
NDK=/mnt/e/Android/android-ndk-r20b
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
# API=29function build_android
{echo "Compiling FFmpeg for $CPU"
./configure \--prefix=$PREFIX \--disable-neon \--disable-hwaccels \--disable-gpl \--disable-postproc \--enable-shared \--enable-jni \--disable-mediacodec \--disable-decoder=h264_mediacodec \--disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-avdevice \--disable-doc \--disable-symver \--cross-prefix=$CROSS_PREFIX \--target-os=android \--arch=$ARCH \--cpu=$CPU \--cc=$CC--cxx=$CXX--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}#armv8-a
API=21
ARCH=arm64
CPU=armv8-a
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android#armv7-a
API=16
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"
build_android#x86
API=16
ARCH=x86
CPU=x86
CC=$TOOLCHAIN/bin/i686-linux-android$API-clang
CXX=$TOOLCHAIN/bin/i686-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/i686-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
build_android#x86_64
API=21
ARCH=x86_64
CPU=x86-64
CC=$TOOLCHAIN/bin/x86_64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/x86_64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"
build_android

注:以下为参数说明,不可直接运行

#!/bin/bash
NDK=/home/junt/Documents/android-ndk-r20
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64/
#这里修改的是最低支持的android sdk版本(r20版本ndk中armv8a、x86_64最低支持21,armv7a、x86最低支持16)
API=29function build_android
{#相当于Android中Log.i
echo "Compiling FFmpeg for $CPU"
#调用同级目录下的configure文件
./configure \
#指定输出目录--prefix=$PREFIX \
#各种配置项,想详细了解的可以打开configure文件找到Help options:查看--disable-neon \--disable-hwaccels \--disable-gpl \--disable-postproc \
#配置跨平台编译,同时需要disable-static--enable-shared \--enable-jni \--disable-mediacodec \--disable-decoder=h264_mediacodec \
#配置跨平台编译,同时需enable-shared   --disable-static \--disable-doc \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-avdevice \--disable-doc \--disable-symver \
#关键点1.指定交叉编译工具目录--cross-prefix=$CROSS_PREFIX \
#关键点2.指定目标平台为android--target-os=android \
#关键点3.指定cpu类型--arch=$ARCH \
#关键点4.指定cpu架构--cpu=$CPU \
#超级关键点5.指定c语言编译器--cc=$CC--cxx=$CXX
#关键点6.开启交叉编译--enable-cross-compile \
#超级关键7.配置编译环境c语言的头文件环境--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}#armv8-a
ARCH=arm64
CPU=armv8-a
#r20版本的ndk中所有的编译器都在/android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/目录下(clang)
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
#头文件环境用的不是/android-ndk-r20/sysroot,而是编译器//android-ndk-r20/toolchains/llvm/prebuilt/linux-x86_64/sysroot
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
#交叉编译工具目录,对应关系如下(不明白的可以看下图)
# armv8a -> arm64 -> aarch64-linux-android-
# armv7a -> arm -> arm-linux-androideabi-
# x86 -> x86 -> i686-linux-android-
# x86_64 -> x86_64 -> x86_64-linux-android-
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
#输出目录
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
#方法调用
build_android

参考文章: 1.0-FFMPEG-Android利用ndk(r20)编译最新版本ffmpeg4.2.1

NDK r20b ffmpeg 编译脚本 build_android.sh相关推荐

  1. 全志a64linux内核编译,全志A64 lichee编译脚本build.sh分析

    全志A64 lichee编译脚本build.sh分析 发布时间:2018-08-22 15:58, 浏览次数:269 , 标签: lichee build sh lichee目录下的./build.s ...

  2. 全志A64 lichee编译脚本build.sh分析

    lichee目录下的./build.sh脚本: set -e #用于指此脚本里执行的命令返回值非0时,终止当前脚本的执行.buildroot/scripts/mkcommon.sh $@ #接着执行m ...

  3. ffmpeg 编译Android

    环境 macOS 10.15.4    NDK 21.3.6528147   ffmpeg 4.2.3 1.执行sudo xcodebuild -license,防止编译的时候找不到一些文件报错 2. ...

  4. Mac 平台 Android FFmpeg 编译与集成实践

    文章目录 FFmpeg 是什么 为什么要学 FFmpeg 开发 FFmpeg 编译 1. 编译环境准备 2. FFmpeg 环境配置 3. 完整的脚本 4. FQA 编译小结 在Android Stu ...

  5. 【Android FFMPEG 开发】音视频基础 和 FFMPEG 编译 ( 音视频基础 | MPEG-4 标准 | Android 开发环境 | FFMPEG 交叉编译 | 安卓项目导入配置 )

    本篇博客代码及资源下载 : https://download.csdn.net/download/han1202012/10382762 文章目录 一. 音视频基础 1. 音频基础 (1) 声音要素 ...

  6. ffmpeg编译android,FFMPEG Android(2) 编译编译静态ffmpeg可执行文件

    基础编译,请参考上一篇文章: http://blog.csdn.net/muwesky/article/details/55259945 如果想编译静态ffmpeg可执行文件,编译脚本如下: #!/b ...

  7. android编译脚本下载,Android编译 Fak_aac心路历程

    下载官方库 编译脚本 #!/bin/sh NDK_ROOT=/Users/momo/Library/Android/sdk/ndk-bundle ANDROID_API_VERSION=15 NDK_ ...

  8. 搭建webassembly网页播放器(三)---emcc编译ffmpeg编译库

    经过前面的2个部分,我们完成了环境的搭建,接下来我们使用emcc编译ffmpeg库,注意同样由于软链接的缘故,我们不能在windows和linux的共享文件夹里使用emcc编译ffmpeg, 这里我们 ...

  9. ffmpeg编译支持h265的rtmp windown版本

    一,源码包下载 1.ffmpeg下载 下载地址: https://ffmpeg.org (1)在主页面中找到ffmpeg5.0版本点击 (2)点击下载,这里我下载的是gzip包 2.下载x264代码 ...

最新文章

  1. 多画面、实时投票,这场上了一晚热搜的超级晚,背后的技术出圈了
  2. unused function warning message(转)
  3. PESTEL的风险建模
  4. zcmu- 聪明的美食家 最长不连续上升子序列(nlogn)
  5. python定义变量并赋值_Python动态声明变量赋值代码实例
  6. 响应式编程优点 有效_Reactive(响应式)编程
  7. DenseNet详述
  8. android recyclerview gradle,Android RecyclerView 的简单使用
  9. win10查看pcie设备_壹拓网科技解密WIN10系统使用向日葵开机棒远程开机需要设置几个地方...
  10. Autofac之自动装配
  11. uc浏览器将在印度推出电商服务
  12. double 乘法_老大说:谁要再用double定义商品金额,就自己收拾东西走 | 文末福利...
  13. 万圣节魅惑手绘插画素材,没想到你是这样的可爱!
  14. cytoscape插件下载_Cytoscape
  15. 【面试题】一个号称BAT算法题
  16. oracle 9i/10g/11g(11.2.0.3)安装包和PATCH下载地址汇总
  17. idea 如何查看jdk源码
  18. IDEA2019.3新版本 报错 Cannot resolve column 'ID'
  19. ❤️万字攻略,详解腾讯面试❤️
  20. Linux共享内存使用常见陷阱与分析

热门文章

  1. 面试成功后如何谈薪资?
  2. Java Class 加密工具 ClassFinal
  3. 653 Android 8,诺基亚X6手机迎来新的系统固件更新 提升Android 8.1系统流畅性
  4. 【STM32F407】第6章 ThreadX NetXDUO网络协议栈移植到STM32F407
  5. 全球与中国内拉床市场深度研究分析报告
  6. 人才市场-冲刺日志(第四天)
  7. 语言学句法分析树形图怎么画_英语语言学 句法树形图 两句话分析
  8. CentOS7 安装edge浏览器
  9. 裸辞职跨专业考计算机,经验 | 辞职跨考学长的心路历程
  10. Zerotier——免费的虚拟局域网 | 内网穿透 | 解决方案