diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 1cc36d7350..5100b522a6 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -213,6 +213,7 @@ timestamps ([#7464](https://github.com/google/ExoPlayer/issues/7464)). * Ogg: Allow non-contiguous pages ([#7230](https://github.com/google/ExoPlayer/issues/7230)). +* MP4: Fix playback of MP4 containing Opus. * Matroska: Remove support for "Invisible" block header flag. * FLV: Ignore SCRIPTDATA segments with invalid name types, rather than failing playback ([#7675](https://github.com/google/ExoPlayer/issues/7675)). diff --git a/demos/main/src/main/assets/media.exolist.json b/demos/main/src/main/assets/media.exolist.json index db47aa77dc..f043fc8437 100644 --- a/demos/main/src/main/assets/media.exolist.json +++ b/demos/main/src/main/assets/media.exolist.json @@ -4,8 +4,7 @@ "samples": [ { "name": "Google Glass H264 (MP4)", - "uri": "https://www.youtube.com/api/manifest/dash/id/bf5bb2419360daf1/source/youtube?as=fmp4_audio_clear,fmp4_sd_hd_clear&sparams=ip,ipbits,expire,source,id,as&ip=0.0.0.0&ipbits=0&expire=19000000000&signature=51AF5F39AB0CEC3E5497CD9C900EBFEAECCCB5C7.8506521BFC350652163895D4C26DEE124209AA9E&key=ik0", - "extension": "mpd" + "uri": "file:///sdcard/1.mp4" }, { "name": "Google Play H264 (MP4)", diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java index 98ff051196..92572a61e1 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/mp4/AtomParsers.java @@ -27,6 +27,7 @@ import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.audio.AacUtil; import com.google.android.exoplayer2.audio.Ac3Util; import com.google.android.exoplayer2.audio.Ac4Util; +import com.google.android.exoplayer2.audio.OpusUtil; import com.google.android.exoplayer2.drm.DrmInitData; import com.google.android.exoplayer2.extractor.GaplessInfoHolder; import com.google.android.exoplayer2.metadata.Metadata; @@ -40,9 +41,9 @@ import com.google.android.exoplayer2.video.AvcConfig; import com.google.android.exoplayer2.video.DolbyVisionConfig; import com.google.android.exoplayer2.video.HevcConfig; import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import org.checkerframework.checker.nullness.compatqual.NullableType; @@ -913,7 +914,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; parent.setPosition(position + Atom.HEADER_SIZE + StsdData.STSD_HEADER_SIZE); // Default values. - @Nullable List initializationData = null; + @Nullable ImmutableList initializationData = null; long subsampleOffsetUs = Format.OFFSET_SAMPLE_RELATIVE; String mimeType; @@ -924,7 +925,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; int sampleDescriptionLength = atomSize - Atom.HEADER_SIZE - 8; byte[] sampleDescriptionData = new byte[sampleDescriptionLength]; parent.readBytes(sampleDescriptionData, 0, sampleDescriptionLength); - initializationData = Collections.singletonList(sampleDescriptionData); + initializationData = ImmutableList.of(sampleDescriptionData); } else if (atomType == Atom.TYPE_wvtt) { mimeType = MimeTypes.APPLICATION_MP4VTT; } else if (atomType == Atom.TYPE_stpp) { @@ -1042,7 +1043,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; mimeType = mimeTypeAndInitializationDataBytes.first; @Nullable byte[] initializationDataBytes = mimeTypeAndInitializationDataBytes.second; if (initializationDataBytes != null) { - initializationData = Collections.singletonList(initializationDataBytes); + initializationData = ImmutableList.of(initializationDataBytes); } } else if (childAtomType == Atom.TYPE_pasp) { pixelWidthHeightRatio = parsePaspFromParent(parent, childStartPosition); @@ -1242,7 +1243,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; mimeType = MimeTypes.AUDIO_FLAC; } - @Nullable byte[] initializationData = null; + @Nullable List initializationData = null; while (childPosition - position < size) { parent.setPosition(childPosition); int childAtomSize = parent.readInt(); @@ -1255,14 +1256,18 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; Pair<@NullableType String, byte @NullableType []> mimeTypeAndInitializationData = parseEsdsFromParent(parent, esdsAtomPosition); mimeType = mimeTypeAndInitializationData.first; - initializationData = mimeTypeAndInitializationData.second; - if (MimeTypes.AUDIO_AAC.equals(mimeType) && initializationData != null) { - // Update sampleRate and channelCount from the AudioSpecificConfig initialization data, - // which is more reliable. See [Internal: b/10903778]. - AacUtil.Config aacConfig = AacUtil.parseAudioSpecificConfig(initializationData); - sampleRate = aacConfig.sampleRateHz; - channelCount = aacConfig.channelCount; - codecs = aacConfig.codecs; + @Nullable byte[] initializationDataBytes = mimeTypeAndInitializationData.second; + if (initializationDataBytes != null) { + if (MimeTypes.AUDIO_AAC.equals(mimeType)) { + // Update sampleRate and channelCount from the AudioSpecificConfig initialization + // data, + // which is more reliable. See [Internal: b/10903778]. + AacUtil.Config aacConfig = AacUtil.parseAudioSpecificConfig(initializationDataBytes); + sampleRate = aacConfig.sampleRateHz; + channelCount = aacConfig.channelCount; + codecs = aacConfig.codecs; + } + initializationData = ImmutableList.of(initializationDataBytes); } } } else if (childAtomType == Atom.TYPE_dac3) { @@ -1291,30 +1296,32 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; // Build an Opus Identification Header (defined in RFC-7845) by concatenating the Opus Magic // Signature and the body of the dOps atom. int childAtomBodySize = childAtomSize - Atom.HEADER_SIZE; - initializationData = new byte[opusMagic.length + childAtomBodySize]; - System.arraycopy(opusMagic, 0, initializationData, 0, opusMagic.length); + byte[] headerBytes = Arrays.copyOf(opusMagic, opusMagic.length + childAtomBodySize); parent.setPosition(childPosition + Atom.HEADER_SIZE); - parent.readBytes(initializationData, opusMagic.length, childAtomBodySize); + parent.readBytes(headerBytes, opusMagic.length, childAtomBodySize); + initializationData = OpusUtil.buildInitializationData(headerBytes); } else if (childAtomType == Atom.TYPE_dfLa) { int childAtomBodySize = childAtomSize - Atom.FULL_HEADER_SIZE; - initializationData = new byte[4 + childAtomBodySize]; - initializationData[0] = 0x66; // f - initializationData[1] = 0x4C; // L - initializationData[2] = 0x61; // a - initializationData[3] = 0x43; // C + byte[] initializationDataBytes = new byte[4 + childAtomBodySize]; + initializationDataBytes[0] = 0x66; // f + initializationDataBytes[1] = 0x4C; // L + initializationDataBytes[2] = 0x61; // a + initializationDataBytes[3] = 0x43; // C parent.setPosition(childPosition + Atom.FULL_HEADER_SIZE); - parent.readBytes(initializationData, /* offset= */ 4, childAtomBodySize); + parent.readBytes(initializationDataBytes, /* offset= */ 4, childAtomBodySize); + initializationData = ImmutableList.of(initializationDataBytes); } else if (childAtomType == Atom.TYPE_alac) { int childAtomBodySize = childAtomSize - Atom.FULL_HEADER_SIZE; - initializationData = new byte[childAtomBodySize]; + byte[] initializationDataBytes = new byte[childAtomBodySize]; parent.setPosition(childPosition + Atom.FULL_HEADER_SIZE); - parent.readBytes(initializationData, /* offset= */ 0, childAtomBodySize); + parent.readBytes(initializationDataBytes, /* offset= */ 0, childAtomBodySize); // Update sampleRate and channelCount from the AudioSpecificConfig initialization data, // which is more reliable. See https://github.com/google/ExoPlayer/pull/6629. Pair audioSpecificConfig = - CodecSpecificDataUtil.parseAlacAudioSpecificConfig(initializationData); + CodecSpecificDataUtil.parseAlacAudioSpecificConfig(initializationDataBytes); sampleRate = audioSpecificConfig.first; channelCount = audioSpecificConfig.second; + initializationData = ImmutableList.of(initializationDataBytes); } childPosition += childAtomSize; } @@ -1328,8 +1335,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; .setChannelCount(channelCount) .setSampleRate(sampleRate) .setPcmEncoding(pcmEncoding) - .setInitializationData( - initializationData == null ? null : Collections.singletonList(initializationData)) + .setInitializationData(initializationData) .setDrmInitData(drmInitData) .setLanguage(language) .build(); diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4ExtractorTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4ExtractorTest.java index 3cac224b91..decd55f985 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4ExtractorTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/FragmentedMp4ExtractorTest.java @@ -98,6 +98,14 @@ public final class FragmentedMp4ExtractorTest { simulationConfig); } + @Test + public void sampleWithOpusTrack() throws Exception { + ExtractorAsserts.assertBehavior( + getExtractorFactory(ImmutableList.of()), + "mp4/sample_opus_fragmented.mp4", + simulationConfig); + } + @Test public void samplePartiallyFragmented() throws Exception { ExtractorAsserts.assertBehavior( diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/Mp4ExtractorTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/Mp4ExtractorTest.java index 8150e074f1..bceb813ff9 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/Mp4ExtractorTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/mp4/Mp4ExtractorTest.java @@ -74,4 +74,9 @@ public final class Mp4ExtractorTest { public void mp4SampleWithEac3jocTrack() throws Exception { ExtractorAsserts.assertBehavior(Mp4Extractor::new, "mp4/sample_eac3joc.mp4", simulationConfig); } + + @Test + public void mp4SampleWithOpusTrack() throws Exception { + ExtractorAsserts.assertBehavior(Mp4Extractor::new, "mp4/sample_opus.mp4", simulationConfig); + } } diff --git a/testdata/src/test/assets/mp4/sample_opus.mp4 b/testdata/src/test/assets/mp4/sample_opus.mp4 new file mode 100644 index 0000000000..40d639da79 Binary files /dev/null and b/testdata/src/test/assets/mp4/sample_opus.mp4 differ diff --git a/testdata/src/test/assets/mp4/sample_opus.mp4.0.dump b/testdata/src/test/assets/mp4/sample_opus.mp4.0.dump new file mode 100644 index 0000000000..f9c1539402 --- /dev/null +++ b/testdata/src/test/assets/mp4/sample_opus.mp4.0.dump @@ -0,0 +1,428 @@ +seekMap: + isSeekable = true + duration = 1460000 + getPosition(0) = [[timeUs=0, position=179]] + getPosition(1) = [[timeUs=1, position=179]] + getPosition(730000) = [[timeUs=730000, position=398]] + getPosition(1460000) = [[timeUs=1460000, position=3701]] +numberOfTracks = 1 +track 0: + total output bytes = 3651 + sample count = 101 + format 0: + id = 1 + sampleMimeType = audio/opus + maxInputSize = 278 + channelCount = 2 + sampleRate = 48000 + language = und + metadata = entries=[TSSE: description=null: value=Lavf58.29.100] + initializationData: + data = length 19, hash 86852AE2 + data = length 8, hash 72CBCBF5 + data = length 8, hash 79C07075 + sample 0: + time = 0 + flags = 1 + data = length 3, hash 4732 + sample 1: + time = 3500 + flags = 1 + data = length 3, hash 4732 + sample 2: + time = 13500 + flags = 1 + data = length 3, hash 4732 + sample 3: + time = 23500 + flags = 1 + data = length 3, hash 4732 + sample 4: + time = 33500 + flags = 1 + data = length 3, hash 4732 + sample 5: + time = 43500 + flags = 1 + data = length 3, hash 4732 + sample 6: + time = 53500 + flags = 1 + data = length 3, hash 4732 + sample 7: + time = 63500 + flags = 1 + data = length 3, hash 4732 + sample 8: + time = 73500 + flags = 1 + data = length 3, hash 4732 + sample 9: + time = 83500 + flags = 1 + data = length 3, hash 4732 + sample 10: + time = 93500 + flags = 1 + data = length 3, hash 4732 + sample 11: + time = 103500 + flags = 1 + data = length 3, hash 4732 + sample 12: + time = 113500 + flags = 1 + data = length 3, hash 4732 + sample 13: + time = 123500 + flags = 1 + data = length 3, hash 4732 + sample 14: + time = 133500 + flags = 1 + data = length 3, hash 4732 + sample 15: + time = 143500 + flags = 1 + data = length 3, hash 4732 + sample 16: + time = 153500 + flags = 1 + data = length 3, hash 4732 + sample 17: + time = 163500 + flags = 1 + data = length 3, hash 4732 + sample 18: + time = 173500 + flags = 1 + data = length 3, hash 4732 + sample 19: + time = 183500 + flags = 1 + data = length 3, hash 4732 + sample 20: + time = 193500 + flags = 1 + data = length 3, hash 4732 + sample 21: + time = 203500 + flags = 1 + data = length 3, hash 4732 + sample 22: + time = 213500 + flags = 1 + data = length 3, hash 4732 + sample 23: + time = 223500 + flags = 1 + data = length 3, hash 4732 + sample 24: + time = 233500 + flags = 1 + data = length 3, hash 4732 + sample 25: + time = 243500 + flags = 1 + data = length 3, hash 4732 + sample 26: + time = 253500 + flags = 1 + data = length 3, hash 4732 + sample 27: + time = 263500 + flags = 1 + data = length 3, hash 4732 + sample 28: + time = 273500 + flags = 1 + data = length 3, hash 4732 + sample 29: + time = 283500 + flags = 1 + data = length 3, hash 4732 + sample 30: + time = 293500 + flags = 1 + data = length 3, hash 4732 + sample 31: + time = 303500 + flags = 1 + data = length 3, hash 4732 + sample 32: + time = 313500 + flags = 1 + data = length 3, hash 4732 + sample 33: + time = 323500 + flags = 1 + data = length 3, hash 4732 + sample 34: + time = 333500 + flags = 1 + data = length 3, hash 4732 + sample 35: + time = 343500 + flags = 1 + data = length 3, hash 4732 + sample 36: + time = 353500 + flags = 1 + data = length 3, hash 4732 + sample 37: + time = 363500 + flags = 1 + data = length 3, hash 4732 + sample 38: + time = 373500 + flags = 1 + data = length 3, hash 4732 + sample 39: + time = 383500 + flags = 1 + data = length 3, hash 4732 + sample 40: + time = 393500 + flags = 1 + data = length 3, hash 4732 + sample 41: + time = 403500 + flags = 1 + data = length 3, hash 4732 + sample 42: + time = 413500 + flags = 1 + data = length 3, hash 4732 + sample 43: + time = 423500 + flags = 1 + data = length 3, hash 4732 + sample 44: + time = 433500 + flags = 1 + data = length 3, hash 4732 + sample 45: + time = 443500 + flags = 1 + data = length 3, hash 4732 + sample 46: + time = 453500 + flags = 1 + data = length 3, hash 4732 + sample 47: + time = 463500 + flags = 1 + data = length 3, hash 4732 + sample 48: + time = 473500 + flags = 1 + data = length 3, hash 4732 + sample 49: + time = 483500 + flags = 1 + data = length 3, hash 4732 + sample 50: + time = 493500 + flags = 1 + data = length 3, hash 4732 + sample 51: + time = 503500 + flags = 1 + data = length 3, hash 4732 + sample 52: + time = 513499 + flags = 1 + data = length 3, hash 4732 + sample 53: + time = 523499 + flags = 1 + data = length 3, hash 4732 + sample 54: + time = 533500 + flags = 1 + data = length 3, hash 4732 + sample 55: + time = 543500 + flags = 1 + data = length 3, hash 4732 + sample 56: + time = 553500 + flags = 1 + data = length 3, hash 4732 + sample 57: + time = 563500 + flags = 1 + data = length 3, hash 4732 + sample 58: + time = 573500 + flags = 1 + data = length 3, hash 4732 + sample 59: + time = 583500 + flags = 1 + data = length 3, hash 4732 + sample 60: + time = 593500 + flags = 1 + data = length 3, hash 4732 + sample 61: + time = 603500 + flags = 1 + data = length 3, hash 4732 + sample 62: + time = 613500 + flags = 1 + data = length 3, hash 4732 + sample 63: + time = 623500 + flags = 1 + data = length 3, hash 4732 + sample 64: + time = 633500 + flags = 1 + data = length 3, hash 4732 + sample 65: + time = 643500 + flags = 1 + data = length 3, hash 4732 + sample 66: + time = 653500 + flags = 1 + data = length 3, hash 4732 + sample 67: + time = 663500 + flags = 1 + data = length 3, hash 4732 + sample 68: + time = 673500 + flags = 1 + data = length 3, hash 4732 + sample 69: + time = 683500 + flags = 1 + data = length 3, hash 4732 + sample 70: + time = 693500 + flags = 1 + data = length 3, hash 4732 + sample 71: + time = 703500 + flags = 1 + data = length 3, hash 4732 + sample 72: + time = 713500 + flags = 1 + data = length 3, hash 4732 + sample 73: + time = 723500 + flags = 1 + data = length 3, hash 4732 + sample 74: + time = 733500 + flags = 1 + data = length 3, hash 4732 + sample 75: + time = 743500 + flags = 1 + data = length 66, hash 648F0BC5 + sample 76: + time = 753500 + flags = 1 + data = length 248, hash D07B1166 + sample 77: + time = 763500 + flags = 1 + data = length 239, hash 61AA7E3B + sample 78: + time = 773500 + flags = 1 + data = length 142, hash F01726AD + sample 79: + time = 783500 + flags = 1 + data = length 124, hash 35B50117 + sample 80: + time = 793500 + flags = 1 + data = length 122, hash 6ED2EA14 + sample 81: + time = 803500 + flags = 1 + data = length 118, hash AAB319C9 + sample 82: + time = 813500 + flags = 1 + data = length 117, hash 7B08A466 + sample 83: + time = 823500 + flags = 1 + data = length 120, hash AF62F442 + sample 84: + time = 833500 + flags = 1 + data = length 120, hash 21A0E5E9 + sample 85: + time = 843500 + flags = 1 + data = length 122, hash F191C09 + sample 86: + time = 853500 + flags = 1 + data = length 120, hash C52E4F2D + sample 87: + time = 863500 + flags = 1 + data = length 120, hash D4554502 + sample 88: + time = 873500 + flags = 1 + data = length 121, hash D4E641CF + sample 89: + time = 883500 + flags = 1 + data = length 123, hash 518700A8 + sample 90: + time = 893500 + flags = 1 + data = length 123, hash 6EA13134 + sample 91: + time = 903500 + flags = 1 + data = length 123, hash A4264A7B + sample 92: + time = 913500 + flags = 1 + data = length 126, hash 593B6BA5 + sample 93: + time = 923500 + flags = 1 + data = length 127, hash 15988F8A + sample 94: + time = 933500 + flags = 1 + data = length 134, hash 165D0213 + sample 95: + time = 943500 + flags = 1 + data = length 129, hash 1F5ABD5B + sample 96: + time = 953500 + flags = 1 + data = length 131, hash 65E1E196 + sample 97: + time = 963500 + flags = 1 + data = length 128, hash 70A740A1 + sample 98: + time = 973500 + flags = 1 + data = length 130, hash 2D3733ED + sample 99: + time = 983500 + flags = 1 + data = length 124, hash 6CC37521 + sample 100: + time = 993500 + flags = 536870913 + data = length 129, hash 722253A8 +tracksEnded = true diff --git a/testdata/src/test/assets/mp4/sample_opus.mp4.1.dump b/testdata/src/test/assets/mp4/sample_opus.mp4.1.dump new file mode 100644 index 0000000000..d0c0ab1586 --- /dev/null +++ b/testdata/src/test/assets/mp4/sample_opus.mp4.1.dump @@ -0,0 +1,232 @@ +seekMap: + isSeekable = true + duration = 1460000 + getPosition(0) = [[timeUs=0, position=179]] + getPosition(1) = [[timeUs=1, position=179]] + getPosition(730000) = [[timeUs=730000, position=398]] + getPosition(1460000) = [[timeUs=1460000, position=3701]] +numberOfTracks = 1 +track 0: + total output bytes = 3504 + sample count = 52 + format 0: + id = 1 + sampleMimeType = audio/opus + maxInputSize = 278 + channelCount = 2 + sampleRate = 48000 + language = und + metadata = entries=[TSSE: description=null: value=Lavf58.29.100] + initializationData: + data = length 19, hash 86852AE2 + data = length 8, hash 72CBCBF5 + data = length 8, hash 79C07075 + sample 0: + time = 483500 + flags = 1 + data = length 3, hash 4732 + sample 1: + time = 493500 + flags = 1 + data = length 3, hash 4732 + sample 2: + time = 503500 + flags = 1 + data = length 3, hash 4732 + sample 3: + time = 513499 + flags = 1 + data = length 3, hash 4732 + sample 4: + time = 523499 + flags = 1 + data = length 3, hash 4732 + sample 5: + time = 533500 + flags = 1 + data = length 3, hash 4732 + sample 6: + time = 543500 + flags = 1 + data = length 3, hash 4732 + sample 7: + time = 553500 + flags = 1 + data = length 3, hash 4732 + sample 8: + time = 563500 + flags = 1 + data = length 3, hash 4732 + sample 9: + time = 573500 + flags = 1 + data = length 3, hash 4732 + sample 10: + time = 583500 + flags = 1 + data = length 3, hash 4732 + sample 11: + time = 593500 + flags = 1 + data = length 3, hash 4732 + sample 12: + time = 603500 + flags = 1 + data = length 3, hash 4732 + sample 13: + time = 613500 + flags = 1 + data = length 3, hash 4732 + sample 14: + time = 623500 + flags = 1 + data = length 3, hash 4732 + sample 15: + time = 633500 + flags = 1 + data = length 3, hash 4732 + sample 16: + time = 643500 + flags = 1 + data = length 3, hash 4732 + sample 17: + time = 653500 + flags = 1 + data = length 3, hash 4732 + sample 18: + time = 663500 + flags = 1 + data = length 3, hash 4732 + sample 19: + time = 673500 + flags = 1 + data = length 3, hash 4732 + sample 20: + time = 683500 + flags = 1 + data = length 3, hash 4732 + sample 21: + time = 693500 + flags = 1 + data = length 3, hash 4732 + sample 22: + time = 703500 + flags = 1 + data = length 3, hash 4732 + sample 23: + time = 713500 + flags = 1 + data = length 3, hash 4732 + sample 24: + time = 723500 + flags = 1 + data = length 3, hash 4732 + sample 25: + time = 733500 + flags = 1 + data = length 3, hash 4732 + sample 26: + time = 743500 + flags = 1 + data = length 66, hash 648F0BC5 + sample 27: + time = 753500 + flags = 1 + data = length 248, hash D07B1166 + sample 28: + time = 763500 + flags = 1 + data = length 239, hash 61AA7E3B + sample 29: + time = 773500 + flags = 1 + data = length 142, hash F01726AD + sample 30: + time = 783500 + flags = 1 + data = length 124, hash 35B50117 + sample 31: + time = 793500 + flags = 1 + data = length 122, hash 6ED2EA14 + sample 32: + time = 803500 + flags = 1 + data = length 118, hash AAB319C9 + sample 33: + time = 813500 + flags = 1 + data = length 117, hash 7B08A466 + sample 34: + time = 823500 + flags = 1 + data = length 120, hash AF62F442 + sample 35: + time = 833500 + flags = 1 + data = length 120, hash 21A0E5E9 + sample 36: + time = 843500 + flags = 1 + data = length 122, hash F191C09 + sample 37: + time = 853500 + flags = 1 + data = length 120, hash C52E4F2D + sample 38: + time = 863500 + flags = 1 + data = length 120, hash D4554502 + sample 39: + time = 873500 + flags = 1 + data = length 121, hash D4E641CF + sample 40: + time = 883500 + flags = 1 + data = length 123, hash 518700A8 + sample 41: + time = 893500 + flags = 1 + data = length 123, hash 6EA13134 + sample 42: + time = 903500 + flags = 1 + data = length 123, hash A4264A7B + sample 43: + time = 913500 + flags = 1 + data = length 126, hash 593B6BA5 + sample 44: + time = 923500 + flags = 1 + data = length 127, hash 15988F8A + sample 45: + time = 933500 + flags = 1 + data = length 134, hash 165D0213 + sample 46: + time = 943500 + flags = 1 + data = length 129, hash 1F5ABD5B + sample 47: + time = 953500 + flags = 1 + data = length 131, hash 65E1E196 + sample 48: + time = 963500 + flags = 1 + data = length 128, hash 70A740A1 + sample 49: + time = 973500 + flags = 1 + data = length 130, hash 2D3733ED + sample 50: + time = 983500 + flags = 1 + data = length 124, hash 6CC37521 + sample 51: + time = 993500 + flags = 536870913 + data = length 129, hash 722253A8 +tracksEnded = true diff --git a/testdata/src/test/assets/mp4/sample_opus.mp4.2.dump b/testdata/src/test/assets/mp4/sample_opus.mp4.2.dump new file mode 100644 index 0000000000..cc688289e2 --- /dev/null +++ b/testdata/src/test/assets/mp4/sample_opus.mp4.2.dump @@ -0,0 +1,40 @@ +seekMap: + isSeekable = true + duration = 1460000 + getPosition(0) = [[timeUs=0, position=179]] + getPosition(1) = [[timeUs=1, position=179]] + getPosition(730000) = [[timeUs=730000, position=398]] + getPosition(1460000) = [[timeUs=1460000, position=3701]] +numberOfTracks = 1 +track 0: + total output bytes = 511 + sample count = 4 + format 0: + id = 1 + sampleMimeType = audio/opus + maxInputSize = 278 + channelCount = 2 + sampleRate = 48000 + language = und + metadata = entries=[TSSE: description=null: value=Lavf58.29.100] + initializationData: + data = length 19, hash 86852AE2 + data = length 8, hash 72CBCBF5 + data = length 8, hash 79C07075 + sample 0: + time = 963500 + flags = 1 + data = length 128, hash 70A740A1 + sample 1: + time = 973500 + flags = 1 + data = length 130, hash 2D3733ED + sample 2: + time = 983500 + flags = 1 + data = length 124, hash 6CC37521 + sample 3: + time = 993500 + flags = 536870913 + data = length 129, hash 722253A8 +tracksEnded = true diff --git a/testdata/src/test/assets/mp4/sample_opus.mp4.3.dump b/testdata/src/test/assets/mp4/sample_opus.mp4.3.dump new file mode 100644 index 0000000000..42e14dbd2d --- /dev/null +++ b/testdata/src/test/assets/mp4/sample_opus.mp4.3.dump @@ -0,0 +1,28 @@ +seekMap: + isSeekable = true + duration = 1460000 + getPosition(0) = [[timeUs=0, position=179]] + getPosition(1) = [[timeUs=1, position=179]] + getPosition(730000) = [[timeUs=730000, position=398]] + getPosition(1460000) = [[timeUs=1460000, position=3701]] +numberOfTracks = 1 +track 0: + total output bytes = 129 + sample count = 1 + format 0: + id = 1 + sampleMimeType = audio/opus + maxInputSize = 278 + channelCount = 2 + sampleRate = 48000 + language = und + metadata = entries=[TSSE: description=null: value=Lavf58.29.100] + initializationData: + data = length 19, hash 86852AE2 + data = length 8, hash 72CBCBF5 + data = length 8, hash 79C07075 + sample 0: + time = 993500 + flags = 536870913 + data = length 129, hash 722253A8 +tracksEnded = true diff --git a/testdata/src/test/assets/mp4/sample_opus.mp4.unknown_length.dump b/testdata/src/test/assets/mp4/sample_opus.mp4.unknown_length.dump new file mode 100644 index 0000000000..f9c1539402 --- /dev/null +++ b/testdata/src/test/assets/mp4/sample_opus.mp4.unknown_length.dump @@ -0,0 +1,428 @@ +seekMap: + isSeekable = true + duration = 1460000 + getPosition(0) = [[timeUs=0, position=179]] + getPosition(1) = [[timeUs=1, position=179]] + getPosition(730000) = [[timeUs=730000, position=398]] + getPosition(1460000) = [[timeUs=1460000, position=3701]] +numberOfTracks = 1 +track 0: + total output bytes = 3651 + sample count = 101 + format 0: + id = 1 + sampleMimeType = audio/opus + maxInputSize = 278 + channelCount = 2 + sampleRate = 48000 + language = und + metadata = entries=[TSSE: description=null: value=Lavf58.29.100] + initializationData: + data = length 19, hash 86852AE2 + data = length 8, hash 72CBCBF5 + data = length 8, hash 79C07075 + sample 0: + time = 0 + flags = 1 + data = length 3, hash 4732 + sample 1: + time = 3500 + flags = 1 + data = length 3, hash 4732 + sample 2: + time = 13500 + flags = 1 + data = length 3, hash 4732 + sample 3: + time = 23500 + flags = 1 + data = length 3, hash 4732 + sample 4: + time = 33500 + flags = 1 + data = length 3, hash 4732 + sample 5: + time = 43500 + flags = 1 + data = length 3, hash 4732 + sample 6: + time = 53500 + flags = 1 + data = length 3, hash 4732 + sample 7: + time = 63500 + flags = 1 + data = length 3, hash 4732 + sample 8: + time = 73500 + flags = 1 + data = length 3, hash 4732 + sample 9: + time = 83500 + flags = 1 + data = length 3, hash 4732 + sample 10: + time = 93500 + flags = 1 + data = length 3, hash 4732 + sample 11: + time = 103500 + flags = 1 + data = length 3, hash 4732 + sample 12: + time = 113500 + flags = 1 + data = length 3, hash 4732 + sample 13: + time = 123500 + flags = 1 + data = length 3, hash 4732 + sample 14: + time = 133500 + flags = 1 + data = length 3, hash 4732 + sample 15: + time = 143500 + flags = 1 + data = length 3, hash 4732 + sample 16: + time = 153500 + flags = 1 + data = length 3, hash 4732 + sample 17: + time = 163500 + flags = 1 + data = length 3, hash 4732 + sample 18: + time = 173500 + flags = 1 + data = length 3, hash 4732 + sample 19: + time = 183500 + flags = 1 + data = length 3, hash 4732 + sample 20: + time = 193500 + flags = 1 + data = length 3, hash 4732 + sample 21: + time = 203500 + flags = 1 + data = length 3, hash 4732 + sample 22: + time = 213500 + flags = 1 + data = length 3, hash 4732 + sample 23: + time = 223500 + flags = 1 + data = length 3, hash 4732 + sample 24: + time = 233500 + flags = 1 + data = length 3, hash 4732 + sample 25: + time = 243500 + flags = 1 + data = length 3, hash 4732 + sample 26: + time = 253500 + flags = 1 + data = length 3, hash 4732 + sample 27: + time = 263500 + flags = 1 + data = length 3, hash 4732 + sample 28: + time = 273500 + flags = 1 + data = length 3, hash 4732 + sample 29: + time = 283500 + flags = 1 + data = length 3, hash 4732 + sample 30: + time = 293500 + flags = 1 + data = length 3, hash 4732 + sample 31: + time = 303500 + flags = 1 + data = length 3, hash 4732 + sample 32: + time = 313500 + flags = 1 + data = length 3, hash 4732 + sample 33: + time = 323500 + flags = 1 + data = length 3, hash 4732 + sample 34: + time = 333500 + flags = 1 + data = length 3, hash 4732 + sample 35: + time = 343500 + flags = 1 + data = length 3, hash 4732 + sample 36: + time = 353500 + flags = 1 + data = length 3, hash 4732 + sample 37: + time = 363500 + flags = 1 + data = length 3, hash 4732 + sample 38: + time = 373500 + flags = 1 + data = length 3, hash 4732 + sample 39: + time = 383500 + flags = 1 + data = length 3, hash 4732 + sample 40: + time = 393500 + flags = 1 + data = length 3, hash 4732 + sample 41: + time = 403500 + flags = 1 + data = length 3, hash 4732 + sample 42: + time = 413500 + flags = 1 + data = length 3, hash 4732 + sample 43: + time = 423500 + flags = 1 + data = length 3, hash 4732 + sample 44: + time = 433500 + flags = 1 + data = length 3, hash 4732 + sample 45: + time = 443500 + flags = 1 + data = length 3, hash 4732 + sample 46: + time = 453500 + flags = 1 + data = length 3, hash 4732 + sample 47: + time = 463500 + flags = 1 + data = length 3, hash 4732 + sample 48: + time = 473500 + flags = 1 + data = length 3, hash 4732 + sample 49: + time = 483500 + flags = 1 + data = length 3, hash 4732 + sample 50: + time = 493500 + flags = 1 + data = length 3, hash 4732 + sample 51: + time = 503500 + flags = 1 + data = length 3, hash 4732 + sample 52: + time = 513499 + flags = 1 + data = length 3, hash 4732 + sample 53: + time = 523499 + flags = 1 + data = length 3, hash 4732 + sample 54: + time = 533500 + flags = 1 + data = length 3, hash 4732 + sample 55: + time = 543500 + flags = 1 + data = length 3, hash 4732 + sample 56: + time = 553500 + flags = 1 + data = length 3, hash 4732 + sample 57: + time = 563500 + flags = 1 + data = length 3, hash 4732 + sample 58: + time = 573500 + flags = 1 + data = length 3, hash 4732 + sample 59: + time = 583500 + flags = 1 + data = length 3, hash 4732 + sample 60: + time = 593500 + flags = 1 + data = length 3, hash 4732 + sample 61: + time = 603500 + flags = 1 + data = length 3, hash 4732 + sample 62: + time = 613500 + flags = 1 + data = length 3, hash 4732 + sample 63: + time = 623500 + flags = 1 + data = length 3, hash 4732 + sample 64: + time = 633500 + flags = 1 + data = length 3, hash 4732 + sample 65: + time = 643500 + flags = 1 + data = length 3, hash 4732 + sample 66: + time = 653500 + flags = 1 + data = length 3, hash 4732 + sample 67: + time = 663500 + flags = 1 + data = length 3, hash 4732 + sample 68: + time = 673500 + flags = 1 + data = length 3, hash 4732 + sample 69: + time = 683500 + flags = 1 + data = length 3, hash 4732 + sample 70: + time = 693500 + flags = 1 + data = length 3, hash 4732 + sample 71: + time = 703500 + flags = 1 + data = length 3, hash 4732 + sample 72: + time = 713500 + flags = 1 + data = length 3, hash 4732 + sample 73: + time = 723500 + flags = 1 + data = length 3, hash 4732 + sample 74: + time = 733500 + flags = 1 + data = length 3, hash 4732 + sample 75: + time = 743500 + flags = 1 + data = length 66, hash 648F0BC5 + sample 76: + time = 753500 + flags = 1 + data = length 248, hash D07B1166 + sample 77: + time = 763500 + flags = 1 + data = length 239, hash 61AA7E3B + sample 78: + time = 773500 + flags = 1 + data = length 142, hash F01726AD + sample 79: + time = 783500 + flags = 1 + data = length 124, hash 35B50117 + sample 80: + time = 793500 + flags = 1 + data = length 122, hash 6ED2EA14 + sample 81: + time = 803500 + flags = 1 + data = length 118, hash AAB319C9 + sample 82: + time = 813500 + flags = 1 + data = length 117, hash 7B08A466 + sample 83: + time = 823500 + flags = 1 + data = length 120, hash AF62F442 + sample 84: + time = 833500 + flags = 1 + data = length 120, hash 21A0E5E9 + sample 85: + time = 843500 + flags = 1 + data = length 122, hash F191C09 + sample 86: + time = 853500 + flags = 1 + data = length 120, hash C52E4F2D + sample 87: + time = 863500 + flags = 1 + data = length 120, hash D4554502 + sample 88: + time = 873500 + flags = 1 + data = length 121, hash D4E641CF + sample 89: + time = 883500 + flags = 1 + data = length 123, hash 518700A8 + sample 90: + time = 893500 + flags = 1 + data = length 123, hash 6EA13134 + sample 91: + time = 903500 + flags = 1 + data = length 123, hash A4264A7B + sample 92: + time = 913500 + flags = 1 + data = length 126, hash 593B6BA5 + sample 93: + time = 923500 + flags = 1 + data = length 127, hash 15988F8A + sample 94: + time = 933500 + flags = 1 + data = length 134, hash 165D0213 + sample 95: + time = 943500 + flags = 1 + data = length 129, hash 1F5ABD5B + sample 96: + time = 953500 + flags = 1 + data = length 131, hash 65E1E196 + sample 97: + time = 963500 + flags = 1 + data = length 128, hash 70A740A1 + sample 98: + time = 973500 + flags = 1 + data = length 130, hash 2D3733ED + sample 99: + time = 983500 + flags = 1 + data = length 124, hash 6CC37521 + sample 100: + time = 993500 + flags = 536870913 + data = length 129, hash 722253A8 +tracksEnded = true diff --git a/testdata/src/test/assets/mp4/sample_opus_fragmented.mp4 b/testdata/src/test/assets/mp4/sample_opus_fragmented.mp4 new file mode 100644 index 0000000000..7195ed1a7f Binary files /dev/null and b/testdata/src/test/assets/mp4/sample_opus_fragmented.mp4 differ diff --git a/testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.0.dump b/testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.0.dump new file mode 100644 index 0000000000..4f1fb74586 --- /dev/null +++ b/testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.0.dump @@ -0,0 +1,1019 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=564]] +numberOfTracks = 1 +track 0: + total output bytes = 81637 + sample count = 250 + format 0: + id = 1 + sampleMimeType = audio/opus + channelCount = 2 + sampleRate = 16000 + language =  + initializationData: + data = length 19, hash 4034F23B + data = length 8, hash 94446F01 + data = length 8, hash 79C07075 + sample 0: + time = 0 + flags = 1 + data = length 326, hash ECC9FF90 + sample 1: + time = 10000 + flags = 1 + data = length 326, hash B041EAAC + sample 2: + time = 20000 + flags = 1 + data = length 326, hash 3DBE1591 + sample 3: + time = 30000 + flags = 1 + data = length 326, hash CE60149B + sample 4: + time = 40000 + flags = 1 + data = length 326, hash 6F04DA9 + sample 5: + time = 50000 + flags = 1 + data = length 326, hash 4E221218 + sample 6: + time = 60000 + flags = 1 + data = length 326, hash 659C80D8 + sample 7: + time = 70000 + flags = 1 + data = length 326, hash E27BB70F + sample 8: + time = 80000 + flags = 1 + data = length 326, hash 3ACDE8E7 + sample 9: + time = 90000 + flags = 1 + data = length 326, hash 1FFB9BDA + sample 10: + time = 100000 + flags = 1 + data = length 326, hash 133E65A0 + sample 11: + time = 110000 + flags = 1 + data = length 326, hash 4216F22F + sample 12: + time = 120000 + flags = 1 + data = length 326, hash 9142C06 + sample 13: + time = 130000 + flags = 1 + data = length 326, hash DF393C06 + sample 14: + time = 140000 + flags = 1 + data = length 326, hash E062DBFA + sample 15: + time = 150000 + flags = 1 + data = length 326, hash 5342554C + sample 16: + time = 160000 + flags = 1 + data = length 326, hash 7FE3D513 + sample 17: + time = 170000 + flags = 1 + data = length 326, hash A4961659 + sample 18: + time = 180000 + flags = 1 + data = length 326, hash 1ADC8A22 + sample 19: + time = 190000 + flags = 1 + data = length 326, hash 687C8DD5 + sample 20: + time = 200000 + flags = 1 + data = length 326, hash B29283 + sample 21: + time = 210000 + flags = 1 + data = length 326, hash 4D5CFDF4 + sample 22: + time = 220000 + flags = 1 + data = length 326, hash D95E1184 + sample 23: + time = 230000 + flags = 1 + data = length 326, hash 5FEDC88C + sample 24: + time = 240000 + flags = 1 + data = length 326, hash 33FAB6DC + sample 25: + time = 250000 + flags = 1 + data = length 326, hash CEAA63EC + sample 26: + time = 260000 + flags = 1 + data = length 326, hash E02FF364 + sample 27: + time = 270000 + flags = 1 + data = length 326, hash E6E2E53F + sample 28: + time = 280000 + flags = 1 + data = length 326, hash 35154DBF + sample 29: + time = 290000 + flags = 1 + data = length 326, hash 595B194B + sample 30: + time = 300000 + flags = 1 + data = length 326, hash ADD13EB0 + sample 31: + time = 310000 + flags = 1 + data = length 326, hash A3B2C3CF + sample 32: + time = 320000 + flags = 1 + data = length 326, hash A93847A3 + sample 33: + time = 330000 + flags = 1 + data = length 326, hash F0E150D9 + sample 34: + time = 340000 + flags = 1 + data = length 326, hash EB671D2B + sample 35: + time = 350000 + flags = 1 + data = length 326, hash A6D5875 + sample 36: + time = 360000 + flags = 1 + data = length 326, hash A417F89D + sample 37: + time = 370000 + flags = 1 + data = length 326, hash BFDE9CD6 + sample 38: + time = 380000 + flags = 1 + data = length 326, hash D6C5E0D9 + sample 39: + time = 390000 + flags = 1 + data = length 326, hash 80BB14DB + sample 40: + time = 400000 + flags = 1 + data = length 326, hash 2E79E0D5 + sample 41: + time = 410000 + flags = 1 + data = length 326, hash 8964BAB4 + sample 42: + time = 420000 + flags = 1 + data = length 326, hash 4F439BE4 + sample 43: + time = 430000 + flags = 1 + data = length 326, hash 92DBC089 + sample 44: + time = 440000 + flags = 1 + data = length 326, hash 73614C9 + sample 45: + time = 450000 + flags = 1 + data = length 326, hash 908631AA + sample 46: + time = 460000 + flags = 1 + data = length 326, hash ED49A6D4 + sample 47: + time = 470000 + flags = 1 + data = length 326, hash B70E3393 + sample 48: + time = 480000 + flags = 1 + data = length 326, hash 7D392160 + sample 49: + time = 490000 + flags = 1 + data = length 326, hash 77957DEE + sample 50: + time = 500000 + flags = 1 + data = length 326, hash 42582970 + sample 51: + time = 510000 + flags = 1 + data = length 326, hash BEEEECBE + sample 52: + time = 520000 + flags = 1 + data = length 326, hash 43BD23B8 + sample 53: + time = 530000 + flags = 1 + data = length 326, hash A72E6AE9 + sample 54: + time = 540000 + flags = 1 + data = length 326, hash 71A5E822 + sample 55: + time = 550000 + flags = 1 + data = length 326, hash F0FCFB9E + sample 56: + time = 560000 + flags = 1 + data = length 326, hash 955628EC + sample 57: + time = 570000 + flags = 1 + data = length 326, hash 29EC8061 + sample 58: + time = 580000 + flags = 1 + data = length 326, hash F4010F62 + sample 59: + time = 590000 + flags = 1 + data = length 326, hash A0A3E80F + sample 60: + time = 600000 + flags = 1 + data = length 326, hash 87DB9495 + sample 61: + time = 610000 + flags = 1 + data = length 326, hash 51012496 + sample 62: + time = 620000 + flags = 1 + data = length 326, hash 8C8A5E6E + sample 63: + time = 630000 + flags = 1 + data = length 326, hash 61ECD20B + sample 64: + time = 640000 + flags = 1 + data = length 326, hash C8C6E306 + sample 65: + time = 650000 + flags = 1 + data = length 327, hash A964C1EB + sample 66: + time = 660000 + flags = 1 + data = length 325, hash 752AE0E6 + sample 67: + time = 670000 + flags = 1 + data = length 326, hash A823251B + sample 68: + time = 680000 + flags = 1 + data = length 326, hash 397840E0 + sample 69: + time = 690000 + flags = 1 + data = length 326, hash 5913B4DA + sample 70: + time = 700000 + flags = 1 + data = length 326, hash BC5046E3 + sample 71: + time = 710000 + flags = 1 + data = length 326, hash 77F42650 + sample 72: + time = 720000 + flags = 1 + data = length 326, hash 2AF70D91 + sample 73: + time = 730000 + flags = 1 + data = length 326, hash 7E736444 + sample 74: + time = 740000 + flags = 1 + data = length 326, hash 74DE6BFC + sample 75: + time = 750000 + flags = 1 + data = length 326, hash C8D036DD + sample 76: + time = 760000 + flags = 1 + data = length 326, hash 85E61A08 + sample 77: + time = 770000 + flags = 1 + data = length 326, hash 83C08838 + sample 78: + time = 780000 + flags = 1 + data = length 326, hash 8C1F745A + sample 79: + time = 790000 + flags = 1 + data = length 326, hash 53097623 + sample 80: + time = 800000 + flags = 1 + data = length 326, hash 5072DCD5 + sample 81: + time = 810000 + flags = 1 + data = length 326, hash 865B8C61 + sample 82: + time = 820000 + flags = 1 + data = length 326, hash C1D25AE1 + sample 83: + time = 830000 + flags = 1 + data = length 326, hash DE2FA734 + sample 84: + time = 840000 + flags = 1 + data = length 326, hash 134D37F4 + sample 85: + time = 850000 + flags = 1 + data = length 326, hash BBAFEE2F + sample 86: + time = 860000 + flags = 1 + data = length 326, hash 44166A38 + sample 87: + time = 870000 + flags = 1 + data = length 326, hash CE3592C0 + sample 88: + time = 880000 + flags = 1 + data = length 326, hash 2F8BCB1B + sample 89: + time = 890000 + flags = 1 + data = length 326, hash 6EB0EE92 + sample 90: + time = 900000 + flags = 1 + data = length 326, hash 26193E23 + sample 91: + time = 910000 + flags = 1 + data = length 326, hash D9CC82FC + sample 92: + time = 920000 + flags = 1 + data = length 326, hash 72A71B6 + sample 93: + time = 930000 + flags = 1 + data = length 326, hash 36D24EDA + sample 94: + time = 940000 + flags = 1 + data = length 326, hash 8CD8720A + sample 95: + time = 950000 + flags = 1 + data = length 326, hash 796DFD09 + sample 96: + time = 960000 + flags = 1 + data = length 326, hash 2B300470 + sample 97: + time = 970000 + flags = 1 + data = length 326, hash 5C224F72 + sample 98: + time = 980000 + flags = 1 + data = length 326, hash DFCD788E + sample 99: + time = 990000 + flags = 1 + data = length 326, hash AD0EE96B + sample 100: + time = 1000000 + flags = 1 + data = length 336, hash 812F4581 + sample 101: + time = 1010000 + flags = 1 + data = length 339, hash 7B767693 + sample 102: + time = 1020000 + flags = 1 + data = length 335, hash 4D8D2DEA + sample 103: + time = 1030000 + flags = 1 + data = length 319, hash D6E65FC3 + sample 104: + time = 1040000 + flags = 1 + data = length 337, hash 7EDAC403 + sample 105: + time = 1050000 + flags = 1 + data = length 341, hash 9D6A1808 + sample 106: + time = 1060000 + flags = 1 + data = length 321, hash C592CA8E + sample 107: + time = 1070000 + flags = 1 + data = length 315, hash 6F70ED6D + sample 108: + time = 1080000 + flags = 1 + data = length 303, hash 84BF23D4 + sample 109: + time = 1090000 + flags = 1 + data = length 314, hash 6FF921D2 + sample 110: + time = 1100000 + flags = 1 + data = length 326, hash C5CDBC78 + sample 111: + time = 1110000 + flags = 1 + data = length 326, hash C1DC417A + sample 112: + time = 1120000 + flags = 1 + data = length 326, hash 1C12B6D8 + sample 113: + time = 1130000 + flags = 1 + data = length 326, hash A7A8F4EF + sample 114: + time = 1140000 + flags = 1 + data = length 326, hash 46AF466 + sample 115: + time = 1150000 + flags = 1 + data = length 326, hash 7DC33E91 + sample 116: + time = 1160000 + flags = 1 + data = length 326, hash 14FD7EE3 + sample 117: + time = 1170000 + flags = 1 + data = length 343, hash C81AA63 + sample 118: + time = 1180000 + flags = 1 + data = length 337, hash 10348132 + sample 119: + time = 1190000 + flags = 1 + data = length 324, hash 5039A7BF + sample 120: + time = 1200000 + flags = 1 + data = length 335, hash 7C13047E + sample 121: + time = 1210000 + flags = 1 + data = length 324, hash 86784B79 + sample 122: + time = 1220000 + flags = 1 + data = length 358, hash 2F2E80E4 + sample 123: + time = 1230000 + flags = 1 + data = length 345, hash B18584BD + sample 124: + time = 1240000 + flags = 1 + data = length 330, hash C817AA1A + sample 125: + time = 1250000 + flags = 1 + data = length 321, hash 4B1B165A + sample 126: + time = 1260000 + flags = 1 + data = length 336, hash 412253B8 + sample 127: + time = 1270000 + flags = 1 + data = length 332, hash FD1EAC64 + sample 128: + time = 1280000 + flags = 1 + data = length 334, hash 9E814A17 + sample 129: + time = 1290000 + flags = 1 + data = length 321, hash 6A723041 + sample 130: + time = 1300000 + flags = 1 + data = length 333, hash AF5E2A13 + sample 131: + time = 1310000 + flags = 1 + data = length 332, hash C8DC1D61 + sample 132: + time = 1320000 + flags = 1 + data = length 345, hash 269EDF4 + sample 133: + time = 1330000 + flags = 1 + data = length 355, hash 14625CB5 + sample 134: + time = 1340000 + flags = 1 + data = length 342, hash 6F45840D + sample 135: + time = 1350000 + flags = 1 + data = length 341, hash 72AEBC16 + sample 136: + time = 1360000 + flags = 1 + data = length 317, hash 9F7FEC24 + sample 137: + time = 1370000 + flags = 1 + data = length 349, hash 7CD57187 + sample 138: + time = 1380000 + flags = 1 + data = length 345, hash 9CDC475E + sample 139: + time = 1390000 + flags = 1 + data = length 348, hash B73A1C36 + sample 140: + time = 1400000 + flags = 1 + data = length 358, hash 37D19B + sample 141: + time = 1410000 + flags = 1 + data = length 350, hash 2238BB83 + sample 142: + time = 1420000 + flags = 1 + data = length 334, hash 350DF51D + sample 143: + time = 1430000 + flags = 1 + data = length 338, hash 60CE5942 + sample 144: + time = 1440000 + flags = 1 + data = length 317, hash 2DCBBC2F + sample 145: + time = 1450000 + flags = 1 + data = length 307, hash C67D43FB + sample 146: + time = 1460000 + flags = 1 + data = length 343, hash 807EBA32 + sample 147: + time = 1470000 + flags = 1 + data = length 337, hash AD9764BE + sample 148: + time = 1480000 + flags = 1 + data = length 326, hash 5BBF2D25 + sample 149: + time = 1490000 + flags = 1 + data = length 326, hash 2F0186AA + sample 150: + time = 1500000 + flags = 1 + data = length 326, hash 8550A008 + sample 151: + time = 1510000 + flags = 1 + data = length 326, hash 548FBE7A + sample 152: + time = 1520000 + flags = 1 + data = length 326, hash 587D19C2 + sample 153: + time = 1530000 + flags = 1 + data = length 326, hash BE3157BA + sample 154: + time = 1540000 + flags = 1 + data = length 326, hash CE358311 + sample 155: + time = 1550000 + flags = 1 + data = length 326, hash 9F63610C + sample 156: + time = 1560000 + flags = 1 + data = length 326, hash 166C76E3 + sample 157: + time = 1570000 + flags = 1 + data = length 324, hash DD8830DB + sample 158: + time = 1580000 + flags = 1 + data = length 328, hash 95BFDBE + sample 159: + time = 1590000 + flags = 1 + data = length 326, hash 859713E2 + sample 160: + time = 1600000 + flags = 1 + data = length 326, hash A1D14AE4 + sample 161: + time = 1610000 + flags = 1 + data = length 326, hash 3AD13AFC + sample 162: + time = 1620000 + flags = 1 + data = length 326, hash 3EACF164 + sample 163: + time = 1630000 + flags = 1 + data = length 326, hash CF42F132 + sample 164: + time = 1640000 + flags = 1 + data = length 326, hash A1CBE4F2 + sample 165: + time = 1650000 + flags = 1 + data = length 326, hash D4EEE23E + sample 166: + time = 1660000 + flags = 1 + data = length 326, hash 6CF8758E + sample 167: + time = 1670000 + flags = 1 + data = length 326, hash DE1AECC0 + sample 168: + time = 1680000 + flags = 1 + data = length 326, hash B41D28EC + sample 169: + time = 1690000 + flags = 1 + data = length 326, hash F67E91D9 + sample 170: + time = 1700000 + flags = 1 + data = length 326, hash 7EE6CFF4 + sample 171: + time = 1710000 + flags = 1 + data = length 326, hash D349B8F7 + sample 172: + time = 1720000 + flags = 1 + data = length 326, hash 996EAE7 + sample 173: + time = 1730000 + flags = 1 + data = length 326, hash BB666B7B + sample 174: + time = 1740000 + flags = 1 + data = length 326, hash DC59B61F + sample 175: + time = 1750000 + flags = 1 + data = length 326, hash ED75555F + sample 176: + time = 1760000 + flags = 1 + data = length 326, hash E934CD31 + sample 177: + time = 1770000 + flags = 1 + data = length 326, hash C4A0F88D + sample 178: + time = 1780000 + flags = 1 + data = length 326, hash EF60D35 + sample 179: + time = 1790000 + flags = 1 + data = length 326, hash 89D0C6FD + sample 180: + time = 1800000 + flags = 1 + data = length 326, hash A8065459 + sample 181: + time = 1810000 + flags = 1 + data = length 319, hash DA5BE3EB + sample 182: + time = 1820000 + flags = 1 + data = length 301, hash 781565E7 + sample 183: + time = 1830000 + flags = 1 + data = length 324, hash 453B347D + sample 184: + time = 1840000 + flags = 1 + data = length 344, hash AEFF20B2 + sample 185: + time = 1850000 + flags = 1 + data = length 342, hash 98E8532B + sample 186: + time = 1860000 + flags = 1 + data = length 326, hash 56CD6CC3 + sample 187: + time = 1870000 + flags = 1 + data = length 299, hash 8966DB + sample 188: + time = 1880000 + flags = 1 + data = length 295, hash 398A2974 + sample 189: + time = 1890000 + flags = 1 + data = length 320, hash 3312D070 + sample 190: + time = 1900000 + flags = 1 + data = length 338, hash BBCD81BA + sample 191: + time = 1910000 + flags = 1 + data = length 336, hash E0C58ECC + sample 192: + time = 1920000 + flags = 1 + data = length 325, hash AEF16A96 + sample 193: + time = 1930000 + flags = 1 + data = length 350, hash 4C509E69 + sample 194: + time = 1940000 + flags = 1 + data = length 344, hash DC402A4 + sample 195: + time = 1950000 + flags = 1 + data = length 327, hash 1318C437 + sample 196: + time = 1960000 + flags = 1 + data = length 316, hash A36FB835 + sample 197: + time = 1970000 + flags = 1 + data = length 330, hash E2EFF591 + sample 198: + time = 1980000 + flags = 1 + data = length 312, hash F67E05AF + sample 199: + time = 1990000 + flags = 1 + data = length 332, hash 93136C32 + sample 200: + time = 2000000 + flags = 1 + data = length 340, hash 4AA7608A + sample 201: + time = 2010000 + flags = 1 + data = length 326, hash D3A44734 + sample 202: + time = 2020000 + flags = 1 + data = length 323, hash 61A8A104 + sample 203: + time = 2030000 + flags = 1 + data = length 317, hash 3C1D786D + sample 204: + time = 2040000 + flags = 1 + data = length 310, hash F5322F60 + sample 205: + time = 2050000 + flags = 1 + data = length 320, hash 442CD2EC + sample 206: + time = 2060000 + flags = 1 + data = length 326, hash 76E93566 + sample 207: + time = 2070000 + flags = 1 + data = length 360, hash F9977B24 + sample 208: + time = 2080000 + flags = 1 + data = length 326, hash 1881F6EF + sample 209: + time = 2090000 + flags = 1 + data = length 326, hash D75687AB + sample 210: + time = 2100000 + flags = 1 + data = length 315, hash 533A1DA7 + sample 211: + time = 2110000 + flags = 1 + data = length 304, hash 38E382E7 + sample 212: + time = 2120000 + flags = 1 + data = length 328, hash 4C675814 + sample 213: + time = 2130000 + flags = 1 + data = length 312, hash 1E1BDC5C + sample 214: + time = 2140000 + flags = 1 + data = length 298, hash C7456FFC + sample 215: + time = 2150000 + flags = 1 + data = length 293, hash 84FD8E23 + sample 216: + time = 2160000 + flags = 1 + data = length 312, hash 4FC32BF6 + sample 217: + time = 2170000 + flags = 1 + data = length 303, hash 908B7478 + sample 218: + time = 2180000 + flags = 1 + data = length 316, hash 704860D + sample 219: + time = 2190000 + flags = 1 + data = length 328, hash B62E6465 + sample 220: + time = 2200000 + flags = 1 + data = length 330, hash 5B6B17AE + sample 221: + time = 2210000 + flags = 1 + data = length 326, hash 87514738 + sample 222: + time = 2220000 + flags = 1 + data = length 325, hash B0D3AA65 + sample 223: + time = 2230000 + flags = 1 + data = length 344, hash D70C0C14 + sample 224: + time = 2240000 + flags = 1 + data = length 359, hash E2416115 + sample 225: + time = 2250000 + flags = 1 + data = length 353, hash 359E8F1D + sample 226: + time = 2260000 + flags = 1 + data = length 351, hash 89FFD6C8 + sample 227: + time = 2270000 + flags = 1 + data = length 346, hash 6F4E6C8B + sample 228: + time = 2280000 + flags = 1 + data = length 341, hash 3DB3864B + sample 229: + time = 2290000 + flags = 1 + data = length 336, hash 82AEE005 + sample 230: + time = 2300000 + flags = 1 + data = length 326, hash 8115A41A + sample 231: + time = 2310000 + flags = 1 + data = length 326, hash D7675B30 + sample 232: + time = 2320000 + flags = 1 + data = length 326, hash 529C1134 + sample 233: + time = 2330000 + flags = 1 + data = length 326, hash 30E917D7 + sample 234: + time = 2340000 + flags = 1 + data = length 326, hash A0C5BBB5 + sample 235: + time = 2350000 + flags = 1 + data = length 325, hash A1703C7F + sample 236: + time = 2360000 + flags = 1 + data = length 315, hash 443DC04E + sample 237: + time = 2370000 + flags = 1 + data = length 320, hash 3975FFC4 + sample 238: + time = 2380000 + flags = 1 + data = length 324, hash 4F5CFD58 + sample 239: + time = 2390000 + flags = 1 + data = length 321, hash BF9A6611 + sample 240: + time = 2400000 + flags = 1 + data = length 330, hash B238370E + sample 241: + time = 2410000 + flags = 1 + data = length 321, hash 98A77876 + sample 242: + time = 2420000 + flags = 1 + data = length 312, hash 3E6ACD6C + sample 243: + time = 2430000 + flags = 1 + data = length 318, hash FA97020A + sample 244: + time = 2440000 + flags = 1 + data = length 311, hash 8A101DFA + sample 245: + time = 2450000 + flags = 1 + data = length 310, hash C892E017 + sample 246: + time = 2460000 + flags = 1 + data = length 306, hash C088A2D3 + sample 247: + time = 2470000 + flags = 1 + data = length 292, hash 9C2757C6 + sample 248: + time = 2480000 + flags = 1 + data = length 291, hash 656B9B94 + sample 249: + time = 2490000 + flags = 1 + data = length 306, hash 18C812 +tracksEnded = true diff --git a/testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.unknown_length.dump b/testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.unknown_length.dump new file mode 100644 index 0000000000..4f1fb74586 --- /dev/null +++ b/testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.unknown_length.dump @@ -0,0 +1,1019 @@ +seekMap: + isSeekable = false + duration = UNSET TIME + getPosition(0) = [[timeUs=0, position=564]] +numberOfTracks = 1 +track 0: + total output bytes = 81637 + sample count = 250 + format 0: + id = 1 + sampleMimeType = audio/opus + channelCount = 2 + sampleRate = 16000 + language =  + initializationData: + data = length 19, hash 4034F23B + data = length 8, hash 94446F01 + data = length 8, hash 79C07075 + sample 0: + time = 0 + flags = 1 + data = length 326, hash ECC9FF90 + sample 1: + time = 10000 + flags = 1 + data = length 326, hash B041EAAC + sample 2: + time = 20000 + flags = 1 + data = length 326, hash 3DBE1591 + sample 3: + time = 30000 + flags = 1 + data = length 326, hash CE60149B + sample 4: + time = 40000 + flags = 1 + data = length 326, hash 6F04DA9 + sample 5: + time = 50000 + flags = 1 + data = length 326, hash 4E221218 + sample 6: + time = 60000 + flags = 1 + data = length 326, hash 659C80D8 + sample 7: + time = 70000 + flags = 1 + data = length 326, hash E27BB70F + sample 8: + time = 80000 + flags = 1 + data = length 326, hash 3ACDE8E7 + sample 9: + time = 90000 + flags = 1 + data = length 326, hash 1FFB9BDA + sample 10: + time = 100000 + flags = 1 + data = length 326, hash 133E65A0 + sample 11: + time = 110000 + flags = 1 + data = length 326, hash 4216F22F + sample 12: + time = 120000 + flags = 1 + data = length 326, hash 9142C06 + sample 13: + time = 130000 + flags = 1 + data = length 326, hash DF393C06 + sample 14: + time = 140000 + flags = 1 + data = length 326, hash E062DBFA + sample 15: + time = 150000 + flags = 1 + data = length 326, hash 5342554C + sample 16: + time = 160000 + flags = 1 + data = length 326, hash 7FE3D513 + sample 17: + time = 170000 + flags = 1 + data = length 326, hash A4961659 + sample 18: + time = 180000 + flags = 1 + data = length 326, hash 1ADC8A22 + sample 19: + time = 190000 + flags = 1 + data = length 326, hash 687C8DD5 + sample 20: + time = 200000 + flags = 1 + data = length 326, hash B29283 + sample 21: + time = 210000 + flags = 1 + data = length 326, hash 4D5CFDF4 + sample 22: + time = 220000 + flags = 1 + data = length 326, hash D95E1184 + sample 23: + time = 230000 + flags = 1 + data = length 326, hash 5FEDC88C + sample 24: + time = 240000 + flags = 1 + data = length 326, hash 33FAB6DC + sample 25: + time = 250000 + flags = 1 + data = length 326, hash CEAA63EC + sample 26: + time = 260000 + flags = 1 + data = length 326, hash E02FF364 + sample 27: + time = 270000 + flags = 1 + data = length 326, hash E6E2E53F + sample 28: + time = 280000 + flags = 1 + data = length 326, hash 35154DBF + sample 29: + time = 290000 + flags = 1 + data = length 326, hash 595B194B + sample 30: + time = 300000 + flags = 1 + data = length 326, hash ADD13EB0 + sample 31: + time = 310000 + flags = 1 + data = length 326, hash A3B2C3CF + sample 32: + time = 320000 + flags = 1 + data = length 326, hash A93847A3 + sample 33: + time = 330000 + flags = 1 + data = length 326, hash F0E150D9 + sample 34: + time = 340000 + flags = 1 + data = length 326, hash EB671D2B + sample 35: + time = 350000 + flags = 1 + data = length 326, hash A6D5875 + sample 36: + time = 360000 + flags = 1 + data = length 326, hash A417F89D + sample 37: + time = 370000 + flags = 1 + data = length 326, hash BFDE9CD6 + sample 38: + time = 380000 + flags = 1 + data = length 326, hash D6C5E0D9 + sample 39: + time = 390000 + flags = 1 + data = length 326, hash 80BB14DB + sample 40: + time = 400000 + flags = 1 + data = length 326, hash 2E79E0D5 + sample 41: + time = 410000 + flags = 1 + data = length 326, hash 8964BAB4 + sample 42: + time = 420000 + flags = 1 + data = length 326, hash 4F439BE4 + sample 43: + time = 430000 + flags = 1 + data = length 326, hash 92DBC089 + sample 44: + time = 440000 + flags = 1 + data = length 326, hash 73614C9 + sample 45: + time = 450000 + flags = 1 + data = length 326, hash 908631AA + sample 46: + time = 460000 + flags = 1 + data = length 326, hash ED49A6D4 + sample 47: + time = 470000 + flags = 1 + data = length 326, hash B70E3393 + sample 48: + time = 480000 + flags = 1 + data = length 326, hash 7D392160 + sample 49: + time = 490000 + flags = 1 + data = length 326, hash 77957DEE + sample 50: + time = 500000 + flags = 1 + data = length 326, hash 42582970 + sample 51: + time = 510000 + flags = 1 + data = length 326, hash BEEEECBE + sample 52: + time = 520000 + flags = 1 + data = length 326, hash 43BD23B8 + sample 53: + time = 530000 + flags = 1 + data = length 326, hash A72E6AE9 + sample 54: + time = 540000 + flags = 1 + data = length 326, hash 71A5E822 + sample 55: + time = 550000 + flags = 1 + data = length 326, hash F0FCFB9E + sample 56: + time = 560000 + flags = 1 + data = length 326, hash 955628EC + sample 57: + time = 570000 + flags = 1 + data = length 326, hash 29EC8061 + sample 58: + time = 580000 + flags = 1 + data = length 326, hash F4010F62 + sample 59: + time = 590000 + flags = 1 + data = length 326, hash A0A3E80F + sample 60: + time = 600000 + flags = 1 + data = length 326, hash 87DB9495 + sample 61: + time = 610000 + flags = 1 + data = length 326, hash 51012496 + sample 62: + time = 620000 + flags = 1 + data = length 326, hash 8C8A5E6E + sample 63: + time = 630000 + flags = 1 + data = length 326, hash 61ECD20B + sample 64: + time = 640000 + flags = 1 + data = length 326, hash C8C6E306 + sample 65: + time = 650000 + flags = 1 + data = length 327, hash A964C1EB + sample 66: + time = 660000 + flags = 1 + data = length 325, hash 752AE0E6 + sample 67: + time = 670000 + flags = 1 + data = length 326, hash A823251B + sample 68: + time = 680000 + flags = 1 + data = length 326, hash 397840E0 + sample 69: + time = 690000 + flags = 1 + data = length 326, hash 5913B4DA + sample 70: + time = 700000 + flags = 1 + data = length 326, hash BC5046E3 + sample 71: + time = 710000 + flags = 1 + data = length 326, hash 77F42650 + sample 72: + time = 720000 + flags = 1 + data = length 326, hash 2AF70D91 + sample 73: + time = 730000 + flags = 1 + data = length 326, hash 7E736444 + sample 74: + time = 740000 + flags = 1 + data = length 326, hash 74DE6BFC + sample 75: + time = 750000 + flags = 1 + data = length 326, hash C8D036DD + sample 76: + time = 760000 + flags = 1 + data = length 326, hash 85E61A08 + sample 77: + time = 770000 + flags = 1 + data = length 326, hash 83C08838 + sample 78: + time = 780000 + flags = 1 + data = length 326, hash 8C1F745A + sample 79: + time = 790000 + flags = 1 + data = length 326, hash 53097623 + sample 80: + time = 800000 + flags = 1 + data = length 326, hash 5072DCD5 + sample 81: + time = 810000 + flags = 1 + data = length 326, hash 865B8C61 + sample 82: + time = 820000 + flags = 1 + data = length 326, hash C1D25AE1 + sample 83: + time = 830000 + flags = 1 + data = length 326, hash DE2FA734 + sample 84: + time = 840000 + flags = 1 + data = length 326, hash 134D37F4 + sample 85: + time = 850000 + flags = 1 + data = length 326, hash BBAFEE2F + sample 86: + time = 860000 + flags = 1 + data = length 326, hash 44166A38 + sample 87: + time = 870000 + flags = 1 + data = length 326, hash CE3592C0 + sample 88: + time = 880000 + flags = 1 + data = length 326, hash 2F8BCB1B + sample 89: + time = 890000 + flags = 1 + data = length 326, hash 6EB0EE92 + sample 90: + time = 900000 + flags = 1 + data = length 326, hash 26193E23 + sample 91: + time = 910000 + flags = 1 + data = length 326, hash D9CC82FC + sample 92: + time = 920000 + flags = 1 + data = length 326, hash 72A71B6 + sample 93: + time = 930000 + flags = 1 + data = length 326, hash 36D24EDA + sample 94: + time = 940000 + flags = 1 + data = length 326, hash 8CD8720A + sample 95: + time = 950000 + flags = 1 + data = length 326, hash 796DFD09 + sample 96: + time = 960000 + flags = 1 + data = length 326, hash 2B300470 + sample 97: + time = 970000 + flags = 1 + data = length 326, hash 5C224F72 + sample 98: + time = 980000 + flags = 1 + data = length 326, hash DFCD788E + sample 99: + time = 990000 + flags = 1 + data = length 326, hash AD0EE96B + sample 100: + time = 1000000 + flags = 1 + data = length 336, hash 812F4581 + sample 101: + time = 1010000 + flags = 1 + data = length 339, hash 7B767693 + sample 102: + time = 1020000 + flags = 1 + data = length 335, hash 4D8D2DEA + sample 103: + time = 1030000 + flags = 1 + data = length 319, hash D6E65FC3 + sample 104: + time = 1040000 + flags = 1 + data = length 337, hash 7EDAC403 + sample 105: + time = 1050000 + flags = 1 + data = length 341, hash 9D6A1808 + sample 106: + time = 1060000 + flags = 1 + data = length 321, hash C592CA8E + sample 107: + time = 1070000 + flags = 1 + data = length 315, hash 6F70ED6D + sample 108: + time = 1080000 + flags = 1 + data = length 303, hash 84BF23D4 + sample 109: + time = 1090000 + flags = 1 + data = length 314, hash 6FF921D2 + sample 110: + time = 1100000 + flags = 1 + data = length 326, hash C5CDBC78 + sample 111: + time = 1110000 + flags = 1 + data = length 326, hash C1DC417A + sample 112: + time = 1120000 + flags = 1 + data = length 326, hash 1C12B6D8 + sample 113: + time = 1130000 + flags = 1 + data = length 326, hash A7A8F4EF + sample 114: + time = 1140000 + flags = 1 + data = length 326, hash 46AF466 + sample 115: + time = 1150000 + flags = 1 + data = length 326, hash 7DC33E91 + sample 116: + time = 1160000 + flags = 1 + data = length 326, hash 14FD7EE3 + sample 117: + time = 1170000 + flags = 1 + data = length 343, hash C81AA63 + sample 118: + time = 1180000 + flags = 1 + data = length 337, hash 10348132 + sample 119: + time = 1190000 + flags = 1 + data = length 324, hash 5039A7BF + sample 120: + time = 1200000 + flags = 1 + data = length 335, hash 7C13047E + sample 121: + time = 1210000 + flags = 1 + data = length 324, hash 86784B79 + sample 122: + time = 1220000 + flags = 1 + data = length 358, hash 2F2E80E4 + sample 123: + time = 1230000 + flags = 1 + data = length 345, hash B18584BD + sample 124: + time = 1240000 + flags = 1 + data = length 330, hash C817AA1A + sample 125: + time = 1250000 + flags = 1 + data = length 321, hash 4B1B165A + sample 126: + time = 1260000 + flags = 1 + data = length 336, hash 412253B8 + sample 127: + time = 1270000 + flags = 1 + data = length 332, hash FD1EAC64 + sample 128: + time = 1280000 + flags = 1 + data = length 334, hash 9E814A17 + sample 129: + time = 1290000 + flags = 1 + data = length 321, hash 6A723041 + sample 130: + time = 1300000 + flags = 1 + data = length 333, hash AF5E2A13 + sample 131: + time = 1310000 + flags = 1 + data = length 332, hash C8DC1D61 + sample 132: + time = 1320000 + flags = 1 + data = length 345, hash 269EDF4 + sample 133: + time = 1330000 + flags = 1 + data = length 355, hash 14625CB5 + sample 134: + time = 1340000 + flags = 1 + data = length 342, hash 6F45840D + sample 135: + time = 1350000 + flags = 1 + data = length 341, hash 72AEBC16 + sample 136: + time = 1360000 + flags = 1 + data = length 317, hash 9F7FEC24 + sample 137: + time = 1370000 + flags = 1 + data = length 349, hash 7CD57187 + sample 138: + time = 1380000 + flags = 1 + data = length 345, hash 9CDC475E + sample 139: + time = 1390000 + flags = 1 + data = length 348, hash B73A1C36 + sample 140: + time = 1400000 + flags = 1 + data = length 358, hash 37D19B + sample 141: + time = 1410000 + flags = 1 + data = length 350, hash 2238BB83 + sample 142: + time = 1420000 + flags = 1 + data = length 334, hash 350DF51D + sample 143: + time = 1430000 + flags = 1 + data = length 338, hash 60CE5942 + sample 144: + time = 1440000 + flags = 1 + data = length 317, hash 2DCBBC2F + sample 145: + time = 1450000 + flags = 1 + data = length 307, hash C67D43FB + sample 146: + time = 1460000 + flags = 1 + data = length 343, hash 807EBA32 + sample 147: + time = 1470000 + flags = 1 + data = length 337, hash AD9764BE + sample 148: + time = 1480000 + flags = 1 + data = length 326, hash 5BBF2D25 + sample 149: + time = 1490000 + flags = 1 + data = length 326, hash 2F0186AA + sample 150: + time = 1500000 + flags = 1 + data = length 326, hash 8550A008 + sample 151: + time = 1510000 + flags = 1 + data = length 326, hash 548FBE7A + sample 152: + time = 1520000 + flags = 1 + data = length 326, hash 587D19C2 + sample 153: + time = 1530000 + flags = 1 + data = length 326, hash BE3157BA + sample 154: + time = 1540000 + flags = 1 + data = length 326, hash CE358311 + sample 155: + time = 1550000 + flags = 1 + data = length 326, hash 9F63610C + sample 156: + time = 1560000 + flags = 1 + data = length 326, hash 166C76E3 + sample 157: + time = 1570000 + flags = 1 + data = length 324, hash DD8830DB + sample 158: + time = 1580000 + flags = 1 + data = length 328, hash 95BFDBE + sample 159: + time = 1590000 + flags = 1 + data = length 326, hash 859713E2 + sample 160: + time = 1600000 + flags = 1 + data = length 326, hash A1D14AE4 + sample 161: + time = 1610000 + flags = 1 + data = length 326, hash 3AD13AFC + sample 162: + time = 1620000 + flags = 1 + data = length 326, hash 3EACF164 + sample 163: + time = 1630000 + flags = 1 + data = length 326, hash CF42F132 + sample 164: + time = 1640000 + flags = 1 + data = length 326, hash A1CBE4F2 + sample 165: + time = 1650000 + flags = 1 + data = length 326, hash D4EEE23E + sample 166: + time = 1660000 + flags = 1 + data = length 326, hash 6CF8758E + sample 167: + time = 1670000 + flags = 1 + data = length 326, hash DE1AECC0 + sample 168: + time = 1680000 + flags = 1 + data = length 326, hash B41D28EC + sample 169: + time = 1690000 + flags = 1 + data = length 326, hash F67E91D9 + sample 170: + time = 1700000 + flags = 1 + data = length 326, hash 7EE6CFF4 + sample 171: + time = 1710000 + flags = 1 + data = length 326, hash D349B8F7 + sample 172: + time = 1720000 + flags = 1 + data = length 326, hash 996EAE7 + sample 173: + time = 1730000 + flags = 1 + data = length 326, hash BB666B7B + sample 174: + time = 1740000 + flags = 1 + data = length 326, hash DC59B61F + sample 175: + time = 1750000 + flags = 1 + data = length 326, hash ED75555F + sample 176: + time = 1760000 + flags = 1 + data = length 326, hash E934CD31 + sample 177: + time = 1770000 + flags = 1 + data = length 326, hash C4A0F88D + sample 178: + time = 1780000 + flags = 1 + data = length 326, hash EF60D35 + sample 179: + time = 1790000 + flags = 1 + data = length 326, hash 89D0C6FD + sample 180: + time = 1800000 + flags = 1 + data = length 326, hash A8065459 + sample 181: + time = 1810000 + flags = 1 + data = length 319, hash DA5BE3EB + sample 182: + time = 1820000 + flags = 1 + data = length 301, hash 781565E7 + sample 183: + time = 1830000 + flags = 1 + data = length 324, hash 453B347D + sample 184: + time = 1840000 + flags = 1 + data = length 344, hash AEFF20B2 + sample 185: + time = 1850000 + flags = 1 + data = length 342, hash 98E8532B + sample 186: + time = 1860000 + flags = 1 + data = length 326, hash 56CD6CC3 + sample 187: + time = 1870000 + flags = 1 + data = length 299, hash 8966DB + sample 188: + time = 1880000 + flags = 1 + data = length 295, hash 398A2974 + sample 189: + time = 1890000 + flags = 1 + data = length 320, hash 3312D070 + sample 190: + time = 1900000 + flags = 1 + data = length 338, hash BBCD81BA + sample 191: + time = 1910000 + flags = 1 + data = length 336, hash E0C58ECC + sample 192: + time = 1920000 + flags = 1 + data = length 325, hash AEF16A96 + sample 193: + time = 1930000 + flags = 1 + data = length 350, hash 4C509E69 + sample 194: + time = 1940000 + flags = 1 + data = length 344, hash DC402A4 + sample 195: + time = 1950000 + flags = 1 + data = length 327, hash 1318C437 + sample 196: + time = 1960000 + flags = 1 + data = length 316, hash A36FB835 + sample 197: + time = 1970000 + flags = 1 + data = length 330, hash E2EFF591 + sample 198: + time = 1980000 + flags = 1 + data = length 312, hash F67E05AF + sample 199: + time = 1990000 + flags = 1 + data = length 332, hash 93136C32 + sample 200: + time = 2000000 + flags = 1 + data = length 340, hash 4AA7608A + sample 201: + time = 2010000 + flags = 1 + data = length 326, hash D3A44734 + sample 202: + time = 2020000 + flags = 1 + data = length 323, hash 61A8A104 + sample 203: + time = 2030000 + flags = 1 + data = length 317, hash 3C1D786D + sample 204: + time = 2040000 + flags = 1 + data = length 310, hash F5322F60 + sample 205: + time = 2050000 + flags = 1 + data = length 320, hash 442CD2EC + sample 206: + time = 2060000 + flags = 1 + data = length 326, hash 76E93566 + sample 207: + time = 2070000 + flags = 1 + data = length 360, hash F9977B24 + sample 208: + time = 2080000 + flags = 1 + data = length 326, hash 1881F6EF + sample 209: + time = 2090000 + flags = 1 + data = length 326, hash D75687AB + sample 210: + time = 2100000 + flags = 1 + data = length 315, hash 533A1DA7 + sample 211: + time = 2110000 + flags = 1 + data = length 304, hash 38E382E7 + sample 212: + time = 2120000 + flags = 1 + data = length 328, hash 4C675814 + sample 213: + time = 2130000 + flags = 1 + data = length 312, hash 1E1BDC5C + sample 214: + time = 2140000 + flags = 1 + data = length 298, hash C7456FFC + sample 215: + time = 2150000 + flags = 1 + data = length 293, hash 84FD8E23 + sample 216: + time = 2160000 + flags = 1 + data = length 312, hash 4FC32BF6 + sample 217: + time = 2170000 + flags = 1 + data = length 303, hash 908B7478 + sample 218: + time = 2180000 + flags = 1 + data = length 316, hash 704860D + sample 219: + time = 2190000 + flags = 1 + data = length 328, hash B62E6465 + sample 220: + time = 2200000 + flags = 1 + data = length 330, hash 5B6B17AE + sample 221: + time = 2210000 + flags = 1 + data = length 326, hash 87514738 + sample 222: + time = 2220000 + flags = 1 + data = length 325, hash B0D3AA65 + sample 223: + time = 2230000 + flags = 1 + data = length 344, hash D70C0C14 + sample 224: + time = 2240000 + flags = 1 + data = length 359, hash E2416115 + sample 225: + time = 2250000 + flags = 1 + data = length 353, hash 359E8F1D + sample 226: + time = 2260000 + flags = 1 + data = length 351, hash 89FFD6C8 + sample 227: + time = 2270000 + flags = 1 + data = length 346, hash 6F4E6C8B + sample 228: + time = 2280000 + flags = 1 + data = length 341, hash 3DB3864B + sample 229: + time = 2290000 + flags = 1 + data = length 336, hash 82AEE005 + sample 230: + time = 2300000 + flags = 1 + data = length 326, hash 8115A41A + sample 231: + time = 2310000 + flags = 1 + data = length 326, hash D7675B30 + sample 232: + time = 2320000 + flags = 1 + data = length 326, hash 529C1134 + sample 233: + time = 2330000 + flags = 1 + data = length 326, hash 30E917D7 + sample 234: + time = 2340000 + flags = 1 + data = length 326, hash A0C5BBB5 + sample 235: + time = 2350000 + flags = 1 + data = length 325, hash A1703C7F + sample 236: + time = 2360000 + flags = 1 + data = length 315, hash 443DC04E + sample 237: + time = 2370000 + flags = 1 + data = length 320, hash 3975FFC4 + sample 238: + time = 2380000 + flags = 1 + data = length 324, hash 4F5CFD58 + sample 239: + time = 2390000 + flags = 1 + data = length 321, hash BF9A6611 + sample 240: + time = 2400000 + flags = 1 + data = length 330, hash B238370E + sample 241: + time = 2410000 + flags = 1 + data = length 321, hash 98A77876 + sample 242: + time = 2420000 + flags = 1 + data = length 312, hash 3E6ACD6C + sample 243: + time = 2430000 + flags = 1 + data = length 318, hash FA97020A + sample 244: + time = 2440000 + flags = 1 + data = length 311, hash 8A101DFA + sample 245: + time = 2450000 + flags = 1 + data = length 310, hash C892E017 + sample 246: + time = 2460000 + flags = 1 + data = length 306, hash C088A2D3 + sample 247: + time = 2470000 + flags = 1 + data = length 292, hash 9C2757C6 + sample 248: + time = 2480000 + flags = 1 + data = length 291, hash 656B9B94 + sample 249: + time = 2490000 + flags = 1 + data = length 306, hash 18C812 +tracksEnded = true