Трубопровод Opencv GStreamer не работает на Raspberry Pi 4 - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь открыть потоковое видео UDP в Raspberry Pi, используя этот конвейер:

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 P C, но RPi 4 (ОС Buster) не может его запустить. Также следующие строки могут запускать предстоящее видео 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

Кроме того, указанный c стек кода (например, [video_udp.cpp] [1]) может легко обрабатывать видео, но также трудно использовать с opencv.

ПРИМЕЧАНИЕ. Версия OpenCV - 4.2.0-pre

1 Ответ

0 голосов
/ 17 января 2020

Проблема заключается в использовании библиотеки GStreamer в качестве плагина OpenCV. OpenCV не создает исключений, даже если вы создаете исходный код без поддержки GStreamer. (По умолчанию библиотека GStreamer была найдена непосредственно Ubuntu, и наоборот, Raspberry Pi 4 не смогла ее найти.)

Сначала я проверяю информацию о сборке OpenCV с помощью std::cout<<cv::getBuildInformation(); на машине Ubuntu 18.04 и обнаруживаю, что:

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.

...