这段时间开始研究音视频编解码的相关知识,自然少不了学习FFmpeg这个开源项目。网上编译FFmpeg源码有很多教程,但是大部分都过时了,编译的时候还会遇到一大堆错误,踩了不少坑。因此总结了此文章,方便大家后续查阅。
1、下载NDK和FFmpeg
编译Android平台的FFmpeg需要下载NDK和FFmpeg源码:
首先下载NDK,目前官方最新稳定版是r20的版本,但是建议不要下最新的。这里我们为了顺利编译,可以下载r17及以下的版本,这里我们下载了r17c版本,为什么?请看后面的报错处理环节。
然后去FFmepg官网下载最新的源码,目前最新版是ffmpeg-4.1.3.tar.bz2。
2、编写configure配置脚本
编译FFmpeg源码需要通过configure脚本来进行配置,后期根据项目需求可对FFmpeg进行各种裁剪,因此我们可以通过配置脚本来实现。通过指令./configure --help我们可以查看所支持的配置项,网上很多文章有介绍这里就不展开了。
新建build_android.sh文件,并输入以下脚本内容来帮助我们编译FFmpeg。注意更新下第一行的NDK路径修改为你本地下载的r17c路径即可:
#!/bin/bash
NDK=/Users/codezjx/Android/android-ndk-r17c
SYSROOT=$NDK/platforms/android-21/arch-arm
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/arm-linux-androideabi
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
PREFIX=$(pwd)/android/armv7-a
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
build_android()
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-symver \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -D__ANDROID_API__=21 -Os -fpic -marm -march=armv7-a"
make clean
make
make install
}
build_android
3、执行编译并生成.so文件
执行以下指令开始编译FFmpeg
$ chmod +x build_android.sh
$ ./build_android.sh
若最后没有报错,显示以下log,则证明编译成功,会在android/armv7-a下生生成我们需要的.so库和相关的头文件,这个路径也正是我们在--prefix中配置的路径
...
INSTALL libavutil/twofish.h
INSTALL libavutil/version.h
INSTALL libavutil/xtea.h
INSTALL libavutil/tea.h
INSTALL libavutil/lzo.h
INSTALL libavutil/avconfig.h
INSTALL libavutil/ffversion.h
INSTALL libavutil/libavutil.pc
最终android/armv7-a的目录结构大概是这样的:
├── include
│ ├── libavcodec
│ ├── libavfilter
│ ├── libavformat
│ ├── libavutil
│ ├── libswresample
│ └── libswscale
├── lib
│ ├── libavcodec.so
│ ├── libavfilter.so
│ ├── libavformat.so
│ ├── libavutil.so
│ ├── libswresample.so
│ ├── libswscale.so
│ └

本文详述了在Mac上编译Android平台FFmpeg源码的全过程,包括下载NDK和FFmpeg源码,编写configure脚本,解决编译过程中遇到的错误,如C compiler test failed., Unknown option "–disable-ffserver"等问题,以及如何将编译后的.so文件导入到Android项目中使用。"
131756609,10035150,数字农业农村解决方案概述,"['大数据', '农业技术', '解决方案']
1万+

被折叠的 条评论
为什么被折叠?



