Opencv GStreamer 管道不适用于 Raspberry Pi 4

Opencv GStreamer pipeline doesn't work on Raspberry Pi 4

我正在尝试使用此管道在 Raspberry Pi 中打开 UDP 流视频:

VideoCapture video("udpsrc port=5600 ! application/x-rtp,payload=96,encoding-name=H264 !"
                           "rtpjitterbuffer mode=1 ! rtph264depay ! h264parse ! decodebin ! videoconvert ! appsink emit-signals=true sync=false max-buffers=2 drop=true", cv::CAP_GSTREAMER);
   // Exit if video is not opened
          if(!video.isOpened())
          {
              cout << "Could not read video file" << endl;
              return 1;
          }

但是,video.isOpened() return false,我无法使用此代码打开。这适用于环回测试和另一台 Ubuntu 18.04 PC 但 RPi 4 (Buster OS) 不能 运行 它。此外,以下几行可以 运行 即将发布的 gstream 视频:

gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink fps-update-interval=1000 sync=false

更具体的代码堆栈(例如[video_udp.cpp][1])可以轻松处理视频,但很难与 opencv 一起使用。

注意:OpenCV 版本为 4.2.0-pre

问题是关于使用 GStreamer 库作为 OpenCV 的插件。即使您在没有 GStreamer 支持的情况下构建源代码,OpenCV 也不会抛出异常。 (默认情况下,GStreamer库直接被Ubuntu找到,反之Raspberry Pi4找不到。)

首先我在 Ubuntu 18.04 机器上使用 std::cout<<cv::getBuildInformation(); 检查 OpenCV 的构建信息,发现:

GStreamer: YES (1.14.5)

此外,我只是在 Raspberry Pi 4 侧检查了这个,构建信息是:

GStreamer:NO

在构建 OpenCV 之前,我只是将 GStreamer 插件与它们的 gst-inspect-1.0 命令进行比较,我只是安装了一些缺少的插件,例如 gstreamer1.0-tools 。在检查构建信息之前我也不知道问题所在,所以我安装了一些目前我不记得的其他 GStreamer 插件。

最后, 我通过添加 -D WITH_GSTREAMER=ON 标志来构建系统。现在效果很好。

如果问题与缺少的插件有关,这些插件稍后安装,我将编辑答案。为此,我将使用干净的 Buster OS 图像检查此问题。