From d2b221b95be69dd1e412155504a66d8ebc0dbffe Mon Sep 17 00:00:00 2001 From: Cai Yuanqing Date: Mon, 7 Oct 2019 12:05:50 +1300 Subject: [PATCH] Issue: #6501 Wrong segmentNumShift was calculated in copyWithNewRepresentation When newIndex overlaps oldIndex with newstarttime < oldstarttime, according to the segNum of endtime in newIndex and oldIndexLastSegnum to calculate the segmentNumShift. --- .../exoplayer2/source/dash/DefaultDashChunkSource.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DefaultDashChunkSource.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DefaultDashChunkSource.java index 6218fb01d0..ccecf8048e 100644 --- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DefaultDashChunkSource.java +++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DefaultDashChunkSource.java @@ -702,12 +702,14 @@ public class DefaultDashChunkSource implements DashChunkSource { // There's a gap between the old index and the new one which means we've slipped behind the // live window and can't proceed. throw new BehindLiveWindowException(); - } else if (oldIndexStartTimeUs >= newIndexStartTimeUs) { + } else if (newIndexStartTimeUs < oldIndexStartTimeUs) { // The new index overlaps with (but does not have a start position contained within) the old // index. This can only happen if extra segments have been added to the start of the index. - // Continue process the next segment as is. + newSegmentNumShift -= + newIndex.getSegmentNum(oldIndexStartTimeUs, newPeriodDurationUs) + - oldIndexFirstSegmentNum; } else { - // The new index overlaps with the old one. + // The new index overlaps with (and has a start position contained within) the old index. newSegmentNumShift += oldIndex.getSegmentNum(newIndexStartTimeUs, newPeriodDurationUs) - newIndexFirstSegmentNum;