[webvtt] Fix timestamp overflow adjustment (#698)
In some streams, empty segments may appear with a bogus, non-monotone MPEG timestamp. This should not be considered as an overflow Authored by: fstirlitz
This commit is contained in:
parent
e040bb0a41
commit
7a6742b5f9
1 changed files with 8 additions and 2 deletions
|
@ -254,8 +254,14 @@ class HlsFD(FragmentFD):
|
||||||
def pack_fragment(frag_content, frag_index):
|
def pack_fragment(frag_content, frag_index):
|
||||||
output = io.StringIO()
|
output = io.StringIO()
|
||||||
adjust = 0
|
adjust = 0
|
||||||
|
overflow = False
|
||||||
|
mpegts_last = None
|
||||||
for block in webvtt.parse_fragment(frag_content):
|
for block in webvtt.parse_fragment(frag_content):
|
||||||
if isinstance(block, webvtt.CueBlock):
|
if isinstance(block, webvtt.CueBlock):
|
||||||
|
extra_state['webvtt_mpegts_last'] = mpegts_last
|
||||||
|
if overflow:
|
||||||
|
extra_state['webvtt_mpegts_adjust'] += 1
|
||||||
|
overflow = False
|
||||||
block.start += adjust
|
block.start += adjust
|
||||||
block.end += adjust
|
block.end += adjust
|
||||||
|
|
||||||
|
@ -296,9 +302,9 @@ class HlsFD(FragmentFD):
|
||||||
extra_state.setdefault('webvtt_mpegts_adjust', 0)
|
extra_state.setdefault('webvtt_mpegts_adjust', 0)
|
||||||
block.mpegts += extra_state['webvtt_mpegts_adjust'] << 33
|
block.mpegts += extra_state['webvtt_mpegts_adjust'] << 33
|
||||||
if block.mpegts < extra_state.get('webvtt_mpegts_last', 0):
|
if block.mpegts < extra_state.get('webvtt_mpegts_last', 0):
|
||||||
extra_state['webvtt_mpegts_adjust'] += 1
|
overflow = True
|
||||||
block.mpegts += 1 << 33
|
block.mpegts += 1 << 33
|
||||||
extra_state['webvtt_mpegts_last'] = block.mpegts
|
mpegts_last = block.mpegts
|
||||||
|
|
||||||
if frag_index == 1:
|
if frag_index == 1:
|
||||||
extra_state['webvtt_mpegts'] = block.mpegts or 0
|
extra_state['webvtt_mpegts'] = block.mpegts or 0
|
||||||
|
|
Loading…
Reference in a new issue