gpt4 book ai didi

python - 如何通过OpenCV处理VLC UDP流

转载 作者:行者123 更新时间:2023-12-02 16:45:21 24 4
gpt4 key购买 nike

我能够通过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支持的检查,请参见 this link
    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()

关于python - 如何通过OpenCV处理VLC UDP流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50916903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com