我能够通过VLC命令行接收/查看UDP h264数据包(即VLC --network-caching 0 --demux h264 udp:// ...)
我计划通过OpenCV算法处理这些帧。但是,我似乎无法找到将VLC帧发送到我的Python OpenCV脚本的方法。
是否可以通过Numpy在单独的脚本中管理VLC流输出?
我之前曾尝试使用其VideoCapture功能直接流式传输到OpenCV,但出于某种原因,视频会在失真的黑色图像处停止并停止。目前,似乎合并VLC是唯一的解决方案(即使我不完全确定为什么VLC可以在其他方法上工作)。
谢谢。
编辑:
以下是终端上的错误消息片段。看起来前几帧有问题,但我不知道为什么流可以在VLC上工作。从客户端,我首先发送了一个默认的关键帧数据,然后发送视频输入h264数据。
const dotenv = require('dotenv');
dotenv.config({ path: __dirname + '/../.env' });
答案 0 :(得分:1)
您可以使用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()