захват потока из raspberrry pi с помощью gstreamer в opencv

Я пытаюсь передать видео с камеры raspberry pi на мой компьютер через локальную сеть.

На стороне RaspberryPi я использую gstreamer со следующей командой:

raspivid -n -t 0 -rot 270 -w 960 -h 720 -fps 30 -b 6000000 -o - | gst-launch-1.0 -e -vvvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 ! udpsink host=192.168.1.85 port=5000

И я использую следующую команду на стороне ПК:

gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false

В этом случае видео отображается и все работает нормально. Тем не менее, я хотел бы захватить поток с OpenCV в программе C++. Я пытаюсь сделать это с помощью OpenCV 3.2, скомпилированного с gstreamer-1.0 32bit.

Когда я выполняю следующий код, чтобы попытаться захватить поток:

#include <opencv2/opencv.hpp>

int main(int argc, char *argv[])
{
    cv::VideoCapture cap("udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! appsink");

    return 0;
}

Я получаю следующую ошибку:

GStreamer Plugin: Embedded video playback halted; module udpsrc0 reported: Internal data stream error.

OpenCV Error: Unspecified error (GStreamer: unable to start pipeline) in cvCaptureFromCAM_GStreamer, file:opencvmodulesvideoiosrccap_gstreamer.cpp, line 832

Я мог получать другие потоки с помощью OpenCV, но не могу заставить его работать с gstreamer.
Я искал эту проблему, но не могу найти ничего полезного, поэтому я был бы очень признателен за помощь.

1 ответ

  1. Я дал этой проблеме еще одну попытку, и теперь она работает. Я расскажу, как я это сделал, в надежде, что другим будет легче.

    Я последовал инструкциям wumpus, чтобы заставить его работать.
    На стороне ПК я бегу:

    #include <opencv2/opencv.hpp>
    int main(int argc, char *argv[])
    {
        cv::VideoCapture cap("udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! appsink sync=false");
    
        return 0;
    }
    

    А потом я бегу на raspberry pi:

    gst-launch-1.0 rpicamsrc bitrate=3000000 ! video/x-h264, width=960, height=720 ! h264parse ! queue ! rtph264pay config-interval=1 pt=96 ! gdppay ! udpsink host=192.168.1.85 port=5000
    

    Для выполнения этой работы необходимо установить gstreamer и rpicamsrc на raspberry pi.

    Кроме того, вы должны иметь opencv скомпилирован с GStreamer 32 бит на вашем компьютере. Сначала установите gstreamer, версию разработчика, а затем скомпилируйте opencv. См. справку по компиляции opencv в visual studio.