前言
NDK 全称 Native Development Kit,也就是原生开发工具包 ,官网对它有详细的 中文介绍 。可能一说到 NDK 或 JNI ,大家脑子里第一反应就是集成 C/C++ 。其实 JNI 的含义是 Java Native Interface ,这种接口允许 Java 和其他语言进行交互的,包括但不限于 C/C++ 。目前 Rust 也可以通过 JNI 来和 Java 交互,虽然不太成熟。
其实 NDK 更像一个桥梁,来连通 Java 和其他语言,它是一系列工具的集合。既然作为工具, NDK 并非必须在 Android 项目中才能用。本文我们来通过 NDK 对 FFmpeg 5.0 进行编译,生成动态链接库 so 。

注:本文的 Java 泛指 JVM 语言,不要拿 Kotlin 抬杠,本质太大的区别 。本文测试项目源码地址【TolyFFmpeg】
一、环境准备
想要编译 FFmpeg 应用 Android 中的动态链接库,我们要准备两个东西:一者是 FFmpeg 的源码;二者是 NDK 的工具包。这两者都可以通过简单的下载获得。
1、FFmpeg 源码下载:5.0.1
作为一个开源项目,想得到源码还是非常简单的。可以在官网直接下载源码,也可以通过 git 来下载,或者点击More releases 来选择某个版本进行下载。 ffmpeg.org/download.ht…

源码解压如下,里面的 doc 文件夹有些文档和案例,还是比较有用的。其余的东西暂时对我们来说并没有什么太大的意义,现在我们的目的是通过这个源码通过 NDK 来编译成在 Android 中可以使用的动态链接库 so 文件。

可能会有人疑惑,那就是 so 库嘛,下载别人的用不就完事了吗?原因很简单,自己编译 FFmpeg 可以手动设置需要的功能,如果直接别人编译好的,就没有设置的机会。而且自己编译也能掌握版本,也就是说,自己动手丰衣足食。
2、下载 NDK :r24
可以在如下网站中下载 NDK 的工具包,不过在 macOS 中更推荐用 Android SDK 管理器来下载,如下在 AndroidStudio 中选择 NDK 点击 OK 下载即可。这里下载的是最新版 r24 (24.0.8215888) 。

下载过后 你的AndroidSDK/ndk/24.0.8215888 会议相关文件,说明 NDK 环境准备就绪。

二、编译 FFmpeg
编译 FFmpeg ,只要是使用 ndk 中的编译根据,在 $ndkPath/toolchains/llvm/prebuilt/ 下,不同平台的文件名不同,比如 macOS 中是 darwin-x86_64 。

本文介绍了NDK的基本概念,并详细讲解如何使用NDK编译FFmpeg源码生成Android平台的so库。首先,介绍了NDK的下载与FFmpeg源码获取。接着,提供了编译FFmpeg的步骤,包括编写编译脚本和执行编译命令。最后,讨论了如何在Android Studio项目中集成编译后的FFmpeg库,通过修改build.gradle文件、配置CMakeLists.txt以及编写C++代码实现功能。
最低0.47元/天 解锁文章
717

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



