GStreamer + OpenCV视频处理问题

GStreamer + OpenCV video processing problem

我正计划从 OpenCV 对视频文件 stream/live rtsp 流进行 VideoCapture。然而,VideoCapture 在我的程序中使用时有很多延迟,所以我决定改用 gstreamer 管道。例如,我使用了

VideoCapture capVideo("filesrc location=CarsDriving.mp4 ! qtdemux ! h264parse ! nvv4l2decoder ! nvvidconv ! video/x-raw, format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink ", CAP_GSTREAMER);

我的程序能够 运行 但如果我要执行类似

capVideo.get(CAP_PROP_FRAME_COUNT)

它总是 returns -1 因为 GStreamer 有这个警告

[ WARN:0] 全局 /home/nvidia/Downloads/opencv-4.4.0/source/modules/videoio/src/cap_gstreamer.cpp (898) 打开 OpenCV | GStreamer 警告:无法查询流的持续时间 [WARN:0] global /home/nvidia/Downloads/opencv-4.4.0/source/modules/videoio/src/cap_gstreamer.cpp (935) 打开 OpenCV | GStreamer 警告:无法查询视频位置:status=1,value=1,duration=-1

如果我将 gstreamer 用于视频管道,我如何在 opencv 中获取帧数?我需要异常的帧数以及视频处理技术。

这是一个错误,@alekhin 提到了 here and here。还提到了如何修复。更改后你应该重建 opencv.

你还说:

However, the VideoCapture has alot of latency when used in my program so i decided to use the gstreamer pipeline instead.

rtsp 相机通常以 h264/h265 编码数据流式传输。如果您尝试通过 CPU 而不是 GPU 解码该数据,它不会给您带来太多速度提升。为什么不选择 CAP_FFMPEG 标志而不是 CAP_GSTREAMERCAP_FFMPEG 会比 CAP_GSTREAMER