Я пытаюсь создать плеер на Java, используя JavaCV. Но метод .grab () занимает разное количество времени для каждого захвата. Как мне отменить операцию grab (), если она занимает слишком много времени?
Подробно: я работаю над проектом по отображению потоков RTSP. Для этого я использую JavaCV и его класс FFmpegFrameGrabber. Внутри цикла я вызываю его метод .grab () для захвата кадров, а затем печатаю их на панели.
(Не зная причины) метод grab () в некоторых вызовах занимает гораздо больше времени. Например:
- захват: 15 мс,
- захват: 13 мс,
- захват: 14мс,
- захват: 95 мс,
- захват: 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 () в другом потоке и не ждать, пока это закончится, если это займет слишком много времени. Но на этот раз я получаю EXCEPTION_ACCESS_VIOLATION, когда вызываю метод .grab () до того, как предыдущий еще не закончился. «Вызов .release (); и .restart (); методы перед повторной попыткой захвата» также не устраняет нарушение доступа.
Есть ли параметр настройки для отмены неоправданно длинных захватов? (Или не будет работать без этих кадров (по причине, которую я не знаю))
Спасибо