Fix timestamp overflow error in stream (#41951)

This commit is contained in:
uvjustin 2020-10-16 23:48:45 +08:00 committed by GitHub
parent eff0c4a494
commit ce0e08838f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -88,8 +88,6 @@ def _stream_worker_internal(hass, stream, quit_event):
last_dts = None
# Keep track of consecutive packets without a dts to detect end of stream.
last_packet_was_without_dts = False
# Keep track of consecutive packets with a large dts gap to detect an overflow.
last_packet_had_large_negative_dts_gap = False
# Holds the buffers for each stream provider
outputs = None
# Keep track of the number of segments we've processed
@ -246,20 +244,18 @@ def _stream_worker_internal(hass, stream, quit_event):
# Discard packet if dts is not monotonic
if packet.dts <= last_dts[packet.stream]:
if (last_dts[packet.stream] - packet.dts) > (
packet.time_base * MAX_TIMESTAMP_GAP
if (
packet.time_base * (last_dts[packet.stream] - packet.dts)
> MAX_TIMESTAMP_GAP
):
if last_packet_had_large_negative_dts_gap:
_LOGGER.warning(
"Timestamp overflow detected: last dts %s, dts = %s, resetting stream",
last_dts[packet.stream],
packet.dts,
)
finalize_stream()
break
last_packet_had_large_negative_dts_gap = True
_LOGGER.warning(
"Timestamp overflow detected: last dts %s, dts = %s, resetting stream",
last_dts[packet.stream],
packet.dts,
)
finalize_stream()
break
continue
last_packet_had_large_negative_dts_gap = False
# Check for end of segment
if packet.stream == video_stream and packet.is_keyframe: