编译FFmpeg
转载整理自:https://www.jianshu.com/p/350f8e083e82
完全按这个文章来,可以顺利编译出FFmpeg的SO文件。
- 编译主要目录
编译工具链目录:
AndroidSDK/ndk/{ndk版本}/toolchains/llvm/prebuilt/darwin-x86_64/bin
交叉编译环境目录:
AndroidSDK/ndk/{ndk版本}/toolchains/llvm/prebuilt/darwin-x86_64/sysroot
- 在
toolchains/llvm/prebuilt/darwin-x86_64/sysroot
目录下,包含了两个目录:usr/include
,usr/lib
,分别对应了头文件
和库文件
。
按照参考链接中的步骤可以很少改动的就编译出FFmpeg的产物
实现步骤
-
配置NDK环境,我是直接用Android Studio下载的,我这边使用的NDK版本是20.0.5594570
-
下载FFmpeg源码
访问地址:http://ffmpeg.org/download.html
可以通过git克隆,也可以通过直接点击下载zip包,我是点击Download Snapshot下载的zip包
-
修改配置脚本
在下载的FFmpeg源码文件夹的更目录下找到configure文件,它是一个Shell脚本,需要做2处修改
-
新增
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="${cross_prefix}${ar_default}" cc_default="${cross_prefix}${cc_default}" cxx_default="${cross_prefix}${cxx_default}" nm_default="${cross_prefix}${nm_default}" pkg_config_default="${cross_prefix}${pkg_config_default}"
将中间两行修改为
ar_default="${cross_prefix}${ar_default}" #------------------------------------------------ cc_default="${cross_prefix_clang}${cc_default}" cxx_default="${cross_prefix_clang}${cxx_default}" #------------------------------------------------ nm_default="${cross_prefix}${nm_default}" pkg_config_default="${cross_prefix}${pkg_config_default}"
-
-
新增编译配置脚本
在下载的FFmpeg源码文件夹的更目录下找到
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=$OUTPUT \ --target-os=android \ --arch=arm \ --cpu=armv7-a \ --enable-asm \ --enable-neon \ --enable-cross-compile \ --enable-shared \ --disable-static \ --disable-doc \ --disable-ffplay \ --disable-ffprobe \ --disable-symver \ --disable-ffmpeg \ --sysroot=$SYSROOT \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --cross-prefix-clang=$TOOLCHAIN/bin/armv7a-linux-androideabi$API- \ --extra-cflags="-fPIC" make clean all # 这里是定义用几个CPU编译 make -j12 make install } build
注意有
两个地方
需要修改,我刚开始没看到只修改了一个地方,导致编译到最后output目录创建失败,只能重新再编译一次! -
进行编译
进入FFmpeg代码目录,在命令行输入
./build_android_clang.sh
经过大概5到10分钟的等待,会在Output目录生成编译产物。
以上。
由于内容基本是转载的,我只是做了精简描述,不是原创的。所以强调一遍原文出处:
https://www.jianshu.com/p/350f8e083e82
原文中有更详细的参数和流程讲解!