NDK r20b ffmpeg 编译脚本 build_android.sh
前言
一顿折腾用老版本 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相关推荐
- 全志a64linux内核编译,全志A64 lichee编译脚本build.sh分析
全志A64 lichee编译脚本build.sh分析 发布时间:2018-08-22 15:58, 浏览次数:269 , 标签: lichee build sh lichee目录下的./build.s ...
- 全志A64 lichee编译脚本build.sh分析
lichee目录下的./build.sh脚本: set -e #用于指此脚本里执行的命令返回值非0时,终止当前脚本的执行.buildroot/scripts/mkcommon.sh $@ #接着执行m ...
- ffmpeg 编译Android
环境 macOS 10.15.4 NDK 21.3.6528147 ffmpeg 4.2.3 1.执行sudo xcodebuild -license,防止编译的时候找不到一些文件报错 2. ...
- Mac 平台 Android FFmpeg 编译与集成实践
文章目录 FFmpeg 是什么 为什么要学 FFmpeg 开发 FFmpeg 编译 1. 编译环境准备 2. FFmpeg 环境配置 3. 完整的脚本 4. FQA 编译小结 在Android Stu ...
- 【Android FFMPEG 开发】音视频基础 和 FFMPEG 编译 ( 音视频基础 | MPEG-4 标准 | Android 开发环境 | FFMPEG 交叉编译 | 安卓项目导入配置 )
本篇博客代码及资源下载 : https://download.csdn.net/download/han1202012/10382762 文章目录 一. 音视频基础 1. 音频基础 (1) 声音要素 ...
- ffmpeg编译android,FFMPEG Android(2) 编译编译静态ffmpeg可执行文件
基础编译,请参考上一篇文章: http://blog.csdn.net/muwesky/article/details/55259945 如果想编译静态ffmpeg可执行文件,编译脚本如下: #!/b ...
- android编译脚本下载,Android编译 Fak_aac心路历程
下载官方库 编译脚本 #!/bin/sh NDK_ROOT=/Users/momo/Library/Android/sdk/ndk-bundle ANDROID_API_VERSION=15 NDK_ ...
- 搭建webassembly网页播放器(三)---emcc编译ffmpeg编译库
经过前面的2个部分,我们完成了环境的搭建,接下来我们使用emcc编译ffmpeg库,注意同样由于软链接的缘故,我们不能在windows和linux的共享文件夹里使用emcc编译ffmpeg, 这里我们 ...
- ffmpeg编译支持h265的rtmp windown版本
一,源码包下载 1.ffmpeg下载 下载地址: https://ffmpeg.org (1)在主页面中找到ffmpeg5.0版本点击 (2)点击下载,这里我下载的是gzip包 2.下载x264代码 ...
最新文章
- 多画面、实时投票,这场上了一晚热搜的超级晚,背后的技术出圈了
- unused function warning message(转)
- PESTEL的风险建模
- zcmu- 聪明的美食家 最长不连续上升子序列(nlogn)
- python定义变量并赋值_Python动态声明变量赋值代码实例
- 响应式编程优点 有效_Reactive(响应式)编程
- DenseNet详述
- android recyclerview gradle,Android RecyclerView 的简单使用
- win10查看pcie设备_壹拓网科技解密WIN10系统使用向日葵开机棒远程开机需要设置几个地方...
- Autofac之自动装配
- uc浏览器将在印度推出电商服务
- double 乘法_老大说:谁要再用double定义商品金额,就自己收拾东西走 | 文末福利...
- 万圣节魅惑手绘插画素材,没想到你是这样的可爱!
- cytoscape插件下载_Cytoscape
- 【面试题】一个号称BAT算法题
- oracle 9i/10g/11g(11.2.0.3)安装包和PATCH下载地址汇总
- idea 如何查看jdk源码
- IDEA2019.3新版本 报错 Cannot resolve column 'ID'
- ❤️万字攻略,详解腾讯面试❤️
- Linux共享内存使用常见陷阱与分析
热门文章
- 面试成功后如何谈薪资?
- Java Class 加密工具 ClassFinal
- 653 Android 8,诺基亚X6手机迎来新的系统固件更新 提升Android 8.1系统流畅性
- 【STM32F407】第6章 ThreadX NetXDUO网络协议栈移植到STM32F407
- 全球与中国内拉床市场深度研究分析报告
- 人才市场-冲刺日志(第四天)
- 语言学句法分析树形图怎么画_英语语言学 句法树形图 两句话分析
- CentOS7 安装edge浏览器
- 裸辞职跨专业考计算机,经验 | 辞职跨考学长的心路历程
- Zerotier——免费的虚拟局域网 | 内网穿透 | 解决方案