当前,我正在一个项目上进行实时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秒来读取下一帧?我在网上寻找该问题的答案,但没有任何帮助。