def test_audiosource_together_with_per_source_volumes_for_different_sources_raises_an_error(
            self):
        Config.given("mix", "audiosource", "cam2")
        Config.given("source.cam1", "volume", "0.23")

        with self.assertRaises(ConfigurationError):
            audiomixer = AudioMix()
    def test_audiosource_sets_source_volume_to_full(self):
        Config.given("mix", "audiosource", "cam2")

        audiomixer = AudioMix()

        self.assertListEqual(audiomixer.names, ["cam1", "cam2", "grabber"])
        self.assertListEqual(audiomixer.volumes, [0.0, 1.0, 0.0])
    def test_per_source_volumes_set_volumes_to_configured_level(self):
        Config.given("source.cam1", "volume", "0.23")
        Config.given("source.cam2", "volume", "0.0")
        Config.given("source.grabber", "volume", "0.42")

        audiomixer = AudioMix()

        self.assertListEqual(audiomixer.names, ["cam1", "cam2", "grabber"])
        self.assertListEqual(audiomixer.volumes, [0.23, 0.0, 0.42])
示例#4
0
    def __init__(self):
        self.log = logging.getLogger('Pipeline')
        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.sources = []
        self.mirrors = []
        self.previews = []
        self.sbsources = []

        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 Audiomixer')
        self.amix = AudioMix()

        port = 16000
        self.log.info('Creating Mixer-Background VSource at tcp-port %u', port)
        self.bgsrc = VSource('background', port)

        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)

        if Config.getboolean('stream-blanker', 'enabled'):
            names = Config.getlist('stream-blanker', 'sources')
            if len(names) < 1:
                raise RuntimeException(
                    "At least one StreamBlanker-Source must be configured or the StreamBlanker disabled!"
                )
            for idx, name in enumerate(names):
                port = 17000 + idx
                self.log.info(
                    'Creating StreamBlanker VSource %s at tcp-port %u', name,
                    port)

                source = VSource('%s_streamblanker' % name, port)
                self.sbsources.append(source)

            port = 18000
            self.log.info('Creating StreamBlanker ASource at tcp-port %u',
                          port)

            source = ASource('streamblanker', port)
            self.sbsources.append(source)

        self.log.info('Creating StreamBlanker')
        self.streamblanker = StreamBlanker()

        port = 15000
        self.log.info('Creating StreamBlanker-Output at tcp-port %u', port)
        self.streamout = AVRawOutput('streamblanker_out', port)
示例#5
0
    def __init__(self):
        self.log = logging.getLogger('Pipeline')
        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 RuntimeError("At least one AVSource must be configured!")

        self.sources = []
        self.mirrors = []
        self.previews = []
        self.sbsources = []

        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)

            outputs = [name + '_mixer', name + '_mirror']
            if Config.getboolean('previews', 'enabled'):
                outputs.append(name + '_preview')

            source = AVSource(name, port, outputs=outputs)
            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()

        # check if there is an audio source preconfigured
        try:
            audiosource = names.index(Config.get('mix', 'audiosource'))
        except NoOptionError:
            audiosource = 0

        self.log.info('Creating Audiomixer')
        self.amix = AudioMix(audiosource)

        port = 16000
        self.log.info('Creating Mixer-Background VSource at tcp-port %u', port)
        self.bgsrc = AVSource('background', port, has_audio=False)

        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)

        if Config.getboolean('stream-blanker', 'enabled'):
            names = Config.getlist('stream-blanker', 'sources')
            if len(names) < 1:
                raise RuntimeError('At least one StreamBlanker-Source must '
                                   'be configured or the '
                                   'StreamBlanker disabled!')
            for idx, name in enumerate(names):
                port = 17000 + idx
                self.log.info(
                    'Creating StreamBlanker VSource %s '
                    'at tcp-port %u', name, port)

                source = AVSource('{}_streamblanker'.format(name),
                                  port,
                                  has_audio=False)
                self.sbsources.append(source)

            port = 18000
            self.log.info('Creating StreamBlanker ASource at tcp-port %u',
                          port)

            source = AVSource('streamblanker', port, has_video=False)
            self.sbsources.append(source)

            self.log.info('Creating StreamBlanker')
            self.streamblanker = StreamBlanker()

            port = 15000
            self.log.info('Creating StreamBlanker-Output at tcp-port %u', port)
            self.streamout = AVRawOutput('streamblanker_out', port)
    def test_configuring_per_source_volumes_disables_ui_audio_selector(self):
        Config.given("source.cam1", "volume", "1.0")

        audiomixer = AudioMix()
        self.assertEqual(Config.getboolean('audio', 'volumecontrol'), False)
    def test_configuring_audiosource_disables_ui_audio_selector(self):
        Config.given("mix", "audiosource", "cam1")

        audiomixer = AudioMix()
        self.assertEqual(Config.getboolean('audio', 'volumecontrol'), False)
    def test_invalid_audiosource_raises_an_error(self):
        Config.given("mix", "audiosource", "camInvalid")

        with self.assertRaises(ConfigurationError):
            audiomixer = AudioMix()
    def test_no_configured_audiosource_sets_first_to_full(self):
        audiomixer = AudioMix()

        self.assertListEqual(audiomixer.names, ["cam1", "cam2", "grabber"])
        self.assertListEqual(audiomixer.volumes, [1.0, 0.0, 0.0])