大家好,我们又见面了,今天已经连续写了两篇文章了,最近公司项目上线了,所以比较轻松,今天跟大家分享一下如何使用FFmpeg。废话就不多说,我们直接进入正文。
如果你是直接阅读现在的文章,最好先去阅读AndroidStudio中配置FFmpeg和Android中使用FFmpeg这两篇文章再来阅读(FFmpeg的使用)你会比较容易理解。
- 在第一篇文章的时候我们封装了FFmpeg的代码给android调用。代码如下:
public class FFmpegRun {
static {
System.loadLibrary("ffmpeg");
System.loadLibrary("ffmpeginvoke");
}
public static void execute(String[] commands, final FFmpegRunListener fFmpegRunListener) {
new AsyncTask<String[], Integer, Integer>() {
@Override
protected void onPreExecute() {
if (fFmpegRunListener != null) {
fFmpegRunListener.onStart();
}
}
@Override
protected Integer doInBackground(String[]... params) {
return run(params[0]);
}
@Override
protected void onPostExecute(Integer integer) {
if (fFmpegRunListener != null) {
fFmpegRunListener.onEnd(integer);
}
}
}.execute(commands);
}
public native static int run(String[] commands);
public interface FFmpegRunListener{
void onStart();
void onEnd(int result);
}
}
本文我们使用一个例子来介绍如何在android代码中使用FFmpeg。废话不多说直接上代码。
这个例子是提取视频中的音频
private void extractAudio() {
final String outVideo = mTargetPath + "/audio.aac";
String[] commands = FFmpegCommands.extractAudio(getIntent().getStringExtra("path"), outVideo);
FFmpegRun.execute(commands, new FFmpegRun.FFmpegRunListener() {
@Override
public void onStart() {
}
@Override
public void onEnd(int result) {
}
});
}
outVideo为我定义的保存提取出来的音频的本地路径
String[] commands = FFmpegCommands.extractAudio(getIntent().getStringExtra("path"), outVideo);这段代码调用提取音频的ffmpeg的代码得到结果是字符串数组。将得到的字符串数组传给FFmpegRun.execute这样的过程就完成了操作。最后实现两个回调的方法。
onStart:操作开始的时候回调
onEnd:操作结束的回调
本文没有那么多字面上的表达,直接上代码比较清晰可见,如果你阅读了这三篇文基本已经可以使用FFmpeg操作音频和视频了。FFmpeg的底层代码相对比较复杂,没必要去阅读懂底层的代码,能够完成Android开发的功能就算是可以了。下午茶到了,大家在工作过程中记得劳逸结合。后面我还会继续更新其它的文章,如果觉得写得还可以,可以关注继续跟踪,如果觉哪里写得有缺陷的,欢迎提出来。