work with clip node, not with global variable

This commit is contained in:
jb-alvarado 2021-02-10 15:20:26 +01:00
parent fda9bad3c3
commit 74edbf628d
5 changed files with 29 additions and 31 deletions

View File

@ -27,7 +27,7 @@ from watchdog.events import PatternMatchingEventHandler
from watchdog.observers import Observer from watchdog.observers import Observer
from .filters.default import build_filtergraph 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 # folder watcher
@ -87,6 +87,7 @@ class MediaWatcher:
def __init__(self, media): def __init__(self, media):
self._media = media self._media = media
self.extensions = [f'*{ext}' for ext in _storage.extensions] self.extensions = [f'*{ext}' for ext in _storage.extensions]
self.current_clip = None
self.event_handler = PatternMatchingEventHandler( self.event_handler = PatternMatchingEventHandler(
patterns=self.extensions) patterns=self.extensions)
@ -118,7 +119,7 @@ class MediaWatcher:
messenger.info( messenger.info(
f'Move file from "{event.src_path}" to "{event.dest_path}"') 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() _ff.decoder.terminate()
def on_deleted(self, event): def on_deleted(self, event):
@ -126,7 +127,7 @@ class MediaWatcher:
messenger.info(f'Remove file from media list: "{event.src_path}"') 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() _ff.decoder.terminate()
def stop(self): def stop(self):
@ -189,7 +190,8 @@ class GetSourceFromFolder:
self.node, self.node_last, self.node_next, duration, self.node, self.node_last, self.node_next, duration,
0.0, duration, self.probe) 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.index += 1
self.node_last = deepcopy(self.node) self.node_last = deepcopy(self.node)
else: else:

View File

@ -4,7 +4,7 @@ from threading import Thread
from ffplayout.folder import GetSourceFromFolder, MediaStore, MediaWatcher from ffplayout.folder import GetSourceFromFolder, MediaStore, MediaWatcher
from ffplayout.playlist import GetSourceFromPlaylist 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, ffmpeg_stderr_reader, messenger, pre_audio_codec,
stdin_args, terminate_processes) stdin_args, terminate_processes)
@ -60,14 +60,11 @@ def output():
get_source = GetSourceFromFolder(media) get_source = GetSourceFromFolder(media)
try: try:
for src_cmd in get_source.next(): for src_cmd, node in get_source.next():
if src_cmd[0] == '-i': if watcher is not None:
current_file = src_cmd[1] watcher.current_clip = node.get('source')
else:
current_file = src_cmd[3]
_current.clip = current_file messenger.info(f'Play: {node.get("source")}')
messenger.info(f'Play: {current_file}')
dec_cmd = ['ffmpeg', '-v', _log.ff_level.lower(), dec_cmd = ['ffmpeg', '-v', _log.ff_level.lower(),
'-hide_banner', '-nostats' '-hide_banner', '-nostats'

View File

@ -6,7 +6,7 @@ from threading import Thread
from ffplayout.folder import GetSourceFromFolder, MediaStore, MediaWatcher from ffplayout.folder import GetSourceFromFolder, MediaStore, MediaWatcher
from ffplayout.playlist import GetSourceFromPlaylist 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, ffmpeg_stderr_reader, get_date, messenger,
stdin_args, terminate_processes) stdin_args, terminate_processes)
@ -21,7 +21,7 @@ def clean_ts():
playlists = [p for p in _playout.hls_output if 'm3u8' in p] playlists = [p for p in _playout.hls_output if 'm3u8' in p]
for playlist in playlists: for playlist in playlists:
messenger.debug('cleanup *.ts files from: "{}"'.format(playlist)) messenger.debug(f'cleanup *.ts files from: "{playlist}"')
test_num = 0 test_num = 0
hls_path = os.path.dirname(playlist) hls_path = os.path.dirname(playlist)
with open(playlist, 'r') as m3u8: with open(playlist, 'r') as m3u8:
@ -54,15 +54,12 @@ def output():
get_source = GetSourceFromFolder(media) get_source = GetSourceFromFolder(media)
try: try:
for src_cmd in get_source.next(): for src_cmd, node in get_source.next():
messenger.debug('src_cmd: "{}"'.format(src_cmd)) if watcher is not None:
if src_cmd[0] == '-i': watcher.current_clip = node.get('source')
current_file = src_cmd[1]
else: messenger.info(f'Play: {node.get("source")}')
current_file = src_cmd[3]
_current.clip = current_file
messenger.info('Play: "{}"'.format(current_file))
cmd = [ cmd = [
'ffmpeg', '-v', _log.ff_level.lower(), '-hide_banner', 'ffmpeg', '-v', _log.ff_level.lower(), '-hide_banner',
'-nostats' '-nostats'
@ -72,6 +69,8 @@ def output():
'-metadata', 'year={}'.format(year) '-metadata', 'year={}'.format(year)
] + _playout.ffmpeg_param + _playout.hls_output ] + _playout.ffmpeg_param + _playout.hls_output
messenger.debug(f'Encoder CMD: "{" ".join(cmd)}"')
_ff.encoder = Popen(cmd, stdin=PIPE, stderr=PIPE) _ff.encoder = Popen(cmd, stdin=PIPE, stderr=PIPE)
stderr_reader_thread = Thread(target=ffmpeg_stderr_reader, stderr_reader_thread = Thread(target=ffmpeg_stderr_reader,

View File

@ -4,7 +4,7 @@ from threading import Thread
from ffplayout.folder import GetSourceFromFolder, MediaStore, MediaWatcher from ffplayout.folder import GetSourceFromFolder, MediaStore, MediaWatcher
from ffplayout.playlist import GetSourceFromPlaylist 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, _text, ffmpeg_stderr_reader, get_date, messenger,
pre_audio_codec, stdin_args, terminate_processes) pre_audio_codec, stdin_args, terminate_processes)
@ -67,14 +67,11 @@ def output():
get_source = GetSourceFromFolder(media) get_source = GetSourceFromFolder(media)
try: try:
for src_cmd in get_source.next(): for src_cmd, node in get_source.next():
if src_cmd[0] == '-i': if watcher is not None:
current_file = src_cmd[1] watcher.current_clip = node.get('source')
else:
current_file = src_cmd[3]
_current.clip = current_file messenger.info(f'Play: {node.get("source")}')
messenger.info(f'Play: {current_file}')
dec_cmd = ['ffmpeg', '-v', _log.ff_level.lower(), dec_cmd = ['ffmpeg', '-v', _log.ff_level.lower(),
'-hide_banner', '-nostats' '-hide_banner', '-nostats'

View File

@ -73,6 +73,9 @@ class GetSourceFromPlaylist:
self.seek, self.out, self.first, self.last 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): def last_and_next_node(self, index):
if index - 1 >= 0: if index - 1 >= 0:
self.node_last = self.clip_nodes['program'][index - 1] self.node_last = self.clip_nodes['program'][index - 1]
@ -197,4 +200,4 @@ class GetSourceFromPlaylist:
self.eof_handling(True) self.eof_handling(True)
if self.src_cmd is not None: if self.src_cmd is not None:
yield self.src_cmd + self.filtergraph yield self.src_cmd + self.filtergraph, self.node