编译ffmpeg版本:ffmpeg-4.2.1
ndk版本:android-ndk-r17c
准备工作:
一:通过brew下载wget工具。
brew install wget
二:下载mac os平台下的 ndk17
wget https://dl.google.com/android/repository/android-ndk-r17c-darwin-x86_64.zip?hl=zh_cn
三:下在ffmpeg 4.2.1
wget https://ffmpeg.org/releases/ffmpeg-4.2.1.tar.bz2
四:下载下来的是tar包,解压
tar xvf ffmpeg-4.3.1.tar
五:现在进入解压后的ffmpeg文件下,查看configure(脚本文件),可以通过
./configure --help 来查看参数信息,然后编写脚本运行配置参数,来运行configure。
另外提一句。可以进入ffmpeg-4.2.1/doc/examples目录,有ffmpeg如何编解码等代码试例,自行学习。
编写脚本
#! /bin/bash
PREFIX=`pwd`/../android/armeabi-v7a
NDK_ROOT=/Users/7invensun/Desktop/macndk/android-ndk-r17c
TOOLCHAINS=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
CPU=arm-linux-androideabi-
FLAGS="-isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fPIC"
INCLUDES="-isystem $NDK_ROOT/sources/android/support/include"
#--prefix 执行我们生成的文件在那个目录
# \ :换行连接符。一条命令很长,\ 起到了方便查看作用
./ffmpeg-4.2.1/configure \
--prefix=$PREFIX \
--disable-programs \
--enable-small \
--disable-avdevice \
--disable-muxers \
--disable-filters \
--enable-cross-compile \
--cross-prefix=$TOOLCHAINS/bin/$CPU \
--enable-static \
--sysroot=$NDK_ROOT/platforms/android-21/arch-arm \
--extra-cflags="$FLAGS $INCLUDES" \
--extra-cflags="-isysroot $NDK_ROOT/sysroot/" \
--arch=arm \
--target-os=android \
#清理一下
make clean
#清理makefile
make install
#!/bin/bash:指定bash解析器
参数描述:
--prefix:我们编译后的文件输出目录
--disable-programs:不编译执行文件(.exe)
--enable-small:编译的ffmpeg,是否进行优化
--disable-avdevice: 需要通过ffmpeg打开摄像头的话,就不要禁用
--cross-prefix:指明ndk中,编译的头文件和库文件地址
--enable-static:允许编译静态库,动态库默认编译
--arch=arm:编译arm平台的库
--target-os=android:编译android平台可用的库
以上的参数信息都可以在./configure --help中查看具体.
注意:在ffmpeg-4.2.1中,默认使用的是clang编译,但在ndk17中使用的是gcc,所以打开configure文件,关闭默认clang配置。
如何使用vim查看,set number 可以显示行号。
注释4210-4213行,简单粗暴:
4209
4210 #set_default target_os
4211 #if test "$target_os" = android; then
4212 # cc_default="clang"
4213 #fi
4214
最后 ./执行脚本。
cmake配置ffmpeg参考:https://blog.youkuaiyun.com/wangchao1412/article/details/103454371