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)
Beispiel #2
0
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()