本文基于 Mac OS X + Android Studio 3.2 + FFmpeg 3.3 + CMake。
文章会分为两部分,第一部分是总结一下碰到的几个坑,这样只是因为报错而无法继续的朋友可以先看看是否可以解决问题;第二部分是搭建过程的完整描述(我特意用另一台电脑测试过,可以完美跑起来)。
1、FFmpeg 搭建的常见问题
1.1 NDK 的问题
在编译之前,教程都会让我们修改命令中 NDK 的地址为自己本地的地址,我们当然自然而然地改成了 Android Studio 自带的 ndk-bundle。
然后编译的时候就发现会出现errno.h: No such file or directory
字样的error。
这是因为 Android Studio 自带的 NDK 缺少相关的 .h 文件,从网上额外下载 NDK 然后编译时使用就可以解决问题。(基于 FFmpeg 3.3)
1.2 编译命令的问题
报错信息形如
ffmpeg_build.sh: line 14: ./configure: No such file or directory ffmpeg_build.sh: line 20: --extra-cflags=-Os -fpic -marm: command not found
之类的,请检查一下 Android 编辑脚本的 “/” 后是否有空格。
由于不同系统存在差异,最好找对应系统下他人验证可行的编译命令。
1.3编译相关的版本
编译过程有 NDK 版本、Android 版本、FFmpeg 版本、Android Studio 版本等,不同版本存在差异,最好是完全使用教程描述时的版本。
比如编译命令中包含的 Android 版本
export SYSROOT=$NDK/platforms/android-21/arch-arm/
这里的 android-21
改成 26 就不行,因为搜索了这两个文件夹只有 21 中有需要的 .h 文件。
1.4项目构建配置
需要将相关的 .so 文件和 include 文件夹(里面包含一些头文件)都放入 libs 文件夹中,并在 gradle 文件夹中指定 jni 目录,最后编写 CMake 文件,缺少一步就报错
★文末名片可以免费领取音视频开发学习资料,内容包括(FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)以及音视频学习路线图等等。
见下方!↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
2、FFmpeg 环境配置最佳实践
2.1下载 FFmpeg 源码
git clone https://git.ffmpeg.org/ffmpeg.git
再切到 3.3 分支
git checkout -b 3.3 remotes/origin/release/3.3 复制代码
2.2修改 configure 文件
在下载好的 ffmpeg 文件夹内可以找到一个 configure 文件,将其中的:
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' LIB_INSTALL_EXTRA_CMD='?(RANLIB)"$(LIBDIR)/$(LIBNAME)"' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)' SLIB_INST