diff --git a/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java b/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java index bdf47090969..1f3e6d11d9e 100644 --- a/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java +++ b/libraries/container/src/main/java/androidx/media3/container/Mp4Box.java @@ -374,6 +374,9 @@ public abstract class Mp4Box { @SuppressWarnings("ConstantCaseForConstants") public static final int TYPE_xyz = 0xa978797a; + @SuppressWarnings("ConstantCaseForConstants") + public static final int TYPE_chpl = 0x6368706c; + @SuppressWarnings("ConstantCaseForConstants") public static final int TYPE_smta = 0x736d7461; diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java index c4dc05e5677..2bebab524d7 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/BoxParser.java @@ -51,6 +51,9 @@ import androidx.media3.extractor.HevcConfig; import androidx.media3.extractor.OpusUtil; import androidx.media3.extractor.VorbisUtil; +import androidx.media3.extractor.metadata.id3.ChapterFrame; +import androidx.media3.extractor.metadata.id3.Id3Frame; +import androidx.media3.extractor.metadata.id3.TextInformationFrame; import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Ints; @@ -196,6 +199,9 @@ public static Metadata parseUdta(LeafBox udtaBox) { SmtaAtomUtil.parseSmta(udtaData, atomPosition + atomSize)); } else if (atomType == Mp4Box.TYPE_xyz) { metadata = metadata.copyWithAppendedEntriesFrom(parseXyz(udtaData)); + } else if (atomType == Mp4Box.TYPE_chpl) { + udtaData.setPosition(atomPosition); + metadata = metadata.copyWithAppendedEntriesFrom(parseChpl(udtaData)); } udtaData.setPosition(atomPosition + atomSize); } @@ -860,6 +866,36 @@ private static Metadata parseXyz(ParsableByteArray xyzBox) { } } + /** Parses the chapter metadata from the chpl atom. */ + @Nullable + /* package */ static Metadata parseChpl(ParsableByteArray chpl) { + chpl.skipBytes(Mp4Box.HEADER_SIZE); + chpl.skipBytes(5); // version (1) + flags (3) + reservered byte (1) + ArrayList entries = new ArrayList<>(); + int chapterCount = chpl.readInt(); + for (int i = 0; i < chapterCount; i++) { + long startTimeMs = chpl.readLong() / 10_000; // Start time in 100-nanoseconds resolution + if (startTimeMs < 0 || startTimeMs > Integer.MAX_VALUE) { + startTimeMs = C.INDEX_UNSET; + } + int titleLength = chpl.readUnsignedByte(); + String chapterName = chpl.readString(titleLength); + ChapterFrame chapterFrame = + new ChapterFrame( + /* chapterId= */ Integer.toString(i), + (int) startTimeMs, + /* endTime= */ C.INDEX_UNSET, + /* startOffset= */ C.INDEX_UNSET, + /* endOffset= */ C.INDEX_UNSET, + /* subFrames= */ new Id3Frame[] { + new TextInformationFrame( + "TIT2", /* description= */ null, ImmutableList.of(chapterName)) + }); + entries.add(chapterFrame); + } + return entries.isEmpty() ? null : new Metadata(entries); + } + /** * Parses a tkhd atom (defined in ISO/IEC 14496-12). * diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/BoxParserTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/BoxParserTest.java index 5a0c6940580..63849af8d7a 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/BoxParserTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/BoxParserTest.java @@ -18,11 +18,17 @@ import static com.google.common.truth.Truth.assertThat; import androidx.media3.common.C; +import androidx.media3.common.Metadata; import androidx.media3.common.ParserException; import androidx.media3.common.util.ParsableByteArray; import androidx.media3.common.util.Util; import androidx.media3.container.Mp4Box; +import androidx.media3.extractor.metadata.id3.ChapterFrame; +import androidx.media3.extractor.metadata.id3.Id3Frame; +import androidx.media3.extractor.metadata.id3.TextInformationFrame; import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.google.common.collect.ImmutableList; +import java.nio.ByteBuffer; import org.junit.Test; import org.junit.runner.RunWith; @@ -288,6 +294,94 @@ public void vexuParsings() throws ParserException { assertThat(vexuData.hasBothEyeViews()).isTrue(); } + @Test + public void chplParsing() { + byte[] data = + ByteBuffer.allocate(50) + .putInt(50) // box size + .putInt(Mp4Box.TYPE_chpl) // box type + .put(new byte[5]) // version (1), flags (3), reserved byte (1) + .putInt(2) // chapter count + // first chapter + .putLong(0) // start time in 100-nanoseconds resolution + .put((byte) 9) // Title length + .put("Chapter A".getBytes()) + // second chapter + .putLong(12_340_000) // start time in 100-nanoseconds resolution + .put((byte) 6) // Title length + .put("Chap B".getBytes()) + .array(); + + Metadata metadata = BoxParser.parseChpl(new ParsableByteArray(data)); + assertThat(metadata.length()).isEqualTo(2); + assertThat(metadata.get(0)) + .isEqualTo( + new ChapterFrame( + /* chapterId= */ "0", + /* startTimeMs= */ 0, + /* endTimeMs= */ -1, + /* startOffset= */ -1, + /* endOffset= */ -1, + new Id3Frame[] { + new TextInformationFrame( + "TIT2", /* description= */ null, ImmutableList.of("Chapter A")) + })); + assertThat(metadata.get(1)) + .isEqualTo( + new ChapterFrame( + /* chapterId= */ "1", + /* startTimeMs= */ 1234, + /* endTimeMs= */ -1, + /* startOffset= */ -1, + /* endOffset= */ -1, + new Id3Frame[] { + new TextInformationFrame( + "TIT2", /* description= */ null, ImmutableList.of("Chap B")) + })); + } + + @Test + public void chplParsingInvalidStartTime() { + byte[] data = + ByteBuffer.allocate(50) + .putInt(50) // box size + .putInt(Mp4Box.TYPE_chpl) // box type + .put(new byte[5]) // version (1), flags (3), reserved byte (1) + .putInt(2) // chapter count + // first chapter + .putLong(-10_000) // start time, negative + .put((byte) 0) // Title length + // second chapter + .putLong(Long.valueOf(Integer.MAX_VALUE) * 10_000 + 10_000) // start time, overflow + .put((byte) 0) // Title length + .array(); + + Metadata metadata = BoxParser.parseChpl(new ParsableByteArray(data)); + assertThat(metadata.length()).isEqualTo(2); + assertThat(metadata.get(0)) + .isEqualTo( + new ChapterFrame( + /* chapterId= */ "0", + /* startTimeMs= */ -1, + /* endTimeMs= */ -1, + /* startOffset= */ -1, + /* endOffset= */ -1, + new Id3Frame[] { + new TextInformationFrame("TIT2", /* description= */ null, ImmutableList.of("")) + })); + assertThat(metadata.get(1)) + .isEqualTo( + new ChapterFrame( + /* chapterId= */ "1", + /* startTimeMs= */ -1, + /* endTimeMs= */ -1, + /* startOffset= */ -1, + /* endOffset= */ -1, + new Id3Frame[] { + new TextInformationFrame("TIT2", /* description= */ null, ImmutableList.of("")) + })); + } + private static void verifyStz2Parsing(Mp4Box.LeafBox stz2Atom) { BoxParser.Stz2SampleSizeBox box = new BoxParser.Stz2SampleSizeBox(stz2Atom); assertThat(box.getSampleCount()).isEqualTo(4); diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java index 528a62d337f..b33316db609 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/Mp4ExtractorParameterizedTest.java @@ -88,6 +88,11 @@ public void mp4SampleWithNumericGenre() throws Exception { assertExtractorBehavior("media/mp4/sample_with_numeric_genre.mp4"); } + @Test + public void mp4SampleWithChapters() throws Exception { + assertExtractorBehavior("media/mp4/sample_with_chapters.mp4"); + } + /** * Test case for https://github.com/google/ExoPlayer/issues/6774. The sample file contains an mdat * atom whose size indicates that it extends 8 bytes beyond the end of the file. diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.0.dump new file mode 100644 index 00000000000..4fcc1ce2eb7 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.0.dump @@ -0,0 +1,349 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=117]] + getPosition(1) = [[timeUs=0, position=117]] + getPosition(544500) = [[timeUs=0, position=117]] + getPosition(1089000) = [[timeUs=0, position=117]] +numberOfTracks = 2 +track 0: + total output bytes = 301392 + sample count = 30 + track duration = 1001000 + format 0: + id = 1 + sampleMimeType = video/avc + codecs = avc1.640034 + maxInputSize = 22910 + maxNumReorderSamples = 0 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + colorSpace = 1 + colorRange = 2 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 23, hash 33E412EE + data = length 9, hash FBAFBC0C + sample 0: + time = 0 + flags = 1 + data = length 7744, hash DDF91733 + sample 1: + time = 33355 + flags = 0 + data = length 1168, hash 89E48A20 + sample 2: + time = 66722 + flags = 0 + data = length 960, hash D4AD9EF0 + sample 3: + time = 100100 + flags = 0 + data = length 976, hash CD49C23C + sample 4: + time = 133455 + flags = 0 + data = length 1360, hash 337B78A9 + sample 5: + time = 166822 + flags = 0 + data = length 2288, hash 5D5FD1C8 + sample 6: + time = 200200 + flags = 0 + data = length 3856, hash 3D7DCD46 + sample 7: + time = 233555 + flags = 0 + data = length 4048, hash 47C78814 + sample 8: + time = 266922 + flags = 0 + data = length 6144, hash 8FD9AD7D + sample 9: + time = 300300 + flags = 0 + data = length 7632, hash 4245F848 + sample 10: + time = 333655 + flags = 0 + data = length 9792, hash B2B9AB4B + sample 11: + time = 367022 + flags = 0 + data = length 14496, hash E0F2E0BA + sample 12: + time = 400400 + flags = 0 + data = length 17664, hash 3E3189E + sample 13: + time = 433755 + flags = 0 + data = length 5712, hash CA808ECF + sample 14: + time = 467122 + flags = 0 + data = length 9776, hash C875D1AA + sample 15: + time = 500500 + flags = 0 + data = length 17712, hash 69AE17D4 + sample 16: + time = 533855 + flags = 0 + data = length 11440, hash 7370E78C + sample 17: + time = 567222 + flags = 0 + data = length 8544, hash 5A581986 + sample 18: + time = 600600 + flags = 0 + data = length 19904, hash 98AB5C44 + sample 19: + time = 633955 + flags = 0 + data = length 14352, hash 74B754E3 + sample 20: + time = 667322 + flags = 0 + data = length 9568, hash 369746A6 + sample 21: + time = 700700 + flags = 0 + data = length 12192, hash E0F8A71A + sample 22: + time = 734055 + flags = 0 + data = length 22880, hash 75E833BA + sample 23: + time = 767422 + flags = 0 + data = length 16832, hash E8BFCFE3 + sample 24: + time = 800800 + flags = 0 + data = length 5120, hash E04AEF94 + sample 25: + time = 834155 + flags = 0 + data = length 9888, hash 1166103E + sample 26: + time = 867522 + flags = 0 + data = length 17024, hash F9A96740 + sample 27: + time = 900900 + flags = 0 + data = length 20864, hash DF9E88B8 + sample 28: + time = 934255 + flags = 0 + data = length 7216, hash BE22BE2F + sample 29: + time = 967622 + flags = 536870912 + data = length 14240, hash E190BF31 +track 1: + total output bytes = 9529 + sample count = 45 + track duration = 1089000 + format 0: + averageBitrate = 70010 + peakBitrate = 71534 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 0 + flags = 1 + data = length 23, hash 47DE9131 + sample 1: + time = 67210 + flags = 1 + data = length 6, hash 31EC5206 + sample 2: + time = 90430 + flags = 1 + data = length 148, hash 894A176B + sample 3: + time = 113650 + flags = 1 + data = length 189, hash CEF235A1 + sample 4: + time = 136870 + flags = 1 + data = length 205, hash BBF5F7B0 + sample 5: + time = 160090 + flags = 1 + data = length 210, hash F278B193 + sample 6: + time = 183310 + flags = 1 + data = length 210, hash 82DA1589 + sample 7: + time = 206530 + flags = 1 + data = length 207, hash 5BE231DF + sample 8: + time = 229750 + flags = 1 + data = length 225, hash 18819EE1 + sample 9: + time = 252947 + flags = 1 + data = length 215, hash CA7FA67B + sample 10: + time = 276190 + flags = 1 + data = length 211, hash 581A1C18 + sample 11: + time = 299410 + flags = 1 + data = length 216, hash ADB88187 + sample 12: + time = 322630 + flags = 1 + data = length 229, hash 2E8BA4DC + sample 13: + time = 345850 + flags = 1 + data = length 232, hash 22F0C510 + sample 14: + time = 369070 + flags = 1 + data = length 235, hash 867AD0DC + sample 15: + time = 392290 + flags = 1 + data = length 231, hash 84E823A8 + sample 16: + time = 415510 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 17: + time = 438730 + flags = 1 + data = length 216, hash EAA345AE + sample 18: + time = 461950 + flags = 1 + data = length 229, hash 6957411F + sample 19: + time = 485170 + flags = 1 + data = length 219, hash 41275022 + sample 20: + time = 508390 + flags = 1 + data = length 241, hash 6495DF96 + sample 21: + time = 531609 + flags = 1 + data = length 228, hash 63D95906 + sample 22: + time = 554829 + flags = 1 + data = length 238, hash 34F676F9 + sample 23: + time = 578049 + flags = 1 + data = length 234, hash E5CBC045 + sample 24: + time = 601269 + flags = 1 + data = length 231, hash 5FC43661 + sample 25: + time = 624489 + flags = 1 + data = length 217, hash 682708ED + sample 26: + time = 647709 + flags = 1 + data = length 239, hash D43780FC + sample 27: + time = 670929 + flags = 1 + data = length 243, hash C5E17980 + sample 28: + time = 694149 + flags = 1 + data = length 231, hash AC5837BA + sample 29: + time = 717369 + flags = 1 + data = length 230, hash 169EE895 + sample 30: + time = 740589 + flags = 1 + data = length 238, hash C48FF3F1 + sample 31: + time = 763809 + flags = 1 + data = length 225, hash 531E4599 + sample 32: + time = 787029 + flags = 1 + data = length 232, hash CB3C6B8D + sample 33: + time = 810249 + flags = 1 + data = length 243, hash F8C94C7 + sample 34: + time = 833469 + flags = 1 + data = length 232, hash A646A7D0 + sample 35: + time = 856689 + flags = 1 + data = length 237, hash E8B787A5 + sample 36: + time = 879909 + flags = 1 + data = length 228, hash 3FA7A29F + sample 37: + time = 903129 + flags = 1 + data = length 235, hash B9B33B0A + sample 38: + time = 926349 + flags = 1 + data = length 264, hash 71A4869E + sample 39: + time = 949569 + flags = 1 + data = length 257, hash D049B54C + sample 40: + time = 972789 + flags = 1 + data = length 227, hash 66757231 + sample 41: + time = 996009 + flags = 1 + data = length 227, hash BD374F1B + sample 42: + time = 1019229 + flags = 1 + data = length 235, hash 999477F6 + sample 43: + time = 1042426 + flags = 1 + data = length 229, hash FFF98DF0 + sample 44: + time = 1065668 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.1.dump new file mode 100644 index 00000000000..b85a8414f72 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.1.dump @@ -0,0 +1,297 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=117]] + getPosition(1) = [[timeUs=0, position=117]] + getPosition(544500) = [[timeUs=0, position=117]] + getPosition(1089000) = [[timeUs=0, position=117]] +numberOfTracks = 2 +track 0: + total output bytes = 301392 + sample count = 30 + track duration = 1001000 + format 0: + id = 1 + sampleMimeType = video/avc + codecs = avc1.640034 + maxInputSize = 22910 + maxNumReorderSamples = 0 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + colorSpace = 1 + colorRange = 2 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 23, hash 33E412EE + data = length 9, hash FBAFBC0C + sample 0: + time = 0 + flags = 1 + data = length 7744, hash DDF91733 + sample 1: + time = 33355 + flags = 0 + data = length 1168, hash 89E48A20 + sample 2: + time = 66722 + flags = 0 + data = length 960, hash D4AD9EF0 + sample 3: + time = 100100 + flags = 0 + data = length 976, hash CD49C23C + sample 4: + time = 133455 + flags = 0 + data = length 1360, hash 337B78A9 + sample 5: + time = 166822 + flags = 0 + data = length 2288, hash 5D5FD1C8 + sample 6: + time = 200200 + flags = 0 + data = length 3856, hash 3D7DCD46 + sample 7: + time = 233555 + flags = 0 + data = length 4048, hash 47C78814 + sample 8: + time = 266922 + flags = 0 + data = length 6144, hash 8FD9AD7D + sample 9: + time = 300300 + flags = 0 + data = length 7632, hash 4245F848 + sample 10: + time = 333655 + flags = 0 + data = length 9792, hash B2B9AB4B + sample 11: + time = 367022 + flags = 0 + data = length 14496, hash E0F2E0BA + sample 12: + time = 400400 + flags = 0 + data = length 17664, hash 3E3189E + sample 13: + time = 433755 + flags = 0 + data = length 5712, hash CA808ECF + sample 14: + time = 467122 + flags = 0 + data = length 9776, hash C875D1AA + sample 15: + time = 500500 + flags = 0 + data = length 17712, hash 69AE17D4 + sample 16: + time = 533855 + flags = 0 + data = length 11440, hash 7370E78C + sample 17: + time = 567222 + flags = 0 + data = length 8544, hash 5A581986 + sample 18: + time = 600600 + flags = 0 + data = length 19904, hash 98AB5C44 + sample 19: + time = 633955 + flags = 0 + data = length 14352, hash 74B754E3 + sample 20: + time = 667322 + flags = 0 + data = length 9568, hash 369746A6 + sample 21: + time = 700700 + flags = 0 + data = length 12192, hash E0F8A71A + sample 22: + time = 734055 + flags = 0 + data = length 22880, hash 75E833BA + sample 23: + time = 767422 + flags = 0 + data = length 16832, hash E8BFCFE3 + sample 24: + time = 800800 + flags = 0 + data = length 5120, hash E04AEF94 + sample 25: + time = 834155 + flags = 0 + data = length 9888, hash 1166103E + sample 26: + time = 867522 + flags = 0 + data = length 17024, hash F9A96740 + sample 27: + time = 900900 + flags = 0 + data = length 20864, hash DF9E88B8 + sample 28: + time = 934255 + flags = 0 + data = length 7216, hash BE22BE2F + sample 29: + time = 967622 + flags = 536870912 + data = length 14240, hash E190BF31 +track 1: + total output bytes = 7235 + sample count = 32 + track duration = 1089000 + format 0: + averageBitrate = 70010 + peakBitrate = 71534 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 345850 + flags = 1 + data = length 232, hash 22F0C510 + sample 1: + time = 369070 + flags = 1 + data = length 235, hash 867AD0DC + sample 2: + time = 392290 + flags = 1 + data = length 231, hash 84E823A8 + sample 3: + time = 415510 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 4: + time = 438730 + flags = 1 + data = length 216, hash EAA345AE + sample 5: + time = 461950 + flags = 1 + data = length 229, hash 6957411F + sample 6: + time = 485170 + flags = 1 + data = length 219, hash 41275022 + sample 7: + time = 508390 + flags = 1 + data = length 241, hash 6495DF96 + sample 8: + time = 531609 + flags = 1 + data = length 228, hash 63D95906 + sample 9: + time = 554829 + flags = 1 + data = length 238, hash 34F676F9 + sample 10: + time = 578049 + flags = 1 + data = length 234, hash E5CBC045 + sample 11: + time = 601269 + flags = 1 + data = length 231, hash 5FC43661 + sample 12: + time = 624489 + flags = 1 + data = length 217, hash 682708ED + sample 13: + time = 647709 + flags = 1 + data = length 239, hash D43780FC + sample 14: + time = 670929 + flags = 1 + data = length 243, hash C5E17980 + sample 15: + time = 694149 + flags = 1 + data = length 231, hash AC5837BA + sample 16: + time = 717369 + flags = 1 + data = length 230, hash 169EE895 + sample 17: + time = 740589 + flags = 1 + data = length 238, hash C48FF3F1 + sample 18: + time = 763809 + flags = 1 + data = length 225, hash 531E4599 + sample 19: + time = 787029 + flags = 1 + data = length 232, hash CB3C6B8D + sample 20: + time = 810249 + flags = 1 + data = length 243, hash F8C94C7 + sample 21: + time = 833469 + flags = 1 + data = length 232, hash A646A7D0 + sample 22: + time = 856689 + flags = 1 + data = length 237, hash E8B787A5 + sample 23: + time = 879909 + flags = 1 + data = length 228, hash 3FA7A29F + sample 24: + time = 903129 + flags = 1 + data = length 235, hash B9B33B0A + sample 25: + time = 926349 + flags = 1 + data = length 264, hash 71A4869E + sample 26: + time = 949569 + flags = 1 + data = length 257, hash D049B54C + sample 27: + time = 972789 + flags = 1 + data = length 227, hash 66757231 + sample 28: + time = 996009 + flags = 1 + data = length 227, hash BD374F1B + sample 29: + time = 1019229 + flags = 1 + data = length 235, hash 999477F6 + sample 30: + time = 1042426 + flags = 1 + data = length 229, hash FFF98DF0 + sample 31: + time = 1065668 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.2.dump new file mode 100644 index 00000000000..bee262ff387 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.2.dump @@ -0,0 +1,233 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=117]] + getPosition(1) = [[timeUs=0, position=117]] + getPosition(544500) = [[timeUs=0, position=117]] + getPosition(1089000) = [[timeUs=0, position=117]] +numberOfTracks = 2 +track 0: + total output bytes = 301392 + sample count = 30 + track duration = 1001000 + format 0: + id = 1 + sampleMimeType = video/avc + codecs = avc1.640034 + maxInputSize = 22910 + maxNumReorderSamples = 0 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + colorSpace = 1 + colorRange = 2 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 23, hash 33E412EE + data = length 9, hash FBAFBC0C + sample 0: + time = 0 + flags = 1 + data = length 7744, hash DDF91733 + sample 1: + time = 33355 + flags = 0 + data = length 1168, hash 89E48A20 + sample 2: + time = 66722 + flags = 0 + data = length 960, hash D4AD9EF0 + sample 3: + time = 100100 + flags = 0 + data = length 976, hash CD49C23C + sample 4: + time = 133455 + flags = 0 + data = length 1360, hash 337B78A9 + sample 5: + time = 166822 + flags = 0 + data = length 2288, hash 5D5FD1C8 + sample 6: + time = 200200 + flags = 0 + data = length 3856, hash 3D7DCD46 + sample 7: + time = 233555 + flags = 0 + data = length 4048, hash 47C78814 + sample 8: + time = 266922 + flags = 0 + data = length 6144, hash 8FD9AD7D + sample 9: + time = 300300 + flags = 0 + data = length 7632, hash 4245F848 + sample 10: + time = 333655 + flags = 0 + data = length 9792, hash B2B9AB4B + sample 11: + time = 367022 + flags = 0 + data = length 14496, hash E0F2E0BA + sample 12: + time = 400400 + flags = 0 + data = length 17664, hash 3E3189E + sample 13: + time = 433755 + flags = 0 + data = length 5712, hash CA808ECF + sample 14: + time = 467122 + flags = 0 + data = length 9776, hash C875D1AA + sample 15: + time = 500500 + flags = 0 + data = length 17712, hash 69AE17D4 + sample 16: + time = 533855 + flags = 0 + data = length 11440, hash 7370E78C + sample 17: + time = 567222 + flags = 0 + data = length 8544, hash 5A581986 + sample 18: + time = 600600 + flags = 0 + data = length 19904, hash 98AB5C44 + sample 19: + time = 633955 + flags = 0 + data = length 14352, hash 74B754E3 + sample 20: + time = 667322 + flags = 0 + data = length 9568, hash 369746A6 + sample 21: + time = 700700 + flags = 0 + data = length 12192, hash E0F8A71A + sample 22: + time = 734055 + flags = 0 + data = length 22880, hash 75E833BA + sample 23: + time = 767422 + flags = 0 + data = length 16832, hash E8BFCFE3 + sample 24: + time = 800800 + flags = 0 + data = length 5120, hash E04AEF94 + sample 25: + time = 834155 + flags = 0 + data = length 9888, hash 1166103E + sample 26: + time = 867522 + flags = 0 + data = length 17024, hash F9A96740 + sample 27: + time = 900900 + flags = 0 + data = length 20864, hash DF9E88B8 + sample 28: + time = 934255 + flags = 0 + data = length 7216, hash BE22BE2F + sample 29: + time = 967622 + flags = 536870912 + data = length 14240, hash E190BF31 +track 1: + total output bytes = 3545 + sample count = 16 + track duration = 1089000 + format 0: + averageBitrate = 70010 + peakBitrate = 71534 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 717369 + flags = 1 + data = length 230, hash 169EE895 + sample 1: + time = 740589 + flags = 1 + data = length 238, hash C48FF3F1 + sample 2: + time = 763809 + flags = 1 + data = length 225, hash 531E4599 + sample 3: + time = 787029 + flags = 1 + data = length 232, hash CB3C6B8D + sample 4: + time = 810249 + flags = 1 + data = length 243, hash F8C94C7 + sample 5: + time = 833469 + flags = 1 + data = length 232, hash A646A7D0 + sample 6: + time = 856689 + flags = 1 + data = length 237, hash E8B787A5 + sample 7: + time = 879909 + flags = 1 + data = length 228, hash 3FA7A29F + sample 8: + time = 903129 + flags = 1 + data = length 235, hash B9B33B0A + sample 9: + time = 926349 + flags = 1 + data = length 264, hash 71A4869E + sample 10: + time = 949569 + flags = 1 + data = length 257, hash D049B54C + sample 11: + time = 972789 + flags = 1 + data = length 227, hash 66757231 + sample 12: + time = 996009 + flags = 1 + data = length 227, hash BD374F1B + sample 13: + time = 1019229 + flags = 1 + data = length 235, hash 999477F6 + sample 14: + time = 1042426 + flags = 1 + data = length 229, hash FFF98DF0 + sample 15: + time = 1065668 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.3.dump new file mode 100644 index 00000000000..52e229d976a --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.3.dump @@ -0,0 +1,173 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=117]] + getPosition(1) = [[timeUs=0, position=117]] + getPosition(544500) = [[timeUs=0, position=117]] + getPosition(1089000) = [[timeUs=0, position=117]] +numberOfTracks = 2 +track 0: + total output bytes = 301392 + sample count = 30 + track duration = 1001000 + format 0: + id = 1 + sampleMimeType = video/avc + codecs = avc1.640034 + maxInputSize = 22910 + maxNumReorderSamples = 0 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + colorSpace = 1 + colorRange = 2 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 23, hash 33E412EE + data = length 9, hash FBAFBC0C + sample 0: + time = 0 + flags = 1 + data = length 7744, hash DDF91733 + sample 1: + time = 33355 + flags = 0 + data = length 1168, hash 89E48A20 + sample 2: + time = 66722 + flags = 0 + data = length 960, hash D4AD9EF0 + sample 3: + time = 100100 + flags = 0 + data = length 976, hash CD49C23C + sample 4: + time = 133455 + flags = 0 + data = length 1360, hash 337B78A9 + sample 5: + time = 166822 + flags = 0 + data = length 2288, hash 5D5FD1C8 + sample 6: + time = 200200 + flags = 0 + data = length 3856, hash 3D7DCD46 + sample 7: + time = 233555 + flags = 0 + data = length 4048, hash 47C78814 + sample 8: + time = 266922 + flags = 0 + data = length 6144, hash 8FD9AD7D + sample 9: + time = 300300 + flags = 0 + data = length 7632, hash 4245F848 + sample 10: + time = 333655 + flags = 0 + data = length 9792, hash B2B9AB4B + sample 11: + time = 367022 + flags = 0 + data = length 14496, hash E0F2E0BA + sample 12: + time = 400400 + flags = 0 + data = length 17664, hash 3E3189E + sample 13: + time = 433755 + flags = 0 + data = length 5712, hash CA808ECF + sample 14: + time = 467122 + flags = 0 + data = length 9776, hash C875D1AA + sample 15: + time = 500500 + flags = 0 + data = length 17712, hash 69AE17D4 + sample 16: + time = 533855 + flags = 0 + data = length 11440, hash 7370E78C + sample 17: + time = 567222 + flags = 0 + data = length 8544, hash 5A581986 + sample 18: + time = 600600 + flags = 0 + data = length 19904, hash 98AB5C44 + sample 19: + time = 633955 + flags = 0 + data = length 14352, hash 74B754E3 + sample 20: + time = 667322 + flags = 0 + data = length 9568, hash 369746A6 + sample 21: + time = 700700 + flags = 0 + data = length 12192, hash E0F8A71A + sample 22: + time = 734055 + flags = 0 + data = length 22880, hash 75E833BA + sample 23: + time = 767422 + flags = 0 + data = length 16832, hash E8BFCFE3 + sample 24: + time = 800800 + flags = 0 + data = length 5120, hash E04AEF94 + sample 25: + time = 834155 + flags = 0 + data = length 9888, hash 1166103E + sample 26: + time = 867522 + flags = 0 + data = length 17024, hash F9A96740 + sample 27: + time = 900900 + flags = 0 + data = length 20864, hash DF9E88B8 + sample 28: + time = 934255 + flags = 0 + data = length 7216, hash BE22BE2F + sample 29: + time = 967622 + flags = 536870912 + data = length 14240, hash E190BF31 +track 1: + total output bytes = 6 + sample count = 1 + track duration = 1089000 + format 0: + averageBitrate = 70010 + peakBitrate = 71534 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 1065668 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.0.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.0.dump new file mode 100644 index 00000000000..4fcc1ce2eb7 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.0.dump @@ -0,0 +1,349 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=117]] + getPosition(1) = [[timeUs=0, position=117]] + getPosition(544500) = [[timeUs=0, position=117]] + getPosition(1089000) = [[timeUs=0, position=117]] +numberOfTracks = 2 +track 0: + total output bytes = 301392 + sample count = 30 + track duration = 1001000 + format 0: + id = 1 + sampleMimeType = video/avc + codecs = avc1.640034 + maxInputSize = 22910 + maxNumReorderSamples = 0 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + colorSpace = 1 + colorRange = 2 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 23, hash 33E412EE + data = length 9, hash FBAFBC0C + sample 0: + time = 0 + flags = 1 + data = length 7744, hash DDF91733 + sample 1: + time = 33355 + flags = 0 + data = length 1168, hash 89E48A20 + sample 2: + time = 66722 + flags = 0 + data = length 960, hash D4AD9EF0 + sample 3: + time = 100100 + flags = 0 + data = length 976, hash CD49C23C + sample 4: + time = 133455 + flags = 0 + data = length 1360, hash 337B78A9 + sample 5: + time = 166822 + flags = 0 + data = length 2288, hash 5D5FD1C8 + sample 6: + time = 200200 + flags = 0 + data = length 3856, hash 3D7DCD46 + sample 7: + time = 233555 + flags = 0 + data = length 4048, hash 47C78814 + sample 8: + time = 266922 + flags = 0 + data = length 6144, hash 8FD9AD7D + sample 9: + time = 300300 + flags = 0 + data = length 7632, hash 4245F848 + sample 10: + time = 333655 + flags = 0 + data = length 9792, hash B2B9AB4B + sample 11: + time = 367022 + flags = 0 + data = length 14496, hash E0F2E0BA + sample 12: + time = 400400 + flags = 0 + data = length 17664, hash 3E3189E + sample 13: + time = 433755 + flags = 0 + data = length 5712, hash CA808ECF + sample 14: + time = 467122 + flags = 0 + data = length 9776, hash C875D1AA + sample 15: + time = 500500 + flags = 0 + data = length 17712, hash 69AE17D4 + sample 16: + time = 533855 + flags = 0 + data = length 11440, hash 7370E78C + sample 17: + time = 567222 + flags = 0 + data = length 8544, hash 5A581986 + sample 18: + time = 600600 + flags = 0 + data = length 19904, hash 98AB5C44 + sample 19: + time = 633955 + flags = 0 + data = length 14352, hash 74B754E3 + sample 20: + time = 667322 + flags = 0 + data = length 9568, hash 369746A6 + sample 21: + time = 700700 + flags = 0 + data = length 12192, hash E0F8A71A + sample 22: + time = 734055 + flags = 0 + data = length 22880, hash 75E833BA + sample 23: + time = 767422 + flags = 0 + data = length 16832, hash E8BFCFE3 + sample 24: + time = 800800 + flags = 0 + data = length 5120, hash E04AEF94 + sample 25: + time = 834155 + flags = 0 + data = length 9888, hash 1166103E + sample 26: + time = 867522 + flags = 0 + data = length 17024, hash F9A96740 + sample 27: + time = 900900 + flags = 0 + data = length 20864, hash DF9E88B8 + sample 28: + time = 934255 + flags = 0 + data = length 7216, hash BE22BE2F + sample 29: + time = 967622 + flags = 536870912 + data = length 14240, hash E190BF31 +track 1: + total output bytes = 9529 + sample count = 45 + track duration = 1089000 + format 0: + averageBitrate = 70010 + peakBitrate = 71534 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 0 + flags = 1 + data = length 23, hash 47DE9131 + sample 1: + time = 67210 + flags = 1 + data = length 6, hash 31EC5206 + sample 2: + time = 90430 + flags = 1 + data = length 148, hash 894A176B + sample 3: + time = 113650 + flags = 1 + data = length 189, hash CEF235A1 + sample 4: + time = 136870 + flags = 1 + data = length 205, hash BBF5F7B0 + sample 5: + time = 160090 + flags = 1 + data = length 210, hash F278B193 + sample 6: + time = 183310 + flags = 1 + data = length 210, hash 82DA1589 + sample 7: + time = 206530 + flags = 1 + data = length 207, hash 5BE231DF + sample 8: + time = 229750 + flags = 1 + data = length 225, hash 18819EE1 + sample 9: + time = 252947 + flags = 1 + data = length 215, hash CA7FA67B + sample 10: + time = 276190 + flags = 1 + data = length 211, hash 581A1C18 + sample 11: + time = 299410 + flags = 1 + data = length 216, hash ADB88187 + sample 12: + time = 322630 + flags = 1 + data = length 229, hash 2E8BA4DC + sample 13: + time = 345850 + flags = 1 + data = length 232, hash 22F0C510 + sample 14: + time = 369070 + flags = 1 + data = length 235, hash 867AD0DC + sample 15: + time = 392290 + flags = 1 + data = length 231, hash 84E823A8 + sample 16: + time = 415510 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 17: + time = 438730 + flags = 1 + data = length 216, hash EAA345AE + sample 18: + time = 461950 + flags = 1 + data = length 229, hash 6957411F + sample 19: + time = 485170 + flags = 1 + data = length 219, hash 41275022 + sample 20: + time = 508390 + flags = 1 + data = length 241, hash 6495DF96 + sample 21: + time = 531609 + flags = 1 + data = length 228, hash 63D95906 + sample 22: + time = 554829 + flags = 1 + data = length 238, hash 34F676F9 + sample 23: + time = 578049 + flags = 1 + data = length 234, hash E5CBC045 + sample 24: + time = 601269 + flags = 1 + data = length 231, hash 5FC43661 + sample 25: + time = 624489 + flags = 1 + data = length 217, hash 682708ED + sample 26: + time = 647709 + flags = 1 + data = length 239, hash D43780FC + sample 27: + time = 670929 + flags = 1 + data = length 243, hash C5E17980 + sample 28: + time = 694149 + flags = 1 + data = length 231, hash AC5837BA + sample 29: + time = 717369 + flags = 1 + data = length 230, hash 169EE895 + sample 30: + time = 740589 + flags = 1 + data = length 238, hash C48FF3F1 + sample 31: + time = 763809 + flags = 1 + data = length 225, hash 531E4599 + sample 32: + time = 787029 + flags = 1 + data = length 232, hash CB3C6B8D + sample 33: + time = 810249 + flags = 1 + data = length 243, hash F8C94C7 + sample 34: + time = 833469 + flags = 1 + data = length 232, hash A646A7D0 + sample 35: + time = 856689 + flags = 1 + data = length 237, hash E8B787A5 + sample 36: + time = 879909 + flags = 1 + data = length 228, hash 3FA7A29F + sample 37: + time = 903129 + flags = 1 + data = length 235, hash B9B33B0A + sample 38: + time = 926349 + flags = 1 + data = length 264, hash 71A4869E + sample 39: + time = 949569 + flags = 1 + data = length 257, hash D049B54C + sample 40: + time = 972789 + flags = 1 + data = length 227, hash 66757231 + sample 41: + time = 996009 + flags = 1 + data = length 227, hash BD374F1B + sample 42: + time = 1019229 + flags = 1 + data = length 235, hash 999477F6 + sample 43: + time = 1042426 + flags = 1 + data = length 229, hash FFF98DF0 + sample 44: + time = 1065668 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.1.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.1.dump new file mode 100644 index 00000000000..b85a8414f72 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.1.dump @@ -0,0 +1,297 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=117]] + getPosition(1) = [[timeUs=0, position=117]] + getPosition(544500) = [[timeUs=0, position=117]] + getPosition(1089000) = [[timeUs=0, position=117]] +numberOfTracks = 2 +track 0: + total output bytes = 301392 + sample count = 30 + track duration = 1001000 + format 0: + id = 1 + sampleMimeType = video/avc + codecs = avc1.640034 + maxInputSize = 22910 + maxNumReorderSamples = 0 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + colorSpace = 1 + colorRange = 2 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 23, hash 33E412EE + data = length 9, hash FBAFBC0C + sample 0: + time = 0 + flags = 1 + data = length 7744, hash DDF91733 + sample 1: + time = 33355 + flags = 0 + data = length 1168, hash 89E48A20 + sample 2: + time = 66722 + flags = 0 + data = length 960, hash D4AD9EF0 + sample 3: + time = 100100 + flags = 0 + data = length 976, hash CD49C23C + sample 4: + time = 133455 + flags = 0 + data = length 1360, hash 337B78A9 + sample 5: + time = 166822 + flags = 0 + data = length 2288, hash 5D5FD1C8 + sample 6: + time = 200200 + flags = 0 + data = length 3856, hash 3D7DCD46 + sample 7: + time = 233555 + flags = 0 + data = length 4048, hash 47C78814 + sample 8: + time = 266922 + flags = 0 + data = length 6144, hash 8FD9AD7D + sample 9: + time = 300300 + flags = 0 + data = length 7632, hash 4245F848 + sample 10: + time = 333655 + flags = 0 + data = length 9792, hash B2B9AB4B + sample 11: + time = 367022 + flags = 0 + data = length 14496, hash E0F2E0BA + sample 12: + time = 400400 + flags = 0 + data = length 17664, hash 3E3189E + sample 13: + time = 433755 + flags = 0 + data = length 5712, hash CA808ECF + sample 14: + time = 467122 + flags = 0 + data = length 9776, hash C875D1AA + sample 15: + time = 500500 + flags = 0 + data = length 17712, hash 69AE17D4 + sample 16: + time = 533855 + flags = 0 + data = length 11440, hash 7370E78C + sample 17: + time = 567222 + flags = 0 + data = length 8544, hash 5A581986 + sample 18: + time = 600600 + flags = 0 + data = length 19904, hash 98AB5C44 + sample 19: + time = 633955 + flags = 0 + data = length 14352, hash 74B754E3 + sample 20: + time = 667322 + flags = 0 + data = length 9568, hash 369746A6 + sample 21: + time = 700700 + flags = 0 + data = length 12192, hash E0F8A71A + sample 22: + time = 734055 + flags = 0 + data = length 22880, hash 75E833BA + sample 23: + time = 767422 + flags = 0 + data = length 16832, hash E8BFCFE3 + sample 24: + time = 800800 + flags = 0 + data = length 5120, hash E04AEF94 + sample 25: + time = 834155 + flags = 0 + data = length 9888, hash 1166103E + sample 26: + time = 867522 + flags = 0 + data = length 17024, hash F9A96740 + sample 27: + time = 900900 + flags = 0 + data = length 20864, hash DF9E88B8 + sample 28: + time = 934255 + flags = 0 + data = length 7216, hash BE22BE2F + sample 29: + time = 967622 + flags = 536870912 + data = length 14240, hash E190BF31 +track 1: + total output bytes = 7235 + sample count = 32 + track duration = 1089000 + format 0: + averageBitrate = 70010 + peakBitrate = 71534 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 345850 + flags = 1 + data = length 232, hash 22F0C510 + sample 1: + time = 369070 + flags = 1 + data = length 235, hash 867AD0DC + sample 2: + time = 392290 + flags = 1 + data = length 231, hash 84E823A8 + sample 3: + time = 415510 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 4: + time = 438730 + flags = 1 + data = length 216, hash EAA345AE + sample 5: + time = 461950 + flags = 1 + data = length 229, hash 6957411F + sample 6: + time = 485170 + flags = 1 + data = length 219, hash 41275022 + sample 7: + time = 508390 + flags = 1 + data = length 241, hash 6495DF96 + sample 8: + time = 531609 + flags = 1 + data = length 228, hash 63D95906 + sample 9: + time = 554829 + flags = 1 + data = length 238, hash 34F676F9 + sample 10: + time = 578049 + flags = 1 + data = length 234, hash E5CBC045 + sample 11: + time = 601269 + flags = 1 + data = length 231, hash 5FC43661 + sample 12: + time = 624489 + flags = 1 + data = length 217, hash 682708ED + sample 13: + time = 647709 + flags = 1 + data = length 239, hash D43780FC + sample 14: + time = 670929 + flags = 1 + data = length 243, hash C5E17980 + sample 15: + time = 694149 + flags = 1 + data = length 231, hash AC5837BA + sample 16: + time = 717369 + flags = 1 + data = length 230, hash 169EE895 + sample 17: + time = 740589 + flags = 1 + data = length 238, hash C48FF3F1 + sample 18: + time = 763809 + flags = 1 + data = length 225, hash 531E4599 + sample 19: + time = 787029 + flags = 1 + data = length 232, hash CB3C6B8D + sample 20: + time = 810249 + flags = 1 + data = length 243, hash F8C94C7 + sample 21: + time = 833469 + flags = 1 + data = length 232, hash A646A7D0 + sample 22: + time = 856689 + flags = 1 + data = length 237, hash E8B787A5 + sample 23: + time = 879909 + flags = 1 + data = length 228, hash 3FA7A29F + sample 24: + time = 903129 + flags = 1 + data = length 235, hash B9B33B0A + sample 25: + time = 926349 + flags = 1 + data = length 264, hash 71A4869E + sample 26: + time = 949569 + flags = 1 + data = length 257, hash D049B54C + sample 27: + time = 972789 + flags = 1 + data = length 227, hash 66757231 + sample 28: + time = 996009 + flags = 1 + data = length 227, hash BD374F1B + sample 29: + time = 1019229 + flags = 1 + data = length 235, hash 999477F6 + sample 30: + time = 1042426 + flags = 1 + data = length 229, hash FFF98DF0 + sample 31: + time = 1065668 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.2.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.2.dump new file mode 100644 index 00000000000..bee262ff387 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.2.dump @@ -0,0 +1,233 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=117]] + getPosition(1) = [[timeUs=0, position=117]] + getPosition(544500) = [[timeUs=0, position=117]] + getPosition(1089000) = [[timeUs=0, position=117]] +numberOfTracks = 2 +track 0: + total output bytes = 301392 + sample count = 30 + track duration = 1001000 + format 0: + id = 1 + sampleMimeType = video/avc + codecs = avc1.640034 + maxInputSize = 22910 + maxNumReorderSamples = 0 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + colorSpace = 1 + colorRange = 2 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 23, hash 33E412EE + data = length 9, hash FBAFBC0C + sample 0: + time = 0 + flags = 1 + data = length 7744, hash DDF91733 + sample 1: + time = 33355 + flags = 0 + data = length 1168, hash 89E48A20 + sample 2: + time = 66722 + flags = 0 + data = length 960, hash D4AD9EF0 + sample 3: + time = 100100 + flags = 0 + data = length 976, hash CD49C23C + sample 4: + time = 133455 + flags = 0 + data = length 1360, hash 337B78A9 + sample 5: + time = 166822 + flags = 0 + data = length 2288, hash 5D5FD1C8 + sample 6: + time = 200200 + flags = 0 + data = length 3856, hash 3D7DCD46 + sample 7: + time = 233555 + flags = 0 + data = length 4048, hash 47C78814 + sample 8: + time = 266922 + flags = 0 + data = length 6144, hash 8FD9AD7D + sample 9: + time = 300300 + flags = 0 + data = length 7632, hash 4245F848 + sample 10: + time = 333655 + flags = 0 + data = length 9792, hash B2B9AB4B + sample 11: + time = 367022 + flags = 0 + data = length 14496, hash E0F2E0BA + sample 12: + time = 400400 + flags = 0 + data = length 17664, hash 3E3189E + sample 13: + time = 433755 + flags = 0 + data = length 5712, hash CA808ECF + sample 14: + time = 467122 + flags = 0 + data = length 9776, hash C875D1AA + sample 15: + time = 500500 + flags = 0 + data = length 17712, hash 69AE17D4 + sample 16: + time = 533855 + flags = 0 + data = length 11440, hash 7370E78C + sample 17: + time = 567222 + flags = 0 + data = length 8544, hash 5A581986 + sample 18: + time = 600600 + flags = 0 + data = length 19904, hash 98AB5C44 + sample 19: + time = 633955 + flags = 0 + data = length 14352, hash 74B754E3 + sample 20: + time = 667322 + flags = 0 + data = length 9568, hash 369746A6 + sample 21: + time = 700700 + flags = 0 + data = length 12192, hash E0F8A71A + sample 22: + time = 734055 + flags = 0 + data = length 22880, hash 75E833BA + sample 23: + time = 767422 + flags = 0 + data = length 16832, hash E8BFCFE3 + sample 24: + time = 800800 + flags = 0 + data = length 5120, hash E04AEF94 + sample 25: + time = 834155 + flags = 0 + data = length 9888, hash 1166103E + sample 26: + time = 867522 + flags = 0 + data = length 17024, hash F9A96740 + sample 27: + time = 900900 + flags = 0 + data = length 20864, hash DF9E88B8 + sample 28: + time = 934255 + flags = 0 + data = length 7216, hash BE22BE2F + sample 29: + time = 967622 + flags = 536870912 + data = length 14240, hash E190BF31 +track 1: + total output bytes = 3545 + sample count = 16 + track duration = 1089000 + format 0: + averageBitrate = 70010 + peakBitrate = 71534 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 717369 + flags = 1 + data = length 230, hash 169EE895 + sample 1: + time = 740589 + flags = 1 + data = length 238, hash C48FF3F1 + sample 2: + time = 763809 + flags = 1 + data = length 225, hash 531E4599 + sample 3: + time = 787029 + flags = 1 + data = length 232, hash CB3C6B8D + sample 4: + time = 810249 + flags = 1 + data = length 243, hash F8C94C7 + sample 5: + time = 833469 + flags = 1 + data = length 232, hash A646A7D0 + sample 6: + time = 856689 + flags = 1 + data = length 237, hash E8B787A5 + sample 7: + time = 879909 + flags = 1 + data = length 228, hash 3FA7A29F + sample 8: + time = 903129 + flags = 1 + data = length 235, hash B9B33B0A + sample 9: + time = 926349 + flags = 1 + data = length 264, hash 71A4869E + sample 10: + time = 949569 + flags = 1 + data = length 257, hash D049B54C + sample 11: + time = 972789 + flags = 1 + data = length 227, hash 66757231 + sample 12: + time = 996009 + flags = 1 + data = length 227, hash BD374F1B + sample 13: + time = 1019229 + flags = 1 + data = length 235, hash 999477F6 + sample 14: + time = 1042426 + flags = 1 + data = length 229, hash FFF98DF0 + sample 15: + time = 1065668 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.3.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.3.dump new file mode 100644 index 00000000000..52e229d976a --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.3.dump @@ -0,0 +1,173 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=117]] + getPosition(1) = [[timeUs=0, position=117]] + getPosition(544500) = [[timeUs=0, position=117]] + getPosition(1089000) = [[timeUs=0, position=117]] +numberOfTracks = 2 +track 0: + total output bytes = 301392 + sample count = 30 + track duration = 1001000 + format 0: + id = 1 + sampleMimeType = video/avc + codecs = avc1.640034 + maxInputSize = 22910 + maxNumReorderSamples = 0 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + colorSpace = 1 + colorRange = 2 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 23, hash 33E412EE + data = length 9, hash FBAFBC0C + sample 0: + time = 0 + flags = 1 + data = length 7744, hash DDF91733 + sample 1: + time = 33355 + flags = 0 + data = length 1168, hash 89E48A20 + sample 2: + time = 66722 + flags = 0 + data = length 960, hash D4AD9EF0 + sample 3: + time = 100100 + flags = 0 + data = length 976, hash CD49C23C + sample 4: + time = 133455 + flags = 0 + data = length 1360, hash 337B78A9 + sample 5: + time = 166822 + flags = 0 + data = length 2288, hash 5D5FD1C8 + sample 6: + time = 200200 + flags = 0 + data = length 3856, hash 3D7DCD46 + sample 7: + time = 233555 + flags = 0 + data = length 4048, hash 47C78814 + sample 8: + time = 266922 + flags = 0 + data = length 6144, hash 8FD9AD7D + sample 9: + time = 300300 + flags = 0 + data = length 7632, hash 4245F848 + sample 10: + time = 333655 + flags = 0 + data = length 9792, hash B2B9AB4B + sample 11: + time = 367022 + flags = 0 + data = length 14496, hash E0F2E0BA + sample 12: + time = 400400 + flags = 0 + data = length 17664, hash 3E3189E + sample 13: + time = 433755 + flags = 0 + data = length 5712, hash CA808ECF + sample 14: + time = 467122 + flags = 0 + data = length 9776, hash C875D1AA + sample 15: + time = 500500 + flags = 0 + data = length 17712, hash 69AE17D4 + sample 16: + time = 533855 + flags = 0 + data = length 11440, hash 7370E78C + sample 17: + time = 567222 + flags = 0 + data = length 8544, hash 5A581986 + sample 18: + time = 600600 + flags = 0 + data = length 19904, hash 98AB5C44 + sample 19: + time = 633955 + flags = 0 + data = length 14352, hash 74B754E3 + sample 20: + time = 667322 + flags = 0 + data = length 9568, hash 369746A6 + sample 21: + time = 700700 + flags = 0 + data = length 12192, hash E0F8A71A + sample 22: + time = 734055 + flags = 0 + data = length 22880, hash 75E833BA + sample 23: + time = 767422 + flags = 0 + data = length 16832, hash E8BFCFE3 + sample 24: + time = 800800 + flags = 0 + data = length 5120, hash E04AEF94 + sample 25: + time = 834155 + flags = 0 + data = length 9888, hash 1166103E + sample 26: + time = 867522 + flags = 0 + data = length 17024, hash F9A96740 + sample 27: + time = 900900 + flags = 0 + data = length 20864, hash DF9E88B8 + sample 28: + time = 934255 + flags = 0 + data = length 7216, hash BE22BE2F + sample 29: + time = 967622 + flags = 536870912 + data = length 14240, hash E190BF31 +track 1: + total output bytes = 6 + sample count = 1 + track duration = 1089000 + format 0: + averageBitrate = 70010 + peakBitrate = 71534 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 1065668 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.unknown_length.dump new file mode 100644 index 00000000000..4fcc1ce2eb7 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.reading_within_gop_sample_dependencies.unknown_length.dump @@ -0,0 +1,349 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=117]] + getPosition(1) = [[timeUs=0, position=117]] + getPosition(544500) = [[timeUs=0, position=117]] + getPosition(1089000) = [[timeUs=0, position=117]] +numberOfTracks = 2 +track 0: + total output bytes = 301392 + sample count = 30 + track duration = 1001000 + format 0: + id = 1 + sampleMimeType = video/avc + codecs = avc1.640034 + maxInputSize = 22910 + maxNumReorderSamples = 0 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + colorSpace = 1 + colorRange = 2 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 23, hash 33E412EE + data = length 9, hash FBAFBC0C + sample 0: + time = 0 + flags = 1 + data = length 7744, hash DDF91733 + sample 1: + time = 33355 + flags = 0 + data = length 1168, hash 89E48A20 + sample 2: + time = 66722 + flags = 0 + data = length 960, hash D4AD9EF0 + sample 3: + time = 100100 + flags = 0 + data = length 976, hash CD49C23C + sample 4: + time = 133455 + flags = 0 + data = length 1360, hash 337B78A9 + sample 5: + time = 166822 + flags = 0 + data = length 2288, hash 5D5FD1C8 + sample 6: + time = 200200 + flags = 0 + data = length 3856, hash 3D7DCD46 + sample 7: + time = 233555 + flags = 0 + data = length 4048, hash 47C78814 + sample 8: + time = 266922 + flags = 0 + data = length 6144, hash 8FD9AD7D + sample 9: + time = 300300 + flags = 0 + data = length 7632, hash 4245F848 + sample 10: + time = 333655 + flags = 0 + data = length 9792, hash B2B9AB4B + sample 11: + time = 367022 + flags = 0 + data = length 14496, hash E0F2E0BA + sample 12: + time = 400400 + flags = 0 + data = length 17664, hash 3E3189E + sample 13: + time = 433755 + flags = 0 + data = length 5712, hash CA808ECF + sample 14: + time = 467122 + flags = 0 + data = length 9776, hash C875D1AA + sample 15: + time = 500500 + flags = 0 + data = length 17712, hash 69AE17D4 + sample 16: + time = 533855 + flags = 0 + data = length 11440, hash 7370E78C + sample 17: + time = 567222 + flags = 0 + data = length 8544, hash 5A581986 + sample 18: + time = 600600 + flags = 0 + data = length 19904, hash 98AB5C44 + sample 19: + time = 633955 + flags = 0 + data = length 14352, hash 74B754E3 + sample 20: + time = 667322 + flags = 0 + data = length 9568, hash 369746A6 + sample 21: + time = 700700 + flags = 0 + data = length 12192, hash E0F8A71A + sample 22: + time = 734055 + flags = 0 + data = length 22880, hash 75E833BA + sample 23: + time = 767422 + flags = 0 + data = length 16832, hash E8BFCFE3 + sample 24: + time = 800800 + flags = 0 + data = length 5120, hash E04AEF94 + sample 25: + time = 834155 + flags = 0 + data = length 9888, hash 1166103E + sample 26: + time = 867522 + flags = 0 + data = length 17024, hash F9A96740 + sample 27: + time = 900900 + flags = 0 + data = length 20864, hash DF9E88B8 + sample 28: + time = 934255 + flags = 0 + data = length 7216, hash BE22BE2F + sample 29: + time = 967622 + flags = 536870912 + data = length 14240, hash E190BF31 +track 1: + total output bytes = 9529 + sample count = 45 + track duration = 1089000 + format 0: + averageBitrate = 70010 + peakBitrate = 71534 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 0 + flags = 1 + data = length 23, hash 47DE9131 + sample 1: + time = 67210 + flags = 1 + data = length 6, hash 31EC5206 + sample 2: + time = 90430 + flags = 1 + data = length 148, hash 894A176B + sample 3: + time = 113650 + flags = 1 + data = length 189, hash CEF235A1 + sample 4: + time = 136870 + flags = 1 + data = length 205, hash BBF5F7B0 + sample 5: + time = 160090 + flags = 1 + data = length 210, hash F278B193 + sample 6: + time = 183310 + flags = 1 + data = length 210, hash 82DA1589 + sample 7: + time = 206530 + flags = 1 + data = length 207, hash 5BE231DF + sample 8: + time = 229750 + flags = 1 + data = length 225, hash 18819EE1 + sample 9: + time = 252947 + flags = 1 + data = length 215, hash CA7FA67B + sample 10: + time = 276190 + flags = 1 + data = length 211, hash 581A1C18 + sample 11: + time = 299410 + flags = 1 + data = length 216, hash ADB88187 + sample 12: + time = 322630 + flags = 1 + data = length 229, hash 2E8BA4DC + sample 13: + time = 345850 + flags = 1 + data = length 232, hash 22F0C510 + sample 14: + time = 369070 + flags = 1 + data = length 235, hash 867AD0DC + sample 15: + time = 392290 + flags = 1 + data = length 231, hash 84E823A8 + sample 16: + time = 415510 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 17: + time = 438730 + flags = 1 + data = length 216, hash EAA345AE + sample 18: + time = 461950 + flags = 1 + data = length 229, hash 6957411F + sample 19: + time = 485170 + flags = 1 + data = length 219, hash 41275022 + sample 20: + time = 508390 + flags = 1 + data = length 241, hash 6495DF96 + sample 21: + time = 531609 + flags = 1 + data = length 228, hash 63D95906 + sample 22: + time = 554829 + flags = 1 + data = length 238, hash 34F676F9 + sample 23: + time = 578049 + flags = 1 + data = length 234, hash E5CBC045 + sample 24: + time = 601269 + flags = 1 + data = length 231, hash 5FC43661 + sample 25: + time = 624489 + flags = 1 + data = length 217, hash 682708ED + sample 26: + time = 647709 + flags = 1 + data = length 239, hash D43780FC + sample 27: + time = 670929 + flags = 1 + data = length 243, hash C5E17980 + sample 28: + time = 694149 + flags = 1 + data = length 231, hash AC5837BA + sample 29: + time = 717369 + flags = 1 + data = length 230, hash 169EE895 + sample 30: + time = 740589 + flags = 1 + data = length 238, hash C48FF3F1 + sample 31: + time = 763809 + flags = 1 + data = length 225, hash 531E4599 + sample 32: + time = 787029 + flags = 1 + data = length 232, hash CB3C6B8D + sample 33: + time = 810249 + flags = 1 + data = length 243, hash F8C94C7 + sample 34: + time = 833469 + flags = 1 + data = length 232, hash A646A7D0 + sample 35: + time = 856689 + flags = 1 + data = length 237, hash E8B787A5 + sample 36: + time = 879909 + flags = 1 + data = length 228, hash 3FA7A29F + sample 37: + time = 903129 + flags = 1 + data = length 235, hash B9B33B0A + sample 38: + time = 926349 + flags = 1 + data = length 264, hash 71A4869E + sample 39: + time = 949569 + flags = 1 + data = length 257, hash D049B54C + sample 40: + time = 972789 + flags = 1 + data = length 227, hash 66757231 + sample 41: + time = 996009 + flags = 1 + data = length 227, hash BD374F1B + sample 42: + time = 1019229 + flags = 1 + data = length 235, hash 999477F6 + sample 43: + time = 1042426 + flags = 1 + data = length 229, hash FFF98DF0 + sample 44: + time = 1065668 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.unknown_length.dump b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.unknown_length.dump new file mode 100644 index 00000000000..4fcc1ce2eb7 --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/sample_with_chapters.mp4.unknown_length.dump @@ -0,0 +1,349 @@ +seekMap: + isSeekable = true + duration = 1089000 + getPosition(0) = [[timeUs=0, position=117]] + getPosition(1) = [[timeUs=0, position=117]] + getPosition(544500) = [[timeUs=0, position=117]] + getPosition(1089000) = [[timeUs=0, position=117]] +numberOfTracks = 2 +track 0: + total output bytes = 301392 + sample count = 30 + track duration = 1001000 + format 0: + id = 1 + sampleMimeType = video/avc + codecs = avc1.640034 + maxInputSize = 22910 + maxNumReorderSamples = 0 + width = 1080 + height = 720 + frameRate = 29.97 + colorInfo: + colorSpace = 1 + colorRange = 2 + colorTransfer = 3 + lumaBitdepth = 8 + chromaBitdepth = 8 + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 23, hash 33E412EE + data = length 9, hash FBAFBC0C + sample 0: + time = 0 + flags = 1 + data = length 7744, hash DDF91733 + sample 1: + time = 33355 + flags = 0 + data = length 1168, hash 89E48A20 + sample 2: + time = 66722 + flags = 0 + data = length 960, hash D4AD9EF0 + sample 3: + time = 100100 + flags = 0 + data = length 976, hash CD49C23C + sample 4: + time = 133455 + flags = 0 + data = length 1360, hash 337B78A9 + sample 5: + time = 166822 + flags = 0 + data = length 2288, hash 5D5FD1C8 + sample 6: + time = 200200 + flags = 0 + data = length 3856, hash 3D7DCD46 + sample 7: + time = 233555 + flags = 0 + data = length 4048, hash 47C78814 + sample 8: + time = 266922 + flags = 0 + data = length 6144, hash 8FD9AD7D + sample 9: + time = 300300 + flags = 0 + data = length 7632, hash 4245F848 + sample 10: + time = 333655 + flags = 0 + data = length 9792, hash B2B9AB4B + sample 11: + time = 367022 + flags = 0 + data = length 14496, hash E0F2E0BA + sample 12: + time = 400400 + flags = 0 + data = length 17664, hash 3E3189E + sample 13: + time = 433755 + flags = 0 + data = length 5712, hash CA808ECF + sample 14: + time = 467122 + flags = 0 + data = length 9776, hash C875D1AA + sample 15: + time = 500500 + flags = 0 + data = length 17712, hash 69AE17D4 + sample 16: + time = 533855 + flags = 0 + data = length 11440, hash 7370E78C + sample 17: + time = 567222 + flags = 0 + data = length 8544, hash 5A581986 + sample 18: + time = 600600 + flags = 0 + data = length 19904, hash 98AB5C44 + sample 19: + time = 633955 + flags = 0 + data = length 14352, hash 74B754E3 + sample 20: + time = 667322 + flags = 0 + data = length 9568, hash 369746A6 + sample 21: + time = 700700 + flags = 0 + data = length 12192, hash E0F8A71A + sample 22: + time = 734055 + flags = 0 + data = length 22880, hash 75E833BA + sample 23: + time = 767422 + flags = 0 + data = length 16832, hash E8BFCFE3 + sample 24: + time = 800800 + flags = 0 + data = length 5120, hash E04AEF94 + sample 25: + time = 834155 + flags = 0 + data = length 9888, hash 1166103E + sample 26: + time = 867522 + flags = 0 + data = length 17024, hash F9A96740 + sample 27: + time = 900900 + flags = 0 + data = length 20864, hash DF9E88B8 + sample 28: + time = 934255 + flags = 0 + data = length 7216, hash BE22BE2F + sample 29: + time = 967622 + flags = 536870912 + data = length 14240, hash E190BF31 +track 1: + total output bytes = 9529 + sample count = 45 + track duration = 1089000 + format 0: + averageBitrate = 70010 + peakBitrate = 71534 + id = 2 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + maxInputSize = 294 + channelCount = 1 + sampleRate = 44100 + language = und + metadata = entries=[TSSE: description=null: values=[Lavf61.1.100], CHAP, CHAP, CHAP, Mp4Timestamp: creation time=0, modification time=0, timescale=1000] + initializationData: + data = length 2, hash 5F7 + sample 0: + time = 0 + flags = 1 + data = length 23, hash 47DE9131 + sample 1: + time = 67210 + flags = 1 + data = length 6, hash 31EC5206 + sample 2: + time = 90430 + flags = 1 + data = length 148, hash 894A176B + sample 3: + time = 113650 + flags = 1 + data = length 189, hash CEF235A1 + sample 4: + time = 136870 + flags = 1 + data = length 205, hash BBF5F7B0 + sample 5: + time = 160090 + flags = 1 + data = length 210, hash F278B193 + sample 6: + time = 183310 + flags = 1 + data = length 210, hash 82DA1589 + sample 7: + time = 206530 + flags = 1 + data = length 207, hash 5BE231DF + sample 8: + time = 229750 + flags = 1 + data = length 225, hash 18819EE1 + sample 9: + time = 252947 + flags = 1 + data = length 215, hash CA7FA67B + sample 10: + time = 276190 + flags = 1 + data = length 211, hash 581A1C18 + sample 11: + time = 299410 + flags = 1 + data = length 216, hash ADB88187 + sample 12: + time = 322630 + flags = 1 + data = length 229, hash 2E8BA4DC + sample 13: + time = 345850 + flags = 1 + data = length 232, hash 22F0C510 + sample 14: + time = 369070 + flags = 1 + data = length 235, hash 867AD0DC + sample 15: + time = 392290 + flags = 1 + data = length 231, hash 84E823A8 + sample 16: + time = 415510 + flags = 1 + data = length 226, hash 1BEF3A95 + sample 17: + time = 438730 + flags = 1 + data = length 216, hash EAA345AE + sample 18: + time = 461950 + flags = 1 + data = length 229, hash 6957411F + sample 19: + time = 485170 + flags = 1 + data = length 219, hash 41275022 + sample 20: + time = 508390 + flags = 1 + data = length 241, hash 6495DF96 + sample 21: + time = 531609 + flags = 1 + data = length 228, hash 63D95906 + sample 22: + time = 554829 + flags = 1 + data = length 238, hash 34F676F9 + sample 23: + time = 578049 + flags = 1 + data = length 234, hash E5CBC045 + sample 24: + time = 601269 + flags = 1 + data = length 231, hash 5FC43661 + sample 25: + time = 624489 + flags = 1 + data = length 217, hash 682708ED + sample 26: + time = 647709 + flags = 1 + data = length 239, hash D43780FC + sample 27: + time = 670929 + flags = 1 + data = length 243, hash C5E17980 + sample 28: + time = 694149 + flags = 1 + data = length 231, hash AC5837BA + sample 29: + time = 717369 + flags = 1 + data = length 230, hash 169EE895 + sample 30: + time = 740589 + flags = 1 + data = length 238, hash C48FF3F1 + sample 31: + time = 763809 + flags = 1 + data = length 225, hash 531E4599 + sample 32: + time = 787029 + flags = 1 + data = length 232, hash CB3C6B8D + sample 33: + time = 810249 + flags = 1 + data = length 243, hash F8C94C7 + sample 34: + time = 833469 + flags = 1 + data = length 232, hash A646A7D0 + sample 35: + time = 856689 + flags = 1 + data = length 237, hash E8B787A5 + sample 36: + time = 879909 + flags = 1 + data = length 228, hash 3FA7A29F + sample 37: + time = 903129 + flags = 1 + data = length 235, hash B9B33B0A + sample 38: + time = 926349 + flags = 1 + data = length 264, hash 71A4869E + sample 39: + time = 949569 + flags = 1 + data = length 257, hash D049B54C + sample 40: + time = 972789 + flags = 1 + data = length 227, hash 66757231 + sample 41: + time = 996009 + flags = 1 + data = length 227, hash BD374F1B + sample 42: + time = 1019229 + flags = 1 + data = length 235, hash 999477F6 + sample 43: + time = 1042426 + flags = 1 + data = length 229, hash FFF98DF0 + sample 44: + time = 1065668 + flags = 536870913 + data = length 6, hash 31B22286 +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/mp4/sample_with_chapters.mp4 b/libraries/test_data/src/test/assets/media/mp4/sample_with_chapters.mp4 new file mode 100644 index 00000000000..4c3a28467b8 Binary files /dev/null and b/libraries/test_data/src/test/assets/media/mp4/sample_with_chapters.mp4 differ