From 5da67a0033cad77d4352cf250db8ce926efd9510 Mon Sep 17 00:00:00 2001 From: Nils Juenemann Date: Tue, 3 Dec 2024 12:38:15 +0100 Subject: [PATCH] fix: prevent infinite loop causing stream freeze in DASH multi-period streams - Added a condition to ensure `requiredIntervalUs > 0` in `DashMediaSource`. - Resolves an issue where negative `requiredIntervalUs` triggered an infinite loop in `onPlaylistUpdateRequested()`, leading to application/stream freezes. This fix restores smooth playback for multi-period DASH streams. --- .../java/androidx/media3/exoplayer/dash/DashMediaSource.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java b/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java index bd909dd194..cce1f2289e 100644 --- a/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java +++ b/libraries/exoplayer_dash/src/main/java/androidx/media3/exoplayer/dash/DashMediaSource.java @@ -1151,8 +1151,9 @@ public final class DashMediaSource extends BaseMediaSource { + index.getNextSegmentAvailableTimeUs(periodDurationUs, nowUnixTimeUs); long requiredIntervalUs = nextSegmentShiftUnixTimeUs - nowUnixTimeUs; // Avoid multiple refreshes within a very small amount of time. - if (requiredIntervalUs < intervalUs - 100_000 - || (requiredIntervalUs > intervalUs && requiredIntervalUs < intervalUs + 100_000)) { + if ((requiredIntervalUs < intervalUs - 100_000 + || (requiredIntervalUs > intervalUs && requiredIntervalUs < intervalUs + 100_000) ) + && requiredIntervalUs >0) { intervalUs = requiredIntervalUs; } }