导读
对于想要学习音视频开发的android开发者来说,使用NDK对FFmpeg进行交叉编译是一道必须迈过去的坎,网上关于使用NDK对FFmpeg进行交叉编译的教程有很多,但是不经修改能顺利编译通过的比较少。
其实参照网上的教程不能编译通过很多时候不是人家的教程写的有问题,很多时候更多的是因为环境的差异导致了编译出错,而对于一个入门者来说编译报错了自己却不知道怎么改。
NDK编译FFmpeg
今天我们来使用NDK对FFmpeg进行交叉编译并集成到Android Studio中去。
笔者的开发环境是:
电脑系统 Mac OS
NDK 21.1.6352462
FFmpeg源码5.0.1
1、编写编译脚本
首先我们需要下载好对应版本的NDK和FFmpeg源码,然后我们新建一个编译脚本文件:
注意脚本文件中的注释,要把NDK的路径改为自己的NDK路径,尽可能使用与笔者相同版本的NDK,比如使用NDKr23的版本就可能编译不通过,貌似是因为NDKr23的改掉导致了toolchains下一些列工具找不到了。
2、赋予脚本运行权限
将脚本文件拷贝到下载好的FFmpeg源码目录之下,然后使用命令行赋予脚本可执行权限。
3、运行编译脚本
运行命令行即可进行编译,如果编译成功可以在FFmpeg的源码目录下的文件夹内找到对于的动态库和FFmpeg相关的头文件。因为上述脚本通过配置了编译的输出路径。
注意上述的脚本只编译了arm64-v8a架构的动态库,童鞋们可以尝试下如何编译其他架构的动态库。
集成到Android Studio中
1、 新建Android Studio Native工程
交叉编译成功后,我们通过Android Studio新建一个Native工程,不同的AS版本文件路径可能不一样,比如笔者的项目路径是这样的:
2、拷贝动态库和头文件到工程
然后我们在工程的libs目录下新建一个目录,然后将我们编译出来的动态库文件拷贝到新建的目录中去;
然后我们在cpp目录下新建一个目录用于存放FFmpeg的头文件,创建好之后我们将交叉编译目录下头文件拷贝到新建的中去。
3、修改CMakeLists.txt
下面修改以下CMakeLists.txt配置文件,主要是配置FFmpeg动态库的搜索路径和头文件的搜索路径:
注意上面的文件修改了最终生成的动态库的名字,所以在使用的时候需要注意一下加载正确的动态库。
4、修改build.gradle
这一步的目的主要是为了将libs目录下so文件打包进APK,我们将app目录下build.gradle修改成:
注意注释部分即可。
5、修改native-lib.cpp
最后我们修改一下,在这里返回FFmpeg的配置:
运行如果可以能看到正确的配置信息则说明集成成功。
领取专属 10元无门槛券
私享最新 技术干货