前言
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
。