0

我正在尝试使用此管道在 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()返回 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

4

1 回答 1

0

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

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

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 映像检查此问题。

于 2020-01-17T11:36:47.190 回答