簡體   English   中英

OpenCV無法從樹莓派創建的gstreamer打開網絡流

[英]OpenCV can't open network stream from gstreamer created by raspberry

我正在嘗試使用Gstreamer從我的Raspberry pi打開單播udp流。 將在Windows PC上使用帶有OpenCV的C ++應用程序接收此流。 這是我在樹莓派上用來啟動流的shellscript:

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 cap(“ udp:// @:5001”))上(不會崩潰); 每次。 我不確定引號之間的輸入參數是什么。 當我串流流時,我得到以下結果:

源:192.186.0.103目標:192.168.0.101協議:UDP長度:1442信息:35946-> 5001 Len = 1400

顯然,這只是眾多軟件包之一。

誰能幫助我這些輸入參數,或者告訴我另一種在OpenCV中打開流的方法?

OpenCv支持gstreamer,您可以將管道輸入到VideoCapture。 您需要做的是使用appsink完成管道。

在您的情況下,您可以使用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM