From cfae754c4a5d20431a42ed8d3864eec51de3c490 Mon Sep 17 00:00:00 2001 From: MaZderMind Date: Thu, 26 Nov 2015 23:14:25 +0100 Subject: [voctocore] aggregate asource and vsource into avsource, fixes #23 --- voctocore/lib/avsource.py | 66 +++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 31 deletions(-) (limited to 'voctocore/lib/avsource.py') diff --git a/voctocore/lib/avsource.py b/voctocore/lib/avsource.py index ecd5b0f..88d85f2 100644 --- a/voctocore/lib/avsource.py +++ b/voctocore/lib/avsource.py @@ -6,58 +6,62 @@ from lib.config import Config from lib.tcpsingleconnection import TCPSingleConnection class AVSource(TCPSingleConnection): - def __init__(self, name, port): + def __init__(self, name, port, outputs=None, has_audio=True, has_video=True): self.log = logging.getLogger('AVSource['+name+']') super().__init__(port) + if outputs is None: + outputs = [name] + + assert has_audio or has_video + self.name = name + self.has_audio = has_audio + self.has_video = has_video + self.outputs = outputs def on_accepted(self, conn, addr): pipeline = """ fdsrc fd={fd} ! matroskademux name=demux - - demux. ! - {acaps} ! - queue ! - tee name=atee - - atee. ! queue ! interaudiosink channel=audio_{name}_mixer - atee. ! queue ! interaudiosink channel=audio_{name}_mirror """.format( - fd=conn.fileno(), - name=self.name, - acaps=Config.get('mix', 'audiocaps') + fd=conn.fileno() ) - if Config.getboolean('previews', 'enabled'): + if self.has_audio: pipeline += """ - atee. ! queue ! interaudiosink channel=audio_{name}_preview + demux. ! + {acaps} ! + queue ! + tee name=atee """.format( - name=self.name + acaps=Config.get('mix', 'audiocaps') ) - pipeline += """ - demux. ! - {vcaps} ! - queue ! - tee name=vtee + for output in self.outputs: + pipeline += """ + atee. ! queue ! interaudiosink channel=audio_{output} + """.format( + output=output + ) - vtee. ! queue ! intervideosink channel=video_{name}_mixer - vtee. ! queue ! intervideosink channel=video_{name}_mirror - """.format( - fd=conn.fileno(), - name=self.name, - vcaps=Config.get('mix', 'videocaps') - ) - - if Config.getboolean('previews', 'enabled'): + if self.has_video: pipeline += """ - vtee. ! queue ! intervideosink channel=video_{name}_preview + demux. ! + {vcaps} ! + queue ! + tee name=vtee """.format( - name=self.name + vcaps=Config.get('mix', 'videocaps') ) + for output in self.outputs: + pipeline += """ + vtee. ! queue ! intervideosink channel=video_{output} + """.format( + output=output + ) + self.log.debug('Launching Source-Pipeline:\n%s', pipeline) self.receiverPipeline = Gst.parse_launch(pipeline) -- cgit v1.2.3