Я снимаю видео с веб-камеры и одновременно отображаю в приложении TornadoFX и сохраняю в файл. Я хочу рассказать о случае сбоя соединения с веб-камерой (в настоящее время я отключаю промежуточную программу веб-камеры в качестве теста).
videoCapture и videoWriter вызываются каждые 10 циклов animationTimer для получения видео со скоростью 1 кадр / с, а новый видеофайл сохраняется каждые 200 циклов animationTimer. Все работает правильно с подключенной веб-камерой.
if (t % 10 == 0L) {
try {
videoWriter.write(image)
Core.addWeighted(image, 0.3, meanColor, 0.7, 0.0, meanColor)
g2dRGB.drawImage(CvUtil.mat2Image(image), 0.0, 0.0) //draw image
} catch (cve : Exception) {
videoWriter.write(Mat()) //write filler empty Mat() to file
g2dRGB.drawImage(CvUtil.mat2Image(Mat()), 0.0, 0.0) //draw camera image
videoCapture.release() //close to reopen
videoCapture.open(0) //reopen video stream
}
}
if (t % 500 == 0L && t>0) {
videoWriter.release()
videoWriter.open("D:\\videoOutputTest$fileCount.avi",...))
fileCount++
}
t++
При обнаружении общего исключения приложение перестало работать, когда я отключил веб-камеру.
За исключением того, что текущий файл заполняется последним изображением с веб-камеры до 200-го цикла (хорошо, но я бы предпочел эталонное изображение, например, таймера t), в этот момент новые файлы не генерируются и не заполняются.
Прямая трансляция продолжает показывать последнее изображение в течение неопределенного времени (опять же, временная привязка t будет лучшей, но приоритет заключается в том, чтобы повторно подключить видеопоток, когда я снова подключаю веб-камеру)