【问题标题】:GStreamer + OpenCV video processing problemGStreamer + OpenCV 视频处理问题
【发布时间】:2020-12-20 09:08:01
【问题描述】:

我正计划从 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 警告:无法查询流的持续时间 [警告:0] 全局 /home/nvidia/Downloads/opencv-4.4.0/source/modules/videoio/src/cap_gstreamer.cpp (935) 打开 OpenCV | GStreamer 警告:无法查询视频位置:状态=1,值=1,持续时间=-1

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

【问题讨论】:

    标签: c++ opencv gstreamer


    【解决方案1】:

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

    你也说过:

    但是,VideoCapture 在我的程序中使用时有很多延迟 所以我决定改用 gstreamer 管道。

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

    【讨论】:

    • 在这种情况下,我需要使用 opencv3.4 对吗?因为目前我使用的是 4.4 版。这是我在网上找到的,虽然我还没有验证。有人提到,当您从 filename.mp4 创建 videoCapture 时,opencv 将使用 ffmpeg 进行解复用和解码。但是jetson上ffmeg的Ubuntu apt版本只是cpu。所以我试图通过使用 gst 管道来解决它
    • 哦,澄清一下,我使用视频文件进行调试,但实际用途是做一个 rtsp 流
    • 不需要改版本,只需要添加帖子中提到的一行代码,然后rebuild opencv 4.4.0
    • @YunusTemurlenk 我遇到了完全相同的问题。在查看 GitHub 上的第二个链接时,我看到了一个拉取请求,但没有像您建议的那样添加一行代码。能否请您如此友善并详细说明一下?
    猜你喜欢
    • 2012-06-07
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2012-02-29
    • 1970-01-01
    • 2017-07-28
    • 2017-04-07
    相关资源
    最近更新 更多