下载FFmpeg源码
FFmpeg官网下载,直接DownLoad即可。
本文使用的是目前最新的版本 ffmpeg-4.2.2
。
下载好源码后,进入根目录,找到一个名为 congfigure
的文件,这是一个shell脚本,用于生成一些 FFmpeg
编译需要的配置文件。
这个文件非常重要,
FFmpeg
的编译配置就是靠它完成的。
后面我们将对其中一些重要的内容进行分析,这是理解 FFmpeg
编译配置的关键。
有了以上基础以后,就可以对FFmpeg进行编译了。
配置脚本
- 修改 configure 脚本
- 新增
cross_prefix_clang
参数
打开(注:不是双击运行) ffmpeg-4.2.2
根目录下的 configure
文件,搜索 CMDLINE_SET
,可以找到以下代码,然后新增一个命令行选项:cross_prefix_clang
CMDLINE_SET="
$PATHS_LIST
ar
arch
as
assert_level
build_suffix
cc
objcc
cpu
cross_prefix
新增命令行参数
cross_prefix_clang
custom_allocator
cxx
dep_cc
省略其他…
"
- 修改编译工具路径设置
搜索 ar_default="${cross_prefix}${ar_default}"
, 找到以下代码
ar_default=“ c r o s s p r e f i x {cross_prefix} crossprefix{ar_default}”
cc_default=“ c r o s s p r e f i x {cross_prefix} crossprefix{cc_default}”
cxx_default=“ c r o s s p r e f i x {cross_prefix} crossprefix{cxx_default}”
nm_default=“ c r o s s p r e f i x {cross_prefix} crossprefix{nm_default}”
pkg_config_default=“ c r o s s p r e f i x {cross_prefix} crossprefix{pkg_config_default}”
将中间两行修改为
ar_default=“ c r o s s p r e f i x {cross_prefix} crossprefix{ar_default}”
#------------------------------------------------
cc_default=“ c r o s s p r e f i x c l a n g {cross_prefix_clang} crossprefixclang{cc_default}”
cxx_default=“ c r o s s p r e f i x c l a n g {cross_prefix_clang} crossprefixclang{cxx_default}”
#------------------------------------------------
nm_default=“ c r o s s p r e f i x {cross_prefix} crossprefix{nm_default}”
pkg_config_default=“ c r o s s p r e f i x {cross_prefix} crossprefix{pkg_config_default}”
至于为什么这么修改,将在后面的 configure
分析中详细讲解
- 新建编译配置脚本
在 ffmpeg-4.2.2
根目录下新建 shell
脚本,命名为: build_android_clang.sh
#!/bin/bash
set -x
目标Android版本
API=21
CPU=armv7-a
#so库输出目录
OUTPUT=/Users/cxp/Desktop/FFmpeg/ffmpeg-4.2.2/android/$CPU
NDK的路径,根据自己的NDK位置进行设置
NDK=/Users/cxp/Desktop/FFmpeg/android-ndk-r20b
编译工具链路径
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
编译环境
SYSROOT=$TOOLCHAIN/sysroot
function build
{
./configure
–prefix= O U T P U T − − t a r g e t − o s = a n d r o i d − − a r c h = a r m − − c p u = a r m v 7 − a − − e n a b l e − a s m − − e n a b l e − n e o n − − e n a b l e − c r o s s − c o m p i l e − − e n a b l e − s h a