[英]Opencv GStreamer pipeline doesn't work on Raspberry Pi 4
[英]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.