- #!/usr/bin/python3
- import logging
- from gi.repository import Gst
- # import library components
- from lib.config import Config
- from lib.avsource import AVSource
- from lib.avrawoutput import AVRawOutput
- from lib.avpreviewoutput import AVPreviewOutput
- 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 = []
- previews = []
- vmix = None
- amix = None
- mixout = None
- def __init__(self):
- self.log.info('Video-Caps configured to: %s', Config.get('mix', 'videocaps'))
- self.log.info('Audio-Caps configured to: %s', Config.get('mix', 'audiocaps'))
- names = Config.getlist('mix', 'sources')
- if len(names) < 1:
- raise RuntimeException("At least one AVSource must be configured!")
- self.log.info('Creating %u Creating AVSources: %s', len(names), names)
- for idx, name in enumerate(names):
- port = 10000 + idx
- self.log.info('Creating AVSource %s at tcp-port %u', name, port)
- source = AVSource(name, port)
- self.sources.append(source)
- port = 13000 + idx
- 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)
- if Config.getboolean('previews', 'enabled'):
- port = 14000 + idx
- self.log.info('Creating Preview-Output for AVSource %s at tcp-port %u', name, port)
- preview = AVPreviewOutput('%s_preview' % name, port)
- self.previews.append(preview)
- 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)
- self.mixout = AVRawOutput('mix_out', port)
- if Config.getboolean('previews', 'enabled'):
- port = 12000
- self.log.info('Creating Preview-Output for AVSource %s at tcp-port %u', name, port)
- self.mixpreview = AVPreviewOutput('mix_preview', port)
|