2017-01-18 9 views
2

私はGstreamerを使用して自分のラズベリーパイからユニキャストUDPストリームを開こうとしています。このストリームはOpenCVでC++アプリケーションを使用してWindows PCで受信されます。これは私がストリームを開始するためにラズベリーに使うシェルスクリプトです: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 PC上で映像を受信して​​表示することができています:

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

私はそれがCV :: VideoCaptureキャップで(クラッシュしない)立ち往生自分のアプリケーションを実行すると(「UDP:// @:5001」);毎回。私は入力パラメータが引用符の間にあるかどうかはわかりません。私は、ストリームをWiresharkのとき、私はこの結果を得る:

出典:192.186.0.103先:192.168.0.101プロトコル:UDPの長さ:1442情報:> 5001 35946-レン= 1400

明らかにこれがあります多くのパッケージの1つだけです。

これらの入力パラメータを手伝ってくれたり、OpenCVでストリームを開く別の方法を教えてもらえますか?

答えて

0

OpenCvはgstreamerをサポートしており、VideoCaptureにパイプを入力できます。あなたがする必要があるのは、appsinkでパイプを仕上げることです。

あなたが

const char* pipe = "udpsrc port=5001 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! appsink" 
cv::VideoCapture cap(pipe); 
を使用する可能性がありますあなたの場合は

関連する問題