class StreamManager(threading.Thread): stream_manager = None def get_stream_manager(): if StreamManager.stream_manager is None: StreamManager.stream_manager = StreamManager() return StreamManager.stream_manager def __init__(self): self.thread = None self.callbacks = [] self.ffmpeg_manager = FFMpegManager() def error(self, error): """ Creates an error window informing the user that the passed process has crashed. """ error_window = ErrorWindow() error_window.set_output(error) error_window.show() def start(self): assert self.thread == None self.thread = StreamThread(self) self.thread.start() notification_manager.notify("Streaming started") def stop(self): self.ffmpeg_manager.stop() self.thread = None notification_manager.notify("Streaming stopped") def is_running(self): if self.thread is not None: return self.thread.is_alive() return False def send_callbacks(self): for callback in self.callbacks: callback(self) def subscribe(self, callback): self.callbacks.append(callback) def unsubscribe(self, callback): self.callbacks.remove(callback)
import sys import time from ffmpeg import FFMpegProc from config import Config from ffmpeg_manager import FFMpegManager if __name__ == "__main__": args = ' '.join(sys.argv[1:]) cfg = Config() ffmpeg = FFMpegProc(args) process = ffmpeg.run() if process is None: ffmpeg.stop() sys.exit(1) cfg.FFMPEG_PID = str(process.pid) cfg.save_status_to_files() ffmpeg_manager = FFMpegManager(ffmpeg) ffmpeg_manager.run() while True: try: time.sleep(0.5) if ffmpeg.finish: break except KeyboardInterrupt: break ffmpeg.stop() ffmpeg_manager.stop() time.sleep(1) sys.exit(1)
def __init__(self): self.thread = None self.callbacks = [] self.ffmpeg_manager = FFMpegManager()