From 74edbf628d43e9fe74e0f977b83bd7b6bd727c24 Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Wed, 10 Feb 2021 15:20:26 +0100 Subject: [PATCH] work with clip node, not with global variable --- ffplayout/folder.py | 10 ++++++---- ffplayout/output/desktop.py | 13 +++++-------- ffplayout/output/hls.py | 19 +++++++++---------- ffplayout/output/stream.py | 13 +++++-------- ffplayout/playlist.py | 5 ++++- 5 files changed, 29 insertions(+), 31 deletions(-) diff --git a/ffplayout/folder.py b/ffplayout/folder.py index 0e91edb5..4e1c6e06 100644 --- a/ffplayout/folder.py +++ b/ffplayout/folder.py @@ -27,7 +27,7 @@ from watchdog.events import PatternMatchingEventHandler from watchdog.observers import Observer from .filters.default import build_filtergraph -from .utils import MediaProbe, _current, _ff, _storage, messenger, stdin_args +from .utils import MediaProbe, _ff, _storage, messenger, stdin_args # ------------------------------------------------------------------------------ # folder watcher @@ -87,6 +87,7 @@ class MediaWatcher: def __init__(self, media): self._media = media self.extensions = [f'*{ext}' for ext in _storage.extensions] + self.current_clip = None self.event_handler = PatternMatchingEventHandler( patterns=self.extensions) @@ -118,7 +119,7 @@ class MediaWatcher: messenger.info( f'Move file from "{event.src_path}" to "{event.dest_path}"') - if _current.clip == event.src_path: + if self.current_clip == event.src_path: _ff.decoder.terminate() def on_deleted(self, event): @@ -126,7 +127,7 @@ class MediaWatcher: messenger.info(f'Remove file from media list: "{event.src_path}"') - if _current.clip == event.src_path: + if self.current_clip == event.src_path: _ff.decoder.terminate() def stop(self): @@ -189,7 +190,8 @@ class GetSourceFromFolder: self.node, self.node_last, self.node_next, duration, 0.0, duration, self.probe) - yield ['-i', self._media.store[self.index]] + filtergraph + yield ['-i', self._media.store[self.index]] + filtergraph, \ + self.node self.index += 1 self.node_last = deepcopy(self.node) else: diff --git a/ffplayout/output/desktop.py b/ffplayout/output/desktop.py index d43100a8..7312e877 100644 --- a/ffplayout/output/desktop.py +++ b/ffplayout/output/desktop.py @@ -4,7 +4,7 @@ from threading import Thread from ffplayout.folder import GetSourceFromFolder, MediaStore, MediaWatcher from ffplayout.playlist import GetSourceFromPlaylist -from ffplayout.utils import (_current, _ff, _log, _playlist, _pre, _text, +from ffplayout.utils import (_ff, _log, _playlist, _pre, _text, ffmpeg_stderr_reader, messenger, pre_audio_codec, stdin_args, terminate_processes) @@ -60,14 +60,11 @@ def output(): get_source = GetSourceFromFolder(media) try: - for src_cmd in get_source.next(): - if src_cmd[0] == '-i': - current_file = src_cmd[1] - else: - current_file = src_cmd[3] + for src_cmd, node in get_source.next(): + if watcher is not None: + watcher.current_clip = node.get('source') - _current.clip = current_file - messenger.info(f'Play: {current_file}') + messenger.info(f'Play: {node.get("source")}') dec_cmd = ['ffmpeg', '-v', _log.ff_level.lower(), '-hide_banner', '-nostats' diff --git a/ffplayout/output/hls.py b/ffplayout/output/hls.py index 1ea7a69c..1e4f6c0e 100644 --- a/ffplayout/output/hls.py +++ b/ffplayout/output/hls.py @@ -6,7 +6,7 @@ from threading import Thread from ffplayout.folder import GetSourceFromFolder, MediaStore, MediaWatcher from ffplayout.playlist import GetSourceFromPlaylist -from ffplayout.utils import (_current, _ff, _log, _playlist, _playout, +from ffplayout.utils import (_ff, _log, _playlist, _playout, ffmpeg_stderr_reader, get_date, messenger, stdin_args, terminate_processes) @@ -21,7 +21,7 @@ def clean_ts(): playlists = [p for p in _playout.hls_output if 'm3u8' in p] for playlist in playlists: - messenger.debug('cleanup *.ts files from: "{}"'.format(playlist)) + messenger.debug(f'cleanup *.ts files from: "{playlist}"') test_num = 0 hls_path = os.path.dirname(playlist) with open(playlist, 'r') as m3u8: @@ -54,15 +54,12 @@ def output(): get_source = GetSourceFromFolder(media) try: - for src_cmd in get_source.next(): - messenger.debug('src_cmd: "{}"'.format(src_cmd)) - if src_cmd[0] == '-i': - current_file = src_cmd[1] - else: - current_file = src_cmd[3] + for src_cmd, node in get_source.next(): + if watcher is not None: + watcher.current_clip = node.get('source') + + messenger.info(f'Play: {node.get("source")}') - _current.clip = current_file - messenger.info('Play: "{}"'.format(current_file)) cmd = [ 'ffmpeg', '-v', _log.ff_level.lower(), '-hide_banner', '-nostats' @@ -72,6 +69,8 @@ def output(): '-metadata', 'year={}'.format(year) ] + _playout.ffmpeg_param + _playout.hls_output + messenger.debug(f'Encoder CMD: "{" ".join(cmd)}"') + _ff.encoder = Popen(cmd, stdin=PIPE, stderr=PIPE) stderr_reader_thread = Thread(target=ffmpeg_stderr_reader, diff --git a/ffplayout/output/stream.py b/ffplayout/output/stream.py index d1d964ac..c164a359 100644 --- a/ffplayout/output/stream.py +++ b/ffplayout/output/stream.py @@ -4,7 +4,7 @@ from threading import Thread from ffplayout.folder import GetSourceFromFolder, MediaStore, MediaWatcher from ffplayout.playlist import GetSourceFromPlaylist -from ffplayout.utils import (_current, _ff, _log, _playlist, _playout, _pre, +from ffplayout.utils import (_ff, _log, _playlist, _playout, _pre, _text, ffmpeg_stderr_reader, get_date, messenger, pre_audio_codec, stdin_args, terminate_processes) @@ -67,14 +67,11 @@ def output(): get_source = GetSourceFromFolder(media) try: - for src_cmd in get_source.next(): - if src_cmd[0] == '-i': - current_file = src_cmd[1] - else: - current_file = src_cmd[3] + for src_cmd, node in get_source.next(): + if watcher is not None: + watcher.current_clip = node.get('source') - _current.clip = current_file - messenger.info(f'Play: {current_file}') + messenger.info(f'Play: {node.get("source")}') dec_cmd = ['ffmpeg', '-v', _log.ff_level.lower(), '-hide_banner', '-nostats' diff --git a/ffplayout/playlist.py b/ffplayout/playlist.py index 692b857d..815de3a3 100644 --- a/ffplayout/playlist.py +++ b/ffplayout/playlist.py @@ -73,6 +73,9 @@ class GetSourceFromPlaylist: self.seek, self.out, self.first, self.last ) + self.node['in'] = self.seek + self.node['out'] = self.out + def last_and_next_node(self, index): if index - 1 >= 0: self.node_last = self.clip_nodes['program'][index - 1] @@ -197,4 +200,4 @@ class GetSourceFromPlaylist: self.eof_handling(True) if self.src_cmd is not None: - yield self.src_cmd + self.filtergraph + yield self.src_cmd + self.filtergraph, self.node