如何通过OpenCV处理VLC UDP流
我能够通过VLC命令行接收/查看UDP h264数据包(即VLC –network-caching 0 –demux h264 udp:// …)
我正计划通过OpenCV算法处理那些帧。但是,我似乎找不到找到将VLC帧发送到我的Python OpenCV脚本的方法。
是否可以在单独的脚本中通过Numpy传递要处理的VLC流输出?
之前,我曾尝试使用其VideoCapture函数直接将视频流传输到OpenCV,但是由于某些原因,视频停顿并停止在失真的黑色图像上。目前看来,合并VLC似乎是唯一的解决方案(尽管我不确定为什么VLC可以替代其他方法)。
谢谢。
编辑:
以下是终端上的错误消息的摘要。前几帧似乎有问题,但我不知道为什么该流在VLC上有效。从客户端,我首先发送了默认关键帧数据,然后发送了视频供稿h264数据。
[h264 @ 0x7f9c50020200] top block unavailable for requested intra mode -1[h264 @ 0x7f9c50020200] error while decoding MB 7 0, bytestream 7208
[h264 @ 0x7f9c50020200] top block unavailable for requested intra mode -1
[h264 @ 0x7f9c50020200] error while decoding MB 8 9, bytestream 7381
回答:
您可以使用ffmpeg进行流式传输。
首先在终端中测试ffmpeg流。在Linux中,我们用来v4l2
从相机抓取帧。
:
ffmpeg -f v4l2 -i /dev/video0 -preset ultrafast -vcodec libx264 -tune zerolatency -b 900k -f h264 udp://127.0.0.1:5000
:
ffplay udp://127.0.0.1:5000
如果您能够在客户端上查看流,那么我们可以使用OpenCV进行图像处理。OpenCV必须具有ffmepg支持。请参阅此链接以获取ffmpeg支持检查。
cap = cv2.VideoCapture('udp://127.0.0.1:5000',cv2.CAP_FFMPEG) if not cap.isOpened():
print('VideoCapture not opened')
exit(-1)
while True:
ret, frame = cap.read()
if not ret:
print('frame empty')
break
cv2.imshow('image', frame)
if cv2.waitKey(1)&0XFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
以上是 如何通过OpenCV处理VLC UDP流 的全部内容, 来源链接: utcz.com/qa/414284.html