2

我正在使用OpenCV和 GStreamer 0.10

我使用这个管道通过 UDP 接收 MPEG ts 数据包,并使用sockfdpython 提供的自定义套接字并将其显示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 的每一帧。感谢您的回复,以及任何帮助:]

4

1 回答 1

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”即可解除限制。

于 2016-07-27T16:27:39.290 回答