В настоящее время я работаю над проектом, который должен выполнить некоторую классификацию потоков HLS в реальном времени. Я использую streamlink и OpenCV для чтения из указанных потоков.
Вот как выглядит мой код (более или менее):
from threading import Thread
import cv2, time
url = streamlink.streams(
'https://www.youtube.com/watch?v=1EiC9bvVGnk')['480p']
capture = cv2.VideoCapture(url.url)
# FPS = 1/X
# X = desired FPS
FPS = 1 / 24
FPS_MS = int(FPS * 1000)
while True:
res, frame = capture.read()
# Do some classification stuff here with the frame that was read.
cv2.imshow('frame', frame)
if cv2.waitKey(FPS_MS) & 0xFF == ord('q'):
break
time.sleep(FPS)
capture.release()
Проблема в том, что в течение примерно 5 секунд я будуиметь возможность беспрепятственного чтения из потока, после чего вызову метода capture.read () требуется ~ 15-20 секунд для возврата, затем еще 5 секунд непрерывной потоковой передачи и еще одна значительная задержка.
У меня нетИдея в чем проблема, почему OpenCV читает каждый кадр за разумное количество времени (примерно равное требуемому FPS), а затем случайным образом через ~ 5 секунд занимает ~ 20 секунд, чтобы прочитать следующий кадр? Я искал в Интернете ответы на этот вопрос, но ничего не помогло.