2017-01-18 11 views
2

Я пытаюсь открыть поток одноадресной udp из моей малины pi с использованием Gstreamer. Этот поток будет получен на ПК с Windows, используя приложение C++ с OpenCV. Это shellscript я использую на малину, чтобы запустить поток:OpenCV не может открыть сетевой поток из gstreamer, созданного малиной

raspivid -t 0 -h 1080 -w 1920 -fps 30 -hf -vf -n -b 6000000 -o - | gst-launch-1.0 -e -vvvv fdsrc ! h264parse ! rtph264pay config-interval=5 pt=96 ! udpsink host=192.168.0.101 port=5001 

Я могу получать и отображать кадры на моем ПК с Windows, используя пакетный файл, как это:

@echo off 
cd C:\gstreamer\1.0\x86_64\bin 
gst-launch-1.0 -e -v udpsrc port=5001 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false 

Чтобы быть способный использовать этот поток в моем приложении на C++, я использую Opencv. Я не знаком с открытием потока с помощью Opencv. Я пытаюсь открыть поток, используя следующий код:

cv::VideoCapture cap("udp://@:5001"); 
    if (!cap.isOpened()) { 
     printf("=ERR= can't create video capture\n"); 
     return -1; 
    } 

Когда я запускаю мое приложение, она застревает (не разбивая) в резюме :: VideoCapture колпачком («УДП: // @: 5001»); каждый раз. Я не уверен, что входные параметры находятся между кавычками. Когда я WIRESHARK поток я получаю этот результат:

Источник: 192.186.0.103 Направление: 192.168.0.101 Протокол: UDP Длина: 1442 Информация: 35946-> 5001 Len = 1400

Очевидно, что это просто один из множества пакетов.

Может ли кто-нибудь помочь мне с этими входными параметрами или показать мне другой способ открыть поток в OpenCV?

ответ

0

OpenCv поддерживает gstreamer, и вы можете вводить каналы в VideoCapture. Что вам нужно сделать, это закончить свою трубку с помощью приложений.

В вашем случае вы можете использовать

const char* pipe = "udpsrc port=5001 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! appsink" 
cv::VideoCapture cap(pipe);