summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--voctocore/lib/audiomix.py17
-rw-r--r--voctocore/lib/commands.py6
-rw-r--r--voctocore/lib/pipeline.py21
-rw-r--r--voctocore/lib/videomix.py7
4 files changed, 41 insertions, 10 deletions
diff --git a/voctocore/lib/audiomix.py b/voctocore/lib/audiomix.py
index bd803b2..24c34a9 100644
--- a/voctocore/lib/audiomix.py
+++ b/voctocore/lib/audiomix.py
@@ -6,7 +6,7 @@ from enum import Enum
from lib.config import Config
class AudioMix(object):
- log = logging.getLogger('VideoMix')
+ log = logging.getLogger('AudioMix')
mixingPipeline = None
@@ -16,4 +16,17 @@ class AudioMix(object):
selectedSource = 0
def __init__(self):
- pass
+ self.caps = Config.get('mix', 'audiocaps')
+
+ pipeline = """
+ interaudiosrc channel=audio_cam1_mixer !
+ {caps} !
+ queue !
+ interaudiosink channel=audio_mix
+ """.format(
+ caps=self.caps
+ )
+
+ self.log.debug('Creating Mixing-Pipeline:\n%s', pipeline)
+ self.mixingPipeline = Gst.parse_launch(pipeline)
+ self.mixingPipeline.set_state(Gst.State.PLAYING)
diff --git a/voctocore/lib/commands.py b/voctocore/lib/commands.py
index 9673e57..c898baf 100644
--- a/voctocore/lib/commands.py
+++ b/voctocore/lib/commands.py
@@ -27,12 +27,12 @@ class ControlServerCommands():
def set_video_a(self, src_name_or_id):
src_id = self.decodeSourceName(src_name_or_id)
- self.pipeline.vmixer.setVideoA(src_id)
+ self.pipeline.vmix.setVideoA(src_id)
return True
def set_video_b(self, src_name_or_id):
src_id = self.decodeSourceName(src_name_or_id)
- self.pipeline.vmixer.setVideoB(src_id)
+ self.pipeline.vmix.setVideoB(src_id)
return True
def set_composite_mode(self, composite_mode):
@@ -41,5 +41,5 @@ class ControlServerCommands():
except KeyError as e:
raise KeyError("composite-mode %s unknown" % composite_mode)
- self.pipeline.vmixer.setCompositeMode(mode)
+ self.pipeline.vmix.setCompositeMode(mode)
return True
diff --git a/voctocore/lib/pipeline.py b/voctocore/lib/pipeline.py
index 03fdd3d..3aa8085 100644
--- a/voctocore/lib/pipeline.py
+++ b/voctocore/lib/pipeline.py
@@ -6,13 +6,17 @@ from gi.repository import Gst
from lib.config import Config
from lib.avsource import AVSource
from lib.avrawoutput import AVRawOutput
+from lib.videomix import VideoMix
+from lib.audiomix import AudioMix
class Pipeline(object):
"""mixing, streaming and encoding pipeline constuction and control"""
log = logging.getLogger('Pipeline')
sources = []
- mirrors = []
+ outputs = []
+ vmix = None
+ amix = None
def __init__(self):
self.log.info('Video-Caps configured to: %s', Config.get('mix', 'videocaps'))
@@ -35,4 +39,17 @@ class Pipeline(object):
self.log.info('Creating Mirror-Output for AVSource %s at tcp-port %u', name, port)
mirror = AVRawOutput('%s_mirror' % name, port)
- self.mirrors.append(mirror)
+ self.outputs.append(mirror)
+
+
+ self.log.info('Creating Videmixer')
+ self.vmix = VideoMix()
+
+ self.log.info('Creating Videmixer')
+ self.amix = AudioMix()
+
+ port = 11000
+ self.log.info('Creating Mixer-Output at tcp-port %u', port)
+
+ output = AVRawOutput('mix', port)
+ self.outputs.append(output)
diff --git a/voctocore/lib/videomix.py b/voctocore/lib/videomix.py
index bcac7d2..dbebede 100644
--- a/voctocore/lib/videomix.py
+++ b/voctocore/lib/videomix.py
@@ -24,13 +24,14 @@ class VideoMix(object):
def __init__(self):
self.caps = Config.get('mix', 'videocaps')
- self.names = Config.getlist('sources', 'video')
+ self.names = Config.getlist('mix', 'sources')
self.log.info('Configuring Mixer for %u Sources', len(self.names))
pipeline = """
videomixer name=mix !
{caps} !
- textoverlay text=mixer halignment=left valignment=top ypad=175 !
+ textoverlay halignment=left valignment=top ypad=175 text=VideoMix !
+ timeoverlay halignment=left valignment=top ypad=175 xpad=400 !
intervideosink channel=video_mix
""".format(
caps=self.caps
@@ -55,7 +56,7 @@ class VideoMix(object):
self.log.debug('Initializing Mixer-State')
self.updateMixerState()
- self.log.debug('Launching Mixing-Pipeline:\n%s', pipeline)
+ self.log.debug('Launching Mixing-Pipeline')
self.mixingPipeline.set_state(Gst.State.PLAYING)
def updateMixerState(self):