Задержка и fps падают при чтении нескольких потоков rstp и записи на диск с помощью opencv - PullRequest
2 голосов
/ 10 февраля 2020

У меня есть несколько потоков. Я пытаюсь записать их на диск. Это скрипт, который я использую -

import cv2
import os

output_dir = "/home/Desktop/stream_rec"

# Load Streams
input_cap = {}
output_cap = {}

fourcc = cv2.VideoWriter_fourcc(*'XVID')

for i in range(2, 6):
    input_cap[i] = cv2.VideoCapture("rtsp://stream@10.0.0.{}".format(i))
    output_cap[i] = cv2.VideoWriter(os.path.join(output_dir, f'D{i}.mp4'), fourcc, 25.0, (1080,1920)[::-1])


# Load Frames
# while all([stream.isOpened() for stream_id, stream in streams.items()]):
while True:

    for stream_id, stream in input_cap.items():

        # Read
        ret, frame = stream.read()

        # Write
        output_cap[stream_id].write(frame)

        # Show
        # frame = cv2.resize(frame, (int(frame.shape[1]/2), int(frame.shape[0]/ 2)))
        if ret:
            cv2.imshow(str(stream_id), frame)
        else:
            break

    if cv2.waitKey(1) & 0xFF == ord('q'): # Press Q to stop recording
        break

# Release Caps
for i in range(2, 6):
    input_cap[i].release()
    output_cap[i].release()

Когда я показываю только потоки, он выглядит в реальном времени. Но когда я пытаюсь записать их на диск, частота кадров значительно падает. Как я могу показать 4 потока и записать их на диск с минимальным влиянием на частоту кадров и задержку?

...