2016-12-30 4 views
0

Ich versuche, ein Video von einer Raspberry Pi-Kamera über ein lokales Netzwerk auf meinen PC zu streamen.capture stream von raspberrry pi mit gstreamer in opencv

Auf der Raspberry Pi Seite, verwende ich gstreamer mit dem folgenden Befehl:

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 

Und ich benutze den folgenden Befehl auf der PC-Seite:

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

In diesem Fall wird das Video angezeigt und alles funktioniert gut. Allerdings möchte ich den Stream mit OpenCV in einem C++ - Programm erfassen. Ich versuche dies mit OpenCV 3.2 zu tun, das mit gstreamer-1.0 32bit kompiliert wurde.

Wenn ich den folgenden Code ausführen, um zu versuchen, den Strom zu erfassen:

#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; 
} 

ich die folgende Fehlermeldung erhalten:

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:\opencv\modules\videoio\src\cap_gstreamer.cpp, line 832 

konnte ich andere Ströme OpenCV erhalten, aber ich kann Lass es nicht mit gstreamer arbeiten. Ich suchte nach diesem Problem, aber ich kann nichts hilfreiches finden, also würde ich etwas Hilfe schätzen.

+0

Ich denke, udpsrc könnte Kappen muß den Codierungstyp definieren. Wie 'application/x-rtp, Encoding-name = H264, Nutzlast = 96' statt' application/x-rtp, Nutzlast = 96'. –

+0

Dank für Sie kommentieren, aber das Hinzufügen Kappen schien nicht Materie. – Wopke

Antwort

0

Ich habe dieses Problem einen anderen Versuch gegeben, und es funktioniert jetzt. Ich werde posten, wie ich es gemacht habe, in der Hoffnung, dass andere es leichter haben werden.

folgte ich den Anweisungen von wumpus es funktioniert. Auf der PC-Seite Ich betreibe:

#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; 
} 

Und ich laufen dann auf dem 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 

diese Arbeit Sie gstreamer und rpicamsrc auf dem Raspberry Pi installieren müssen machen.

Darüber hinaus müssen Sie opencv mit gstreamer 32 Bit auf Ihrem PC erstellt haben. Installieren Sie zunächst gstreamer und die Entwicklerversion und kompilieren Sie dann opencv. Unter this finden Sie Hilfe zum Kompilieren von opencv in Visual Studio.