c++ - GStreamer + OpenCV视频处理问题

标签 c++ opencv gstreamer

我正计划从OpenCV中为视频文件流/实时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)
它总是返回-1,因为GStreamer有此警告
[WARN:0]全局/home/nvidia/Downloads/opencv-4.4.0/source/modules/videoio/src/cap_gstreamer.cpp(898)打开OpenCV | GStreamer警告:无法查询流的持续时间
[WARN:0]全局/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中获取帧数?我需要异常(exception)的帧数和视频处理技术。

最佳答案

这是一个错误,@alekhin提到了herehere。还提到了如何解决。更改后,您应该重建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更快

关于c++ - GStreamer + OpenCV视频处理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63684485/

相关文章:

c++ - Oracle Pro*C 预编译器错误 PCC-S-02201

c++ - put::before 命名空间名称是什么意思?

C++/Opencv 了解正在使用的数据类型

python - 在 EOS 上用 Python 重启 GStreamer 管道

c - 如何控制 gstreamer 管道中的帧速率?

C++ 用微秒解析日期/时间

C++函数动态数据类型定义

opencv - 在 Ubuntu 14.04(64 位)中安装 FFmpeg

opencv - 运动模糊鲁棒边缘检测

ios - Gstreamer IOS 教程中缺少符号