Bytedeco.javacv.FFmpegFrameGrabber 问题

问题描述

我使用以下方法获取可用于程序其他部分的帧数组。但是我遇到了 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 这样相对临时的数据库。如果不了解您需要对正在使用的数据做什么,就很难说。