work with clip node, not with global variable
This commit is contained in:
parent
fda9bad3c3
commit
74edbf628d
@ -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:
|
||||||
|
@ -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'
|
||||||
|
@ -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,
|
||||||
|
@ -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'
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user