import ffmpeg from procmanager import ProcManager class Streamer: def __init__(self, screendef: str, screensize: str, videocodec: str, audioindex: int, protocol: str, target: str) -> None: self.screendef = screendef self.screensize = screensize self.videocodec = videocodec self.audioindex = audioindex self.protocol = protocol # should be 'tcp' or 'udp' self.target = target self.process_manager = ProcManager() def __del__(self) -> None: self.stop() def start(self): streams = [] self.input = ffmpeg.input(self.screendef, f='x11grab', r=60, s=self.screensize, hide_banner='-y', loglevel='error') streams.append(self.input) if self.audioindex != -1: self.audio = ffmpeg.input(str(self.audioindex), f='pulse') streams.append(self.audio) self.output = ffmpeg.output(*streams, self.protocol + '://' + self.target, f='mpegts', vcodec=self.videocodec, tune='zerolatency') proc = ffmpeg.run_async(self.output, pipe_stderr=True) self.process_manager.start(proc) def stop(self): self.process_manager.stop()