一、概述
在Android开发中,我们对一些音视频的处理比较无力,特别是编辑音视频这部分。而且在Android上对视频编辑方面,几乎没有任何API做支持,MediaCodec(硬编码)也没有做支持。那怎么办呢?在FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg中我们知道ffmpeg命令行能够编辑音视频。感觉对于编辑音视频这方面的需求貌似只能使用FFMPEG来实现了(肯定还有别的办法,但是FFMPEG绝对是最普遍的解决方案)。然而在Android上使用FFMPEG也不是一件容易的事情,比较正统的办法就是使用NDK来变异,但是NDK编译的成本实在是太高,而且开发难度极大。本文提供了一个比较靠谱的方法来实现在Android上使用FFMPEG编辑音视频。
二、NDK编译
虽然使用NDK编译是难度极高的方案,但是得说明一下NDK编译FFMPEG才是最合适与优秀的解决方案。
介绍下NDK编译FFMPEG所需要具备的要求:
- C语言
- 熟练地使用NDK
- 了解FFMPEG源码,至少源码中的API得熟悉
- 音视频知识
有了这些技术知识,那么你就能可以开始尝试用NDK编译FFMPEG了。
三、使用开源项目(WritingMinds/ffmpeg-android-java)
首先上链接 https://github.com/WritingMinds/ffmpeg-android-java
具体的使用方法在GitHub上已经有比较详细的介绍了,不作过多赘述了。
在自己项目中使用只要在gradle中引用如下类库即可。
compile 'com.writingminds:FFmpegAndroid:0.3.2'
下面主要介绍下该种方法的优缺点。
优点:
- 开发成本低,快速
- 学习成本低,只要掌握FFMPEG的命令调用即可
- 对一些简单的编辑操作,性能上没有太大额外的消耗
缺点:
- 支持库容量大,导致APK变大(可能要30M左右)
- 没法像NDK一样在源码层就组装成需求所需要的功能,而导致性能的额外消耗
- 不够灵活,可能会出现意想不到的错误。
- 开源库的维护不确定性
四、总结
对于在Android上使用FFMPEG的问题上,首先推荐使用NDK编译的方法。在时间不允许的情况下,可以使用开源库,当然必须忍受APK包变大这个问题。各位可以权衡自己的需求来做出选择。