Handle case where process has stopped

This commit is contained in:
Nick Mowen 2023-07-25 19:50:35 -06:00
parent 636de05738
commit cbedc399cb

View File

@ -285,18 +285,32 @@ class AudioEventMaintainer(threading.Thread):
) )
def read_audio(self) -> None: def read_audio(self) -> None:
def log_and_restart() -> None:
if self.stop_event.is_set():
return
time.sleep(self.config.ffmpeg.retry_interval)
self.logpipe.dump()
self.start_or_restart_ffmpeg()
try: try:
self.logger.error("Trying to read from process") chunk = self.audio_listener.stdout.read(self.chunk_size)
audio = np.frombuffer(self.audio_listener.stdout.read(self.chunk_size), dtype=np.int16)
self.logger.error("Finished reading from process") if not chunk:
if self.audio_listener.poll() is not None:
self.logger.error("ffmpeg process is not running, restarting...")
log_and_restart()
return
return
audio = np.frombuffer(chunk, dtype=np.int16)
self.detect_audio(audio) self.detect_audio(audio)
except Exception: except Exception:
self.logger.error( self.logger.error(
"Error reading audio data from ffmpeg process, restarting..." "Error reading audio data from ffmpeg process, restarting..."
) )
time.sleep(self.config.ffmpeg.retry_interval) log_and_restart()
self.logpipe.dump()
self.start_or_restart_ffmpeg()
def run(self) -> None: def run(self) -> None:
self.start_or_restart_ffmpeg() self.start_or_restart_ffmpeg()