diff --git a/homeassistant/components/stream/worker.py b/homeassistant/components/stream/worker.py index 9e2d2221602..52fc9043470 100644 --- a/homeassistant/components/stream/worker.py +++ b/homeassistant/components/stream/worker.py @@ -88,6 +88,8 @@ 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 @@ -247,18 +249,17 @@ def _stream_worker_internal(hass, stream, quit_event): if (last_dts[packet.stream] - packet.dts) > ( packet.time_base * MAX_TIMESTAMP_GAP ): - _LOGGER.warning( - "Timestamp overflow detected: dts = %s, resetting stream", - packet.dts, - ) - finalize_stream() - break - _LOGGER.warning( - "Dropping out of order packet: %s <= %s", - packet.dts, - last_dts[packet.stream], - ) + 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 continue + last_packet_had_large_negative_dts_gap = False # Check for end of segment if packet.stream == video_stream and packet.is_keyframe: