Updated view example

This commit is contained in:
Mark Qvist 2024-03-27 18:37:13 +01:00
parent 48908842c6
commit 6700b7f8b7

View File

@ -158,7 +158,7 @@ class CameraSource(ViewSource):
self.camera_ready = False self.camera_ready = False
class StreamSource(ViewSource): class StreamSource(ViewSource):
DEFAULT_IDLE_TIMEOUT = 5 DEFAULT_IDLE_TIMEOUT = 10
def __init__(self, url=None): def __init__(self, url=None):
self.url = url self.url = url
@ -180,19 +180,18 @@ class StreamSource(ViewSource):
try: try:
while max(self.last_update, self.started)+self.idle_timeout > time.time(): while max(self.last_update, self.started)+self.idle_timeout > time.time():
ret, frame = self.stream.read() ret, frame = self.stream.read()
self.stream_ready = True
if not ret: if not ret:
self.stream_ready = False self.stream_ready = False
break else:
self.stream_ready = True
if not self.frame_queue.empty(): if not self.frame_queue.empty():
if self.frame_queue.qsize() > 1: if self.frame_queue.qsize() > 1:
try: try:
self.frame_queue.get_nowait() self.frame_queue.get_nowait()
except queue.Empty: except queue.Empty:
pass pass
self.frame_queue.put(frame) self.frame_queue.put(frame)
RNS.log(str(self)+" idled", RNS.LOG_DEBUG) RNS.log(str(self)+" idled", RNS.LOG_DEBUG)
@ -206,7 +205,10 @@ class StreamSource(ViewSource):
self.start_reading() self.start_reading()
while not self.stream_ready: while not self.stream_ready:
time.sleep(0.2) time.sleep(0.2)
if self.stream == None:
self.source_data = None
return
frame = self.frame_queue.get() frame = self.frame_queue.get()
retval, buffer = cv2.imencode(".png", frame) retval, buffer = cv2.imencode(".png", frame)
self.source_data = io.BytesIO(buffer).getvalue() self.source_data = io.BytesIO(buffer).getvalue()
@ -320,4 +322,4 @@ register_view_sources()
# Finally, tell Sideband what class in this # Finally, tell Sideband what class in this
# file is the actual plugin class. # file is the actual plugin class.
plugin_class = ViewCommandPlugin plugin_class = ViewCommandPlugin