Код: Выделить всё
m_capture = new cv::VideoCapture("rtsp://user:[email protected]:504/stream", cv::CAP_FFMPEG);
if (!m_capture->isOpened()) {
//Error
}
cv::Mat frame;
m_abort = false;
while(!m_abort)
{
if (!m_capture->read(frame))
{
//Error
return;
}
doStuff(frame);
}
Использование этой команды ffplay в терминале работает без заметной задержки. , однако:
Код: Выделить всё
ffplay -fflags nobuffer -flags low_delay -rtsp_transport tcp "rtsp://user:[email protected]:504/stream"
Код: Выделить всё
setenv("OPENCV_FFMPEG_CAPTURE_OPTIONS","rtsp_transport;tcp|fflags;nobuffer|flags;low_delay",1);
- с помощью QMediaPlayer
- установка cv::VideoCapture cv::CAP_PROP_BUFFERSIZE в значение 3
- с использованием методов Grab() и Reget() вместо read()
Я также открыт для совершенно других подходов (например, использования QMultiMedia), но не нашел способа уменьшить задержку с их помощью.
Подробнее здесь: https://stackoverflow.com/questions/787 ... nore-flags