使用 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"就可以解除限制了。
我正在使用 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"就可以解除限制了。