put None to buffer when we out of sync, cleanup

This commit is contained in:
jb-alvarado 2019-05-27 21:19:43 +02:00
parent cb05dd5e50
commit eef7507916

View File

@ -271,12 +271,12 @@ def is_int(value):
# compare clip play time with real time, # compare clip play time with real time,
# to see if we are sync # to see if we are sync
def check_sync(begin): def check_sync(begin, buffer):
time_now = get_time('full_sec') time_now = get_time('full_sec')
# around 2.5 seconds is in ffmpeg buffer # around 2.5 seconds is in ffmpeg buffer
# TODO: more tests for a good value # TODO: more tests for a good value
tolerance = 15 tolerance = 40
time_distance = begin - time_now time_distance = begin - time_now
if 0 <= time_now < _playlist.start and not begin == _playlist.start: if 0 <= time_now < _playlist.start and not begin == _playlist.start:
@ -293,6 +293,7 @@ def check_sync(begin):
if _general.stop and abs(time_distance) > _general.threshold: if _general.stop and abs(time_distance) > _general.threshold:
logger.error('Sync tolerance value exceeded, program terminated!') logger.error('Sync tolerance value exceeded, program terminated!')
buffer.put(None)
sys.exit(1) sys.exit(1)
@ -457,7 +458,7 @@ def src_or_dummy(src, dur, seek, out):
# prepare input clip # prepare input clip
# check begin and length from clip # check begin and length from clip
# return clip only if we are in 24 hours time range # return clip only if we are in 24 hours time range
def gen_input(src, begin, dur, seek, out, last): def gen_input(has_begin, src, begin, dur, seek, out, last):
day_in_sec = 86400.0 day_in_sec = 86400.0
ref_time = day_in_sec + _playlist.start ref_time = day_in_sec + _playlist.start
time = get_time('full_sec') time = get_time('full_sec')
@ -468,7 +469,9 @@ def gen_input(src, begin, dur, seek, out, last):
# calculate time difference to see if we are sync # calculate time difference to see if we are sync
time_diff = out - seek + time time_diff = out - seek + time
if (time_diff <= ref_time or begin < day_in_sec) and not last: if not has_begin:
return src_or_dummy(src, dur, seek, out), None
elif (time_diff <= ref_time or begin < day_in_sec) and not last:
# when we are in the 24 houre range, get the clip # when we are in the 24 houre range, get the clip
return src_or_dummy(src, dur, seek, out), None return src_or_dummy(src, dur, seek, out), None
elif time_diff < ref_time and last: elif time_diff < ref_time and last:
@ -583,8 +586,9 @@ def build_filtergraph(first, duration, seek, out, ad, ad_last, ad_next, dummy):
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
# read values from json playlist # read values from json playlist
class GetSourceIter: class GetSourceIter(object):
def __init__(self): def __init__(self, buffer):
self.buffer = buffer
self.last_time = get_time('full_sec') self.last_time = get_time('full_sec')
if 0 <= self.last_time < _playlist.start: if 0 <= self.last_time < _playlist.start:
@ -698,7 +702,7 @@ class GetSourceIter:
def get_input(self): def get_input(self):
self.src_cmd, self.time_left = gen_input( self.src_cmd, self.time_left = gen_input(
self.src, self.begin, self.duration, self.has_begin, self.src, self.begin, self.duration,
self.seek, self.out, self.last self.seek, self.out, self.last
) )
@ -824,7 +828,7 @@ class GetSourceIter:
self.last = False self.last = False
if self.has_begin: if self.has_begin:
check_sync(self.begin) check_sync(self.begin, self.buffer)
self.map_extension(node) self.map_extension(node)
self.url_or_live_source() self.url_or_live_source()
@ -873,7 +877,7 @@ class GetSourceIter:
# independent thread for clip preparation # independent thread for clip preparation
def play_clips(buffer, GetSourceIter): def play_clips(buffer, GetSourceIter):
# send current file to buffer stdin # send current file to buffer stdin
get_source = GetSourceIter() get_source = GetSourceIter(buffer)
for src_cmd, filtergraph in get_source.next(): for src_cmd, filtergraph in get_source.next():
if _pre_comp.copy: if _pre_comp.copy:
@ -914,6 +918,9 @@ def play_clips(buffer, GetSourceIter):
finally: finally:
decoder.wait() decoder.wait()
else:
buffer.put(None)
def main(): def main():
year = get_date(False).split('-')[0] year = get_date(False).split('-')[0]
@ -922,7 +929,7 @@ def main():
# stdin get the files loop # stdin get the files loop
# stdout pipes to ffmpeg rtmp streaming # stdout pipes to ffmpeg rtmp streaming
# TODO: have an eye on maxsize # TODO: have an eye on maxsize
buffer = Queue(maxsize=12) buffer = Queue(maxsize=120)
try: try:
if _playout.preview: if _playout.preview:
# preview playout to player # preview playout to player
@ -972,7 +979,6 @@ def main():
# TODO: this needs to be changed, # TODO: this needs to be changed,
# while True is bad, it needs a check to be able to exit # while True is bad, it needs a check to be able to exit
# with this loop we also end up never in the check_process function
while True: while True:
data = buffer.get() data = buffer.get()
if not data: if not data: