diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/webm/WebmExtractor.java b/library/src/main/java/com/google/android/exoplayer/extractor/webm/WebmExtractor.java index 1976f2b8b6..ccc94ec3c3 100644 --- a/library/src/main/java/com/google/android/exoplayer/extractor/webm/WebmExtractor.java +++ b/library/src/main/java/com/google/android/exoplayer/extractor/webm/WebmExtractor.java @@ -297,7 +297,7 @@ public final class WebmExtractor implements Extractor { throws ParserException { switch (id) { case ID_SEGMENT: - if (segmentContentPosition != UNKNOWN) { + if (segmentContentPosition != UNKNOWN && segmentContentPosition != contentPosition) { throw new ParserException("Multiple Segment elements not supported"); } segmentContentPosition = contentPosition; diff --git a/library/src/test/java/com/google/android/exoplayer/extractor/webm/WebmExtractorTest.java b/library/src/test/java/com/google/android/exoplayer/extractor/webm/WebmExtractorTest.java index ddcd9a9ac8..6b9492cc96 100644 --- a/library/src/test/java/com/google/android/exoplayer/extractor/webm/WebmExtractorTest.java +++ b/library/src/test/java/com/google/android/exoplayer/extractor/webm/WebmExtractorTest.java @@ -92,6 +92,21 @@ public final class WebmExtractorTest extends InstrumentationTestCase { assertIndex(new IndexPoint(0, 0, TEST_DURATION_US)); } + public void testReadSegmentTwice() throws IOException, InterruptedException { + byte[] data = new StreamBuilder() + .setHeader(WEBM_DOC_TYPE) + .setInfo(DEFAULT_TIMECODE_SCALE, TEST_DURATION_US) + .addVp9Track(TEST_WIDTH, TEST_HEIGHT, null) + .build(1); + + TestUtil.consumeTestData(extractor, data); + extractor.seek(); + TestUtil.consumeTestData(extractor, data); + + assertVp9VideoFormat(); + assertIndex(new IndexPoint(0, 0, TEST_DURATION_US)); + } + public void testPrepareOpus() throws IOException, InterruptedException { byte[] data = new StreamBuilder() .setHeader(WEBM_DOC_TYPE)