Python 使用摄像头或IP摄像头加快网络设备的视频播放速度
我正在尝试使用python中的flask api从我的raspberry pi流式传输视频。以便我可以在工作站上处理单个帧。就数据传输而言,它运行良好。然而,在客户端,读取帧的过程引入了1-3秒的延迟,这在实时应用程序中是不可取的。我可以在我的web浏览器中观看视频播放,而不需要任何延迟,这证明我的raspberry pi和网络是无辜的。问题在于从字节流读取单个帧的方法。关于在这样的应用程序中消除延迟的任何想法。下面是我的客户端应用程序代码。示例应用程序的完整源代码可在以下位置找到: 主要建议:Python 使用摄像头或IP摄像头加快网络设备的视频播放速度,python,opencv,flask,raspberry-pi,video-streaming,Python,Opencv,Flask,Raspberry Pi,Video Streaming,我正在尝试使用python中的flask api从我的raspberry pi流式传输视频。以便我可以在工作站上处理单个帧。就数据传输而言,它运行良好。然而,在客户端,读取帧的过程引入了1-3秒的延迟,这在实时应用程序中是不可取的。我可以在我的web浏览器中观看视频播放,而不需要任何延迟,这证明我的raspberry pi和网络是无辜的。问题在于从字节流读取单个帧的方法。关于在这样的应用程序中消除延迟的任何想法。下面是我的客户端应用程序代码。示例应用程序的完整源代码可在以下位置找到: 主要建议:
- 搜索结束标记,然后搜索开始标记
- 读取更多数据(例如64kb)
- 删除其他帧并仅显示最后一帧
import cv2
import urllib
import numpy as np
stream = urllib.urlopen('http://192.168.100.128:5000/video_feed')
bytes = ''
while True:
buff = stream.read(64 * 1024)
bytes += buff
if buff.rfind(b'\xff\xd9') != -1: # buff is smaller than bytes
endmark = bytes.rfind(b'\xff\xd9') + 2
startmark = bytes[:endmark - 2].rfind(b'\xff\xd8')
jpg = bytes[startmark:endmark] # please, check indexes! I could mess up with them.
bytes = bytes[endmark:]
img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
cv2.imshow('Video', img)
if cv2.waitKey(1) == 27:
exit(0)
我找不到stream.read的行为。若他等到缓冲区满了,你们就需要减小缓冲区的大小。若他只是读取N字节或直到流结束,那个么它将工作 主要建议:
- 搜索结束标记,然后搜索开始标记
- 读取更多数据(例如64kb)
- 删除其他帧并仅显示最后一帧
import cv2
import urllib
import numpy as np
stream = urllib.urlopen('http://192.168.100.128:5000/video_feed')
bytes = ''
while True:
buff = stream.read(64 * 1024)
bytes += buff
if buff.rfind(b'\xff\xd9') != -1: # buff is smaller than bytes
endmark = bytes.rfind(b'\xff\xd9') + 2
startmark = bytes[:endmark - 2].rfind(b'\xff\xd8')
jpg = bytes[startmark:endmark] # please, check indexes! I could mess up with them.
bytes = bytes[endmark:]
img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
cv2.imshow('Video', img)
if cv2.waitKey(1) == 27:
exit(0)
我找不到stream.read的行为。若他等到缓冲区满了,你们就需要减小缓冲区的大小。若他只是读取N字节或直到流结束,那个么它将工作 让我试试这个。嘿,我已经转移到项目的其他部分,现在我的目标检测和电机驱动部分完成了,我又回到了视频流部分。我试着增加或减少缓冲区大小,但没有效果。在另一边,视频流从浏览器流畅地播放。让我试试这个。嘿,我已经转移到项目的其他部分,现在我的目标检测和电机驱动部分完成了,我又回到了视频流部分。我试着增加或减少缓冲区大小,但没有效果。另一方面,视频流从浏览器流畅地播放。