From 2cd8d0945d1244868e2bf4075309eff24e86b758 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 17 Oct 2012 01:16:51 +0200 Subject: encoder and muxer work now --- src/flufigut.py | 193 +++++++++++++++++++++++++++----------------------------- src/test2.json | 22 ++++--- 2 files changed, 106 insertions(+), 109 deletions(-) (limited to 'src') diff --git a/src/flufigut.py b/src/flufigut.py index 44ebddc..7704518 100755 --- a/src/flufigut.py +++ b/src/flufigut.py @@ -107,7 +107,6 @@ elif master > 1: raise SystemExit("You have configured multiple master clock devices!") -samplerates = [] for mux_name in mux.keys(): for format in mux[mux_name]['formats'].keys(): if 'audio' in mux[mux_name]: @@ -115,24 +114,22 @@ for mux_name in mux.keys(): input_samplerate = input[source]['properties']['samplerate'] if 'samplerate' in globals['formats'][format]: samplerate = globals['formats'][format]['samplerate'] - if samplerate not in samplerates: - if samplerate != input_samplerate: - - worker_name = 'resample-%s' % (source) - if worker_name not in worker: - worker[worker_name] = -1 - else: - worker[worker_name] = 1 - feeder = 'input-%s' % (mux[mux_name]['audio']) - flow['input']['resample-%s-%s' % (source, samplerate)] = { - 'type': 'audio-resample', - 'desc': "resample audio from %s to %s Hz" % (source, samplerate), - 'worker': 'resample', - 'feeder': feeder, - 'properties': { - 'samplerate': samplerate, - }, - } + if samplerate != input_samplerate: + worker_name = 'resample-%s' % (source) + if worker_name not in worker: + worker[worker_name] = -1 + else: + worker[worker_name] = 1 + feeder = 'input-%s' % (mux[mux_name]['audio']) + flow['input']['resample-%s-%s' % (source, samplerate)] = { + 'type': 'audio-resample', + 'desc': "resample audio from %s to %s Hz" % (source, samplerate), + 'worker': 'resample', + 'feeder': feeder, + 'properties': { + 'samplerate': samplerate, + }, + } if 'video' in mux[mux_name]: source = mux[mux_name]['video'].split(':')[0] @@ -167,88 +164,84 @@ flow['encoder_video'] = {} flow['encoder_audio'] = {} flow['muxer'] = {} -# for format in transcode.keys(): -# for profile in transcode[format]: -# video_encoder = 'none' -# if 'video' in globals['formats'][format]: -# encoder = globals['formats'][format]['video'] -# resolution = globals['profiles'][profile]['video'] -# bitrate = globals['bitrates'][encoder][resolution] -# if resolution != input_resolution: -# feeder = 'resize-%s' % resolution -# else: -# if input_type == 'av': -# feeder = '%s:%s' % (input_name, "video") -# elif input_type == 'vo': -# feeder = '%s' % (input_name) -# else: -# raise SystemExit("format definition needs audio but no audio input given") -# video_encoder = 'encode-%s-%s' % (encoder, resolution) -# if video_encoder not in flow['encoder_video'].keys(): -# worker_name = 'encoder-%s-%s' % (encoder, resolution) -# if worker_name not in worker: -# worker[worker_name] = -1 -# else: -# worker[worker_name] = 1 -# flow['encoder_video'][video_encoder] = { -# 'type': '%s-encode' % encoder, -# 'desc': "%s encoder for %sx%s" % (encoder, globals['resolutions'][resolution]['width'], globals['resolutions'][resolution]['height']), -# 'worker': worker_name, -# 'feeder': feeder, -# 'properties': { -# 'bitrate': bitrate, -# }, -# } - -# audio_encoder = 'none' -# if 'audio' in globals['formats'][format]: -# encoder = globals['formats'][format]['audio'] -# bitrate = globals['profiles'][profile]['audio'] -# if 'samplerate' in globals['formats'][format]: -# samplerate = globals['formats'][format]['samplerate'] -# else: -# samplerate = input_samplerate - -# if samplerate != input_samplerate: -# feeder = 'resample-%s' % samplerate -# else: -# if input_type == 'av': -# feeder = '%s:%s' % (input_name, "audio") -# elif input_type == 'ao': -# feeder = '%s' % (input_name) -# else: -# raise SystemExit("format definition needs audio but no audio input given") -# audio_encoder = 'encode-%s-%i-%i' % (encoder, bitrate, samplerate) -# if audio_encoder not in flow['encoder_audio']: -# worker_name = 'encoder-%s-%s' % (encoder, bitrate) -# if worker_name not in worker: -# worker[worker_name] = -1 -# else: -# worker[worker_name] = 1 -# flow['encoder_audio'][audio_encoder] = { -# 'type': '%s-encode' % encoder, -# 'desc': "%s encoder for %i kbit/s @ %i Hz" % (encoder, bitrate, samplerate), -# 'worker': worker_name, -# 'feeder': feeder, -# 'properties': { -# 'bitrate': bitrate, -# }, -# } -# muxer = globals['formats'][format]['muxer'] -# worker_name = 'muxer-%s-%s' % (format, profile) -# if worker_name not in worker: -# worker[worker_name] = -1 -# else: -# worker[worker_name] = 1 -# flow['muxer']['muxer-%s-%s' % (format, profile)] = { -# 'type': '%s-mux' % muxer, -# 'desc': "%s muxer profile %s" % (format, profile), -# 'worker': worker_name, -# 'feeder_audio': audio_encoder, -# 'feeder_video': video_encoder, -# 'properties': {}, -# } +for mux_name in mux.keys(): + for format in mux[mux_name]['formats'].keys(): + for profile in mux[mux_name]['formats'][format]: + audio_encoder = 'none' + if 'audio' in mux[mux_name]: + encoder = globals['formats'][format]['audio'] + bitrate = globals['profiles'][profile]['audio'] + if 'samplerate' in globals['formats'][format]: + samplerate = globals['formats'][format]['samplerate'] + else: + samplerate = input_samplerate + + source = mux[mux_name]['audio'].split(':')[0] + input_samplerate = input[source]['properties']['samplerate'] + if samplerate != input_samplerate: + feeder = 'resample-%s-%s' % (source, samplerate) + else: + feeder = mux[mux_name]['audio'] + audio_encoder = 'encode-%s-%s-%i-%i' % (source, encoder, bitrate, samplerate) + if audio_encoder not in flow['encoder_audio']: + worker_name = 'encoder-%s-%s-%s' % (source, encoder, bitrate) + if worker_name not in worker: + worker[worker_name] = -1 + else: + worker[worker_name] = 1 + flow['encoder_audio'][audio_encoder] = { + 'type': '%s-encode' % encoder, + 'desc': "%s encoder for %i kbit/s @ %i Hz, from %s" % (encoder, bitrate, samplerate, source), + 'worker': worker_name, + 'feeder': feeder, + 'properties': { + 'bitrate': bitrate, + }, + } + + video_encoder = 'none' + if 'video' in mux[mux_name]: + encoder = globals['formats'][format]['video'] + resolution = globals['profiles'][profile]['video'] + bitrate = globals['bitrates'][encoder][resolution] + source = mux[mux_name]['video'].split(':')[0] + input_resolution = input[source]['properties']['resolution'] + if resolution != input_resolution: + feeder = 'resize-%s-%s' % (source, resolution) + else: + feeder = mux[mux_name]['video'] + video_encoder = 'encode-%s-%s-%s' % (source, encoder, resolution) + if video_encoder not in flow['encoder_video'].keys(): + worker_name = 'encoder-%s-%s-%s' % (source, encoder, resolution) + if worker_name not in worker: + worker[worker_name] = -1 + else: + worker[worker_name] = 1 + flow['encoder_video'][video_encoder] = { + 'type': '%s-encode' % encoder, + 'desc': "%s encoder for %sx%s, from %s" % (encoder, globals['resolutions'][resolution]['width'], globals['resolutions'][resolution]['height'], source), + 'worker': worker_name, + 'feeder': feeder, + 'properties': { + 'bitrate': bitrate, + }, + } + + muxer = globals['formats'][format]['muxer'] + worker_name = 'muxer-%s-%s-%s' % (mux_name, format, profile) + if worker_name not in worker: + worker[worker_name] = -1 + else: + worker[worker_name] = 1 + flow['muxer']['muxer-%s-%s-%s' % (mux_name, format, profile)] = { + 'type': '%s-mux' % muxer, + 'desc': "%s muxer for %s, profile %s" % (format, mux_name, profile), + 'worker': worker_name, + 'feeder_audio': audio_encoder, + 'feeder_video': video_encoder, + 'properties': {}, + } ### generate streamer components ################################ diff --git a/src/test2.json b/src/test2.json index 310232d..1069187 100644 --- a/src/test2.json +++ b/src/test2.json @@ -31,14 +31,18 @@ "vp8": { "720p25": 2048, "480p25": 1024, "360p25": 600 } }, "machines": { - "calypso": [ "input-sdi-av", "resize-sdi-av", "resample-sdi-av", "input-alsa", "resample-alsa", - "encoder-vorbis-160", "encoder-aac-160", "encoder-aac-128", "encoder-aac-96", - "muxer-flash-high", "muxer-flash-medium", "muxer-flash-low", "muxer-ogg-high", "streamer-local1" ], - "telesto": [ "encoder-h264-720p25", "encoder-h264-480p25", "encoder-h264-360p25" ] + "calypso": [ "input-sdi", "resize-sdi", "resample-sdi", "input-alsa", "resample-alsa", + "encoder-alsa-vorbis-160", "encoder-sdi-vorbis-160", + "encoder-alsa-aac-160", "encoder-alsa-aac-128", "encoder-alsa-aac-96", + "encoder-sdi-aac-160", "encoder-sdi-aac-128", "encoder-sdi-aac-96", + "muxer-av-orig-flash-high", "muxer-av-orig-flash-medium", "muxer-av-orig-flash-low", + "muxer-av-en-flash-high", "muxer-av-en-flash-medium", "muxer-av-en-flash-low", + "muxer-audio-ogg-high", "muxer-audio-en-ogg-high", "streamer-local1" ], + "telesto": [ "encoder-sdi-h264-720p25", "encoder-sdi-h264-480p25", "encoder-sdi-h264-360p25" ] } }, "input": { - "sdi-av": { + "sdi": { "type": "decklink", "master": true, "properties": { @@ -62,21 +66,21 @@ }, "mux": { "av-orig": { - "video": "sdi-av:video", - "audio": "sdi-av:audio", + "video": "sdi:video", + "audio": "sdi:audio", "formats": { "flash": [ "high", "medium", "low" ] } }, "av-en": { - "video": "sdi-av:video", + "video": "sdi:video", "audio": "alsa", "formats": { "flash": [ "high", "medium", "low" ] } }, "audio": { - "audio": "sdi-av:audio", + "audio": "sdi:audio", "formats": { "ogg": [ "high" ] } -- cgit v1.2.3