使用 python 从 gst 管道抓取帧到 opencv

Grab the frame from gst pipeline to opencv with python

我正在使用 OpenCV 和 GStreamer 0.10

我使用此管道通过 python 提供的自定义套接字 sockfd 通过 UDP 接收 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 的每一帧。感谢您的回复和任何帮助:]

谢谢,我试过用rtph264pay把直播视频直播到udpsink。以下推荐行用于 gst 管道:

PIPELINE_DEF = 
"udpsrc name=src !" \               
"mpegtsdemux !" \       
"queue !" \               
"h264parse !" \ 
"rtph264pay !" \   
"udpsink host=127.0.0.1 port=5000"  

并且我建了一个sdp文件让它可以被opencv likes 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"就可以解除限制了。