diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsDurationReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsDurationReader.java index 55218c31f2..d55e633207 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsDurationReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/PsDurationReader.java @@ -21,6 +21,7 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.extractor.Extractor; import com.google.android.exoplayer2.extractor.ExtractorInput; import com.google.android.exoplayer2.extractor.PositionHolder; +import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.ParsableByteArray; import com.google.android.exoplayer2.util.TimestampAdjuster; import com.google.android.exoplayer2.util.Util; @@ -41,6 +42,8 @@ import java.io.IOException; */ /* package */ final class PsDurationReader { + private static final String TAG = "PsDurationReader"; + private static final int TIMESTAMP_SEARCH_BYTES = 20_000; private final TimestampAdjuster scrTimestampAdjuster; @@ -102,6 +105,10 @@ import java.io.IOException; long minScrPositionUs = scrTimestampAdjuster.adjustTsTimestamp(firstScrValue); long maxScrPositionUs = scrTimestampAdjuster.adjustTsTimestamp(lastScrValue); durationUs = maxScrPositionUs - minScrPositionUs; + if (durationUs < 0) { + Log.w(TAG, "Invalid duration: " + durationUs + ". Using TIME_UNSET instead."); + durationUs = C.TIME_UNSET; + } return finishReadDuration(input); } diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsDurationReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsDurationReader.java index 6f2406bf2c..5934be9653 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsDurationReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/ts/TsDurationReader.java @@ -21,6 +21,7 @@ import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.extractor.Extractor; import com.google.android.exoplayer2.extractor.ExtractorInput; import com.google.android.exoplayer2.extractor.PositionHolder; +import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.ParsableByteArray; import com.google.android.exoplayer2.util.TimestampAdjuster; import com.google.android.exoplayer2.util.Util; @@ -38,6 +39,8 @@ import java.io.IOException; */ /* package */ final class TsDurationReader { + private static final String TAG = "TsDurationReader"; + private final int timestampSearchBytes; private final TimestampAdjuster pcrTimestampAdjuster; private final ParsableByteArray packetBuffer; @@ -98,6 +101,10 @@ import java.io.IOException; long minPcrPositionUs = pcrTimestampAdjuster.adjustTsTimestamp(firstPcrValue); long maxPcrPositionUs = pcrTimestampAdjuster.adjustTsTimestamp(lastPcrValue); durationUs = maxPcrPositionUs - minPcrPositionUs; + if (durationUs < 0) { + Log.w(TAG, "Invalid duration: " + durationUs + ". Using TIME_UNSET instead."); + durationUs = C.TIME_UNSET; + } return finishReadDuration(input); }