Qt6中OpenCV调用FFmpeg拉取RTSP流延迟参数失效如何解决?
Qt6中降低RTSP流延迟的方案探索
我用C++开发Qt6应用,需实现多路RTSP流的显示与可选存储功能,当前采用OpenCV的FFmpeg后端捕获流,代码如下:
m_capture = new cv::VideoCapture("rtsp://user:password@192.168.1.108:504/stream", cv::CAP_FFMPEG); if (!m_capture->isOpened()) { // 错误处理 } cv::Mat frame; m_abort = false; while(!m_abort) { if (!m_capture->read(frame)) { // 错误处理 return; } doStuff(frame); }
该方案可正常运行,但其中一路流存在约3秒的延迟。而在终端执行以下ffplay命令时,几乎无明显延迟:
ffplay -fflags nobuffer -flags low_delay -rtsp_transport tcp "rtsp://user:password@192.168.1.108: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()和retrieve()替代read()
核心问题:如何在Qt应用中禁用OpenCV FFmpeg后端的缓冲,以降低RTSP流的延迟?
也接受其他方案(如QMultiMedia),但暂未找到有效降低延迟的方法。
内容的提问来源于stack exchange,提问作者Dominic
相关产品推荐
相关产品推荐

