如何在JavaCV中为FFmpegFrameGrabber catch()方法设置超时

时间:2019-01-18 15:16:03

标签: java opencv ffmpeg javacv

我正在尝试使用JavaCV在Java中创建播放器。但是.grab()方法每次抓取要花费不同的时间。当时间太长时,我该如何丢弃一个grab()操作?

详细信息:我正在研究一个显示rtsp流的项目。为此,我使用JavaCV及其FFmpegFrameGrabber类。在循环内,我调用其.grab()方法来获取帧,然后将它们打印在面板上。 (不知道原因)grab()方法在某些调用中花费更多时间。例如:

  1. 抓取:15毫秒,
  2. 抓取:13毫秒,
  3. 抓取:14毫秒,
  4. 抓取:95ms,
  5. 抓取:12毫秒,...

我希望不要等待争夺,以防像第四次通话那样花费太长时间。

(很抱歉,由于没有提供有效的代码,它遍历了不同的大类)

我使用以下采集卡选项(由其他同事选择):

grabber.setImageHeight(480);
grabber.setImageWidth(640);
grabber.setOption("reconnect", "1");
grabber.setOption("reconnect_at_eof", "1");
grabber.setOption("reconnect_streamed", "1");
grabber.setOption("reconnect_delay_max", "2");
grabber.setOption("preset", "veryfast");
grabber.setOption("probesize", "192");
grabber.setOption("tune", "zerolatency");
grabber.setFrameRate(30.0);
grabber.setOption("buffer_size", "" + this.bufferSize);
grabber.setOption("max_delay", "500000");
grabber.setOption("stimeout", String.valueOf(6000000));
grabber.setOption("loglevel", "quiet");
grabber.start();

我也尝试在另一个线程中执行grab(),而不是等到它结束后再进行处理。但是这次,当我调用.grab()方法之前,我得到了EXCEPTION_ACCESS_VIOLATION,而上一个方法还没有结束。 “尝试再次获取之前调用.release();和.restart();方法”也无法解决访问冲突。

是否有设置选项可以取消异常长的抓斗? (或者没有这些框架就无法工作(由于我不知道的原因))

谢谢

0 个答案:

没有答案
相关问题