如何解决GStreamer + OpenCV视频处理问题
我打算从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中获取帧数?我需要例外的帧数和视频处理技术。
解决方法
这是一个错误,@ alekhin提到了here和here。还提到了如何解决。更改后,您应该重建opencv。
您也说过:
但是,在我的程序中使用VideoCapture时会有很多延迟 所以我决定改用gstreamer管道。
rtsp相机通常将流作为h264/h265
编码数据。如果您尝试通过CPU而不是GPU解码数据,那么速度不会有太大提高。为什么不选择CAP_FFMPEG
标记而不是CAP_GSTREAMER
? CAP_FFMPEG
将比CAP_GSTREAMER
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。