我正在使用 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”即可解除限制。
关于python - 用python从gst管道抓取帧到opencv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38546602/