如何通过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

回到顶部