我正在 LAN 网络上读取 rtsp 流。当它是单个或 2 个流时,它运行平稳,但当我在 2 个以上的流上尝试它时,它开始给我一个灰色的屏幕,其中几乎没有可见的像素。
cap = cv2.VideoCapture(rtsp_uri)
cap.set(cv2.CAP_PROP_BUFFERSIZE, 2)
fps = cap.get(cv2.CAP_PROP_FPS)
delay_after_each_frame = 1/fps
print(delay_after_each_frame)
while True:
try:
ret, frame = cap.read()
except:
pass
if self.stopper[camera_id]:
del self.stopper[camera_id]
return
if not ret:
continue
frame = cv2.cvtColor(src=frame, code=cv2.COLOR_BGR2RGB)
frame = cv2.resize(
frame,
(self.config.frame_width, self.config.frame_height)
)
queue.enqueue(frame)
time.sleep(delay_after_each_frame)
这里我使用队列来存储帧,并且该脚本在线程中运行。
有什么方法可以让我一次读取来自多个摄像机的流而没有那些灰色帧。 这是我得到的框架。
用于多个流和输出的代码。
for camera_id in self.config.get_camera_ids():
if camera_id not in self.threads:
self.threads[camera_id] = Thread(
target=self.process_rtsp_stream,
args=(self.config.get_rtsp(camera_id),
self.queues[camera_id], camera_id)
)
self.threads[camera_id].daemon = True
self.threads[camera_id].start()
# remove thread for deleted cameras
for camera_id in self.threads:
if camera_id not in self.config.get_camera_ids():
del self.threads[camera_id]
对我来说也是一样,如果我有 2 个流,它会在快速变化时变灰。
我打算在python上改用pyAV或pyRTSP或FFMPEG来抓取帧
另一件事是获取图像,否则当您在 ffmpeg 上流式传输时,会像 PILL 一样从屏幕上抓取图像