我正在使用OpenCV和GStreamer 0.10 。
我使用此管道通过UDP接收带有python提供的自定义套接字sockfd
的MPEG ts数据包,并将其显示为xvimagesink
,并且它可以正常工作。以下表述该管道:
PIPELINE_DEF = "udpsrc do-timestamp=true name=src blocksize=1316 closefd=false buffer-size=5600 !" \
"mpegtsdemux !" \
"queue !" \
"ffdec_h264 max-threads=0 !" \
"ffmpegcolorspace !" \
"xvimagesink name=video"
现在,我希望从此管道获取一个帧并使用OpenCV显示它。我该怎么做?我对从appsink获取缓冲区数据了解很多。但我仍然不知道如何将这些缓冲区转换为OpenCV的每个帧。感谢您的回复和任何帮助:]
答案 0 :(得分:0)
谢谢,我尝试使用rtph264pay将实时视频流广播到udpsink。以下表达式是针对gst管道的:
PIPELINE_DEF =
"udpsrc name=src !" \
"mpegtsdemux !" \
"queue !" \
"h264parse !" \
"rtph264pay !" \
"udpsink host=127.0.0.1 port=5000"
我构建了一个sdp文件,使其可以被opencv接收,例如videocapture(" 123.sdp")123.sdp,以下内容适用于此sdp文件:
c=IN IP4 127.0.0.1
m=video 5000 RTP/AVP 96
a=rtpmap:96 H264/90000
现在效果很好,只需要删除" blocksize = 1316 closefd = false buffer-size = 5600"释放限制。