首先,我是个新手,这篇博客只是在其他人的博客上做补充,写这篇博客是为了让像我一样的人少走点弯路。
我开始学习的时候有个疑惑,FFMPEG究竟是个框架还是实现库,因为我学习的博客上面有一些引入第三方库编译的行为,在此说明一下减少初学者的疑惑:FFMPEG是个实现库,但是并没有实现所有的编解码,部分格式的音视频FFMPEG并没有提供直接的编解码,而是提供了引入第三方库的方式来支持。
这篇博客只讲到编译出lib库,lib库编译出来了,后面的事情都是对于这个库的使用学习了。
首先从官网下载源代码:https://ffmpeg.org/download.html
阅读这篇博客,我就是在这篇博客的基础上实现的环境搭建,链接:点我打开
现在开始讲述一下我遇到的问题:
1.没找到编译出libmp3lame库的方法,也没打算copy代码写mk来编译,后来发现上面链接博客中有提供编译好了的so。下载地址
2.ndk编译时只能编译armeabi-v7a,armeabi编译失败。
-----mk中增加LOCAL_ARM_MODE := arm,具体原因请阅读:http://blog.k-res.net/archives/1291.html
3.由于我的jni是用c++写的,而ffmpeg是用C写的,对于引用头文件需要extern “c”
比如这么写:
#ifdef __cplusplus extern "C" { #endif #include "libavcodec/avcodec.h" #include "libavformat/avformat.h" #include "libavfilter/avfilter.h" #ifdef __cplusplus } #endif
4.集成以命令调用ffmpeg,链接:https://blog.csdn.net/mmp591/article/details/77684907
---上面这篇博客中所提到的文件在fftools目录下,文件也有一些变化。变成了这几个文件:cmdutils.c ffmpeg.c ffmpeg_filter.c ffmpeg_opt.c ffmpeg_hw.c
注意mk文件中的include目录包含解压编译的目录ffmpeg-4.0即可,这样就不会出现找不到头文件的问题了,我最初没有include这个,而是一个个补充,最后浪费大量时间,实在是没必要。
暂时只想到了这么多,后面想起了再补充。