2016-12-30 12 views
0

Я пытаюсь передать видео с малинового pi-камеры на мой компьютер через локальную сеть.захват потока из raspberrry pi с использованием gstreamer в opencv

На стороне 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:\opencv\modules\videoio\src\cap_gstreamer.cpp, line 832 

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

+0

Я думаю, что udpsrc может понадобиться колпачок, определяющий тип кодировки. Подобно 'application/x-rtp, encoding-name = H264, payload = 96' вместо' application/x-rtp, payload = 96'. –

+0

Спасибо за комментарий, но добавление кепок, похоже, не имеет значения. – Wopke

ответ

0

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

Я выполнил инструкции 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. См. this для получения справки по сборке opencv в visual studio.

 Смежные вопросы

  • Нет связанных вопросов^_^