OpenCV: установка таймауту на очікування кадру в класі VideoCapture

Всім доброго часу доби! З'явилася тут якось завдання: відтворити RTSP-відеопотік з камери. Т. к. я в достатній мірі знайомий з API OpenCV, було прийнято рішення використовувати саме його. Для захоплення відеопотоку в OpenCV використовується клас VideoCapture. На жаль, мережа досить часто у нас обривається, і ця проблема на моєму рівні не вирішується, тому необхідною умовою для комфортної роботи стала досить швидка реакція на падіння відеопотоку — стандартний таймаут на підключення і очікування наступного кадру становить 30 секунд, причому всередині VideoCapture виклики open() і read() блокують, що змушує писати навколо простого насправді коду різні обгортки зразок виклику їх в окремому потоці і очікування отримання результату в асинхронному режимі. Природно, ніякої радості з цього приводу я не відчував — все це ресурси, які в програмі повинні були йти на інші цілі, не кажучи вже про ускладнення коду. Було прийнято рішення: змінити стандартний таймаут, або додати можливість його зовнішньої установки. Вийшов досить брудний хак, який, втім, може комусь стати в нагоді. Можливо, якщо є спосіб краще — якщо такий є — дуже б хотілося дізнатися його, так що прошу коментарів. В ідеалі — може бути, серед читачів Хабра знайдуться розробники OpenCV, які таки звернуть увагу на цю проблему. Метою було змусити код «працювати, як треба, під Windows x64».

Кому цікаво — прошу під кат.

Читати далі →