From 3543116da4486fd013229f762bf3ba86a30526e7 Mon Sep 17 00:00:00 2001 From: tonihei Date: Thu, 21 Mar 2019 16:04:48 +0000 Subject: [PATCH] Prevent seeking when ICY metadata is present. Any seek map with non-zero offsets breaks playback with ICY metadata as the metadata is no longer read from the correct position. Issue:#5658 PiperOrigin-RevId: 239605839 --- RELEASENOTES.md | 2 ++ .../android/exoplayer2/source/ProgressiveMediaPeriod.java | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index f5b1dd7fc6..398c041111 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -78,6 +78,8 @@ `ExtractorsFactory` instances must now be passed via the `ProgressiveMediaSource.Factory` constructor, and `setExtractorsFactory` is deprecated. +* Prevent seeking when ICY metadata is present to prevent playback problems + ([#5658](https://github.com/google/ExoPlayer/issues/5658)). ### 2.9.6 ### diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java index a179e6e3dd..d9f0008a7f 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java @@ -31,6 +31,7 @@ import com.google.android.exoplayer2.extractor.ExtractorOutput; import com.google.android.exoplayer2.extractor.PositionHolder; import com.google.android.exoplayer2.extractor.SeekMap; import com.google.android.exoplayer2.extractor.SeekMap.SeekPoints; +import com.google.android.exoplayer2.extractor.SeekMap.Unseekable; import com.google.android.exoplayer2.extractor.TrackOutput; import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.metadata.icy.IcyHeaders; @@ -626,7 +627,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; @Override public void seekMap(SeekMap seekMap) { - this.seekMap = seekMap; + this.seekMap = icyHeaders == null ? seekMap : new Unseekable(/* durationUs */ C.TIME_UNSET); handler.post(maybeFinishPrepareRunnable); }