问题描述
我使用以下方法获取可用于程序其他部分的帧数组。但是我遇到了 OutOfMemoryError。但是我遇到了 OutOfMemoryError。 有办法吗?
public Frame[] grabFrame(String videoPath) throws FFmpegFrameGrabber.Exception
{
FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(videoPath);
grabber.start();
final Frame[] frames = new Frame[grabber.getLengthInFrames()];
int flag = 0;
int index =0;
Frame frame = null;
while (flag < frames.length)
{
frame = grabber.grab().clone();
if(frame!=null)
{
frames[index] = frame.clone();
index++;
}
flag++;
}
grabber.stop();
grabber.release();
return frames;
}
输出:
线程“main”中的异常 java.lang.OutOfMemoryError: 无法分配新的 BytePointer(6174720): totalBytes = 2014M,physicalBytes = 2155M
解决方法
您需要将帧存储在某处,因为您的应用程序无法将它们全部保存在内存中。
根据您的用例,您可以使用像 Redis 这样相对临时的数据库。如果不了解您需要对正在使用的数据做什么,就很难说。