我正在尝试使用Gstreamer从我的Raspberry pi打开单播udp流。将使用带有OpenCV的C ++应用程序在Windows PC上接收此流。这是我在树莓上使用的shellscript来启动流:
message_id, user_id
我可以使用这样的批处理文件在我的Windows PC上接收和显示素材:
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
为了能够在我的C ++应用程序中使用此流,我使用Opencv。我不熟悉使用Opencv打开流。我正在尝试使用以下代码打开流:
@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
当我运行我的应用程序时,它会在cv :: VideoCapture上限(“udp:// @:5001”)中卡住(不会崩溃);每次。我不确定引号之间的输入参数是什么。当我对流进行连线时,我得到了这个结果:
来源:192.186.0.103目的地:192.168.0.101协议:UDP长度:1442信息:35946-> 5001 Len = 1400
显然,这只是众多软件包中的一个。
任何人都可以帮我解决这些输入参数,或者向我展示另一种在OpenCV中打开流的方法吗?
答案 0 :(得分: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);