@@ -12,7 +12,7 @@ def __init__(self, url):
12
12
self .byte_buffer = b""
13
13
self .frame = None
14
14
self .running = False
15
- self .lock = threading . Lock ()
15
+ self .frame_ready = False
16
16
self .thread = None
17
17
18
18
def open (self ):
@@ -24,7 +24,7 @@ def open(self):
24
24
def _update (self ):
25
25
while self .running :
26
26
try :
27
- self .stream = self .session .get (self .url , stream = True , timeout = 0.5 )
27
+ self .stream = self .session .get (self .url , stream = True , timeout = 1 )
28
28
for chunk in self .stream .iter_content (chunk_size = 1024 ):
29
29
if not self .running :
30
30
break
@@ -41,8 +41,8 @@ def _update(self):
41
41
if image .size != 0 :
42
42
frame = cv2 .imdecode (image , cv2 .IMREAD_COLOR )
43
43
if frame is not None :
44
- with self .lock :
45
- self .frame = frame # Always update to the latest frame
44
+ self .frame = frame # Always update to the latest frame
45
+ self .frame_ready = True
46
46
else :
47
47
break
48
48
except requests .RequestException :
@@ -51,14 +51,21 @@ def _update(self):
51
51
continue
52
52
53
53
def read (self ):
54
- #with self.lock:
55
- # Return whether a frame exists and its copy
56
- if self .frame is not None :
57
- #time.sleep(self.sleep_time)
58
- return True , self .frame .copy ()
59
- else :
60
- #time.sleep(self.sleep_time)
61
- return False , None
54
+ # Return whether a frame exists and its copy
55
+ start = time .time ()
56
+ while True :
57
+ if self .frame is not None and self .frame_ready :
58
+ #time.sleep(self.sleep_time)
59
+ self .frame_old = self .frame
60
+ self .frame_ready = False
61
+ return True , self .frame .copy ()
62
+ else :
63
+ end = time .time ()
64
+ time .sleep (1 / 120 )
65
+ if end - start > 1 :
66
+ return False , None
67
+
68
+ #return False, None
62
69
63
70
def isOpened (self ):
64
71
return self .running
0 commit comments