微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bytedeco.javacv.FFmpegFrameGrabber 问题

如何解决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 这样相对临时的数据库。如果不了解您需要对正在使用的数据做什么,就很难说。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。