内存不足-Android
我在Android应用程序中使用ffmpeg,有时会出现内存不足错误,我在HandlerThread中调用ffmpeg,在主线程继续运行时捕获内存不足错误并退出线程可以吗 我读了很多这不是一个好的实践,问题是我真的需要它,因为当出现任何类型的错误时,我必须编辑数据库内存不足-Android,android,out-of-memory,Android,Out Of Memory,我在Android应用程序中使用ffmpeg,有时会出现内存不足错误,我在HandlerThread中调用ffmpeg,在主线程继续运行时捕获内存不足错误并退出线程可以吗 我读了很多这不是一个好的实践,问题是我真的需要它,因为当出现任何类型的错误时,我必须编辑数据库 fc = new FfmpegController(context, fileTmp); try { fc.processVideo(clip_in, clip_out, false,
fc = new FfmpegController(context, fileTmp);
try {
fc.processVideo(clip_in, clip_out, false,
new ShellUtils.ShellCallback() {
@Override
public void shellOut(String shellLine) {
}
@Override
public void processComplete(int exitValue) {
//Update the DB
}
});
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
} catch (InterruptedException e) {
} catch (Exception e) {
}catch (OutOfMemoryError e) {
//update the DB
}
若你们能从记忆错误中解脱出来,就不会有什么问题。我会考虑缓冲你的音频,因为你很可能一次通过ffmpeg运行整个剪辑,这将消耗大量内存 另外,请记住,我们中的许多人在安卓系统中制作音频最终使用NDK,主要是因为您遇到了类似的问题。音频必须是真正的高性能,使用NDK可以让您编写更低级别的内存效率的音频处理
Android的AudioTrack有一个写入方法,允许您将音频缓冲区推送到其中。警告:这不是入门级,需要了解AudioBuffer的一些知识,还需要您读入缓冲区,将其发送到ffmpeg,然后传递到AudioTrack。不容易做到,不幸的是,Android上更高级的音频并不容易。如何缓冲音频?@AdroidFreak编辑更新了我的答案。它需要使用AudioTrack。在线上有一些指南,但有一个警告说,在Android上,这也不是一个简单的音频。