From b9612bc3385d075689236b07d8c3e27fbd0318bd Mon Sep 17 00:00:00 2001 From: olly Date: Thu, 6 Aug 2020 23:48:58 +0100 Subject: [PATCH] Fix codec initialization data for Opus in MP4 PiperOrigin-RevId: 325327466 --- RELEASENOTES.md | 1 + demos/main/src/main/assets/media.exolist.json | 3 +- .../exoplayer2/extractor/mp4/AtomParsers.java | 60 +- .../mp4/FragmentedMp4ExtractorTest.java | 8 + .../extractor/mp4/Mp4ExtractorTest.java | 5 + testdata/src/test/assets/mp4/sample_opus.mp4 | Bin 0 -> 5163 bytes .../test/assets/mp4/sample_opus.mp4.0.dump | 428 +++++++ .../test/assets/mp4/sample_opus.mp4.1.dump | 232 ++++ .../test/assets/mp4/sample_opus.mp4.2.dump | 40 + .../test/assets/mp4/sample_opus.mp4.3.dump | 28 + .../mp4/sample_opus.mp4.unknown_length.dump | 428 +++++++ .../assets/mp4/sample_opus_fragmented.mp4 | Bin 0 -> 85661 bytes .../mp4/sample_opus_fragmented.mp4.0.dump | 1019 +++++++++++++++++ ...le_opus_fragmented.mp4.unknown_length.dump | 1019 +++++++++++++++++ 14 files changed, 3242 insertions(+), 29 deletions(-) create mode 100644 testdata/src/test/assets/mp4/sample_opus.mp4 create mode 100644 testdata/src/test/assets/mp4/sample_opus.mp4.0.dump create mode 100644 testdata/src/test/assets/mp4/sample_opus.mp4.1.dump create mode 100644 testdata/src/test/assets/mp4/sample_opus.mp4.2.dump create mode 100644 testdata/src/test/assets/mp4/sample_opus.mp4.3.dump create mode 100644 testdata/src/test/assets/mp4/sample_opus.mp4.unknown_length.dump create mode 100644 testdata/src/test/assets/mp4/sample_opus_fragmented.mp4 create mode 100644 testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.0.dump create mode 100644 testdata/src/test/assets/mp4/sample_opus_fragmented.mp4.unknown_length.dump 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 0000000000000000000000000000000000000000..40d639da793a0096226f8bfd4ead67716a058aee GIT binary patch literal 5163 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 OS5TIeRgsjDmi`x75^yd6 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7195ed1a7f1f4aea79929afc4fa52bd25406e667 GIT binary patch literal 85661 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 F{{WxDtKk3u literal 0 HcmV?d00001 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