2016-12-30 9 views
0

ローカルネットワーク経由でラズベリーパイカメラからPCにビデオをストリーミングしようとしています。opencvでgstreamerを使用してraspberrry 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 

をそして、私はPC側で次のコマンドを使用します。この場合、

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

、映像が表示されますすべて正常に動作します。しかし、C++プログラムでOpenCVでストリームをキャプチャしたいと思います。私はgstreamer-1.0 32bitでコンパイルされたOpenCV 3.2を使ってこれをしようとしています。

私はストリームをキャプチャしようとするために、次のコードを実行すると:

#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、payload = 96'の代わりに' application/x-rtp、encoding-name = H264、payload = 96'のように。 –

+0

コメントをいただきありがとうございますが、キャップを追加することは問題にはならないと思われます。 – Wopke

答えて

0

私はこの問題をもう一度試してみましたが、今すぐ動作します。私は、他の人がもっと楽になることを希望して、それをどのようにしたのかを投稿します。

私はwumpusの指示に従って動作させました。 PC側で 私が実行します。

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

をそして私はラズベリーパイ上で実行:あなたはラズベリーパイの上のgstreamerとrpicamsrcをインストールする必要があり、この作業を行うには

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 

またopencvをgstreamer 32ビットでコンパイルする必要があります。最初にgstreamer(開発者用)をインストールし、opencvをコンパイルします。 visual studioでopencvをコンパイルする方法については、thisを参照してください。

関連する問題