diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java index 283d7ff53ed..3e44fa70208 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/mp4/FragmentedMp4Extractor.java @@ -1479,18 +1479,17 @@ private static void parseSampleGroups( sgpd.setPosition(Mp4Box.HEADER_SIZE); int sgpdVersion = BoxParser.parseFullBoxVersion(sgpd.readInt()); sgpd.skipBytes(4); // grouping_type == seig. - if (sgpdVersion == 1) { - if (sgpd.readUnsignedInt() == 0) { - throw ParserException.createForUnsupportedContainerFeature( - "Variable length description in sgpd found (unsupported)"); - } - } else if (sgpdVersion >= 2) { + long default_length = sgpdVersion >= 1 ? sgpd.readUnsignedInt() : 0; + if (sgpdVersion >= 2) { sgpd.skipBytes(4); // default_sample_description_index. } if (sgpd.readUnsignedInt() != 1) { // entry_count. throw ParserException.createForUnsupportedContainerFeature( "Entry count in sgpd != 1 (unsupported)."); } + if (sgpdVersion >= 1 && default_length == 0) { + sgpd.skipBytes(4); // description_length. + } // CencSampleEncryptionInformationGroupEntry sgpd.skipBytes(1); // reserved = 0. diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/FragmentedMp4ExtractorNonParameterizedTest.java b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/FragmentedMp4ExtractorNonParameterizedTest.java index 4ec50d4ce77..85b05734e0c 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/FragmentedMp4ExtractorNonParameterizedTest.java +++ b/libraries/extractor/src/test/java/androidx/media3/extractor/mp4/FragmentedMp4ExtractorNonParameterizedTest.java @@ -80,6 +80,22 @@ public void sniff_returnsFalseWithoutPeekingLargeStbl() throws Exception { assertThat(input.getMaxPeekLimit()).isLessThan(500); } + @Test + public void extract_h264WithVariableLengthSgpdBox() throws Exception { + FragmentedMp4Extractor extractor = + new FragmentedMp4Extractor(SubtitleParser.Factory.UNSUPPORTED); + FakeExtractorOutput output = + TestUtil.extractAllSamplesFromFile( + extractor, + ApplicationProvider.getApplicationContext(), + "media/mp4/sample_fragmented_variable_length_sgpd.mp4"); + + DumpFileAsserts.assertOutput( + ApplicationProvider.getApplicationContext(), + output, + "extractordumps/mp4/fragmented_variable_length_sgpd.mp4"); + } + private static FakeExtractorInput createInputForSample(String sample) throws IOException { return new FakeExtractorInput.Builder() .setData( diff --git a/libraries/test_data/src/test/assets/extractordumps/mp4/fragmented_variable_length_sgpd.mp4 b/libraries/test_data/src/test/assets/extractordumps/mp4/fragmented_variable_length_sgpd.mp4 new file mode 100644 index 00000000000..460040a4baf --- /dev/null +++ b/libraries/test_data/src/test/assets/extractordumps/mp4/fragmented_variable_length_sgpd.mp4 @@ -0,0 +1,1530 @@ +seekMap: + isSeekable = true + duration = 8010666 + getPosition(0) = [[timeUs=0, position=781]] + getPosition(1) = [[timeUs=0, position=781], [timeUs=1994666, position=17291]] + getPosition(4005333) = [[timeUs=4000000, position=33935], [timeUs=6005333, position=50577]] + getPosition(8010666) = [[timeUs=6005333, position=50577]] +numberOfTracks = 1 +track 0: + total output bytes = 64237 + sample count = 376 + track duration = 8021333 + format 0: + averageBitrate = 64066 + peakBitrate = 64856 + id = 1 + containerMimeType = audio/mp4 + sampleMimeType = audio/mp4a-latm + codecs = mp4a.40.2 + channelCount = 2 + sampleRate = 48000 + language = en + metadata = entries=[Mp4AlternateGroup: 1, Mp4Timestamp: creation time=0, modification time=0, timescale=48000] + initializationData: + data = length 2, hash 560 + sample 0: + time = -10666 + flags = 1 + data = length 172, hash 606F9646 + sample 1: + time = 10666 + flags = 1 + data = length 163, hash 1F9DB897 + sample 2: + time = 32000 + flags = 1 + data = length 161, hash E87618E8 + sample 3: + time = 53333 + flags = 1 + data = length 168, hash 33260A03 + sample 4: + time = 74666 + flags = 1 + data = length 175, hash F565CFB4 + sample 5: + time = 96000 + flags = 1 + data = length 168, hash F92A4871 + sample 6: + time = 117333 + flags = 1 + data = length 164, hash ABE0FBD8 + sample 7: + time = 138666 + flags = 1 + data = length 168, hash F2B763D + sample 8: + time = 160000 + flags = 1 + data = length 160, hash F5EBCB28 + sample 9: + time = 181333 + flags = 1 + data = length 166, hash B15FFFF6 + sample 10: + time = 202666 + flags = 1 + data = length 175, hash 2BDFE4CB + sample 11: + time = 224000 + flags = 1 + data = length 172, hash 861023B2 + sample 12: + time = 245333 + flags = 1 + data = length 172, hash 4E9B7FF3 + sample 13: + time = 266666 + flags = 1 + data = length 171, hash EF683ECB + sample 14: + time = 288000 + flags = 1 + data = length 174, hash A575FBBE + sample 15: + time = 309333 + flags = 1 + data = length 173, hash 27FD4F83 + sample 16: + time = 330666 + flags = 1 + data = length 170, hash AF82E361 + sample 17: + time = 352000 + flags = 1 + data = length 169, hash E4B52096 + sample 18: + time = 373333 + flags = 1 + data = length 164, hash A0FF4C93 + sample 19: + time = 394666 + flags = 1 + data = length 172, hash 6E1F7612 + sample 20: + time = 416000 + flags = 1 + data = length 176, hash 8E1D8E72 + sample 21: + time = 437333 + flags = 1 + data = length 183, hash 815CD11 + sample 22: + time = 458666 + flags = 1 + data = length 167, hash 735785F0 + sample 23: + time = 480000 + flags = 1 + data = length 182, hash 9F6F129 + sample 24: + time = 501333 + flags = 1 + data = length 174, hash F7A3A104 + sample 25: + time = 522666 + flags = 1 + data = length 159, hash 9A5024C5 + sample 26: + time = 544000 + flags = 1 + data = length 182, hash E78F04ED + sample 27: + time = 565333 + flags = 1 + data = length 172, hash A719A8EC + sample 28: + time = 586666 + flags = 1 + data = length 168, hash C8D3B + sample 29: + time = 608000 + flags = 1 + data = length 164, hash C3A2D50E + sample 30: + time = 629333 + flags = 1 + data = length 157, hash ED396AF1 + sample 31: + time = 650666 + flags = 1 + data = length 172, hash 3971B10E + sample 32: + time = 672000 + flags = 1 + data = length 163, hash 9B2B2A4B + sample 33: + time = 693333 + flags = 1 + data = length 172, hash 9F386DBB + sample 34: + time = 714666 + flags = 1 + data = length 181, hash 57F11013 + sample 35: + time = 736000 + flags = 1 + data = length 159, hash 4AB397F1 + sample 36: + time = 757333 + flags = 1 + data = length 185, hash 66992C2E + sample 37: + time = 778666 + flags = 1 + data = length 174, hash E43735E3 + sample 38: + time = 800000 + flags = 1 + data = length 170, hash 3D5AB4C6 + sample 39: + time = 821333 + flags = 1 + data = length 159, hash 48177636 + sample 40: + time = 842666 + flags = 1 + data = length 159, hash EB95B523 + sample 41: + time = 864000 + flags = 1 + data = length 170, hash 1407A348 + sample 42: + time = 885333 + flags = 1 + data = length 170, hash FFDF0E1A + sample 43: + time = 906666 + flags = 1 + data = length 168, hash FA1D5387 + sample 44: + time = 928000 + flags = 1 + data = length 160, hash E460CEFD + sample 45: + time = 949333 + flags = 1 + data = length 176, hash FA8B3F7E + sample 46: + time = 970666 + flags = 1 + data = length 170, hash CD276612 + sample 47: + time = 992000 + flags = 1 + data = length 169, hash EA58AAFE + sample 48: + time = 1013333 + flags = 1 + data = length 167, hash 48DF6388 + sample 49: + time = 1034666 + flags = 1 + data = length 187, hash ED2878C5 + sample 50: + time = 1056000 + flags = 1 + data = length 174, hash 7EDF1163 + sample 51: + time = 1077333 + flags = 1 + data = length 169, hash 845CD6DE + sample 52: + time = 1098666 + flags = 1 + data = length 170, hash 9FBD8DCA + sample 53: + time = 1120000 + flags = 1 + data = length 181, hash 64A8A03F + sample 54: + time = 1141333 + flags = 1 + data = length 180, hash 35CABF7B + sample 55: + time = 1162666 + flags = 1 + data = length 166, hash 5B24DC5F + sample 56: + time = 1184000 + flags = 1 + data = length 176, hash 919297CD + sample 57: + time = 1205333 + flags = 1 + data = length 158, hash D1EC6A10 + sample 58: + time = 1226666 + flags = 1 + data = length 165, hash 27D276DE + sample 59: + time = 1248000 + flags = 1 + data = length 165, hash F5C92EA3 + sample 60: + time = 1269333 + flags = 1 + data = length 169, hash 9EE88D20 + sample 61: + time = 1290666 + flags = 1 + data = length 163, hash 5665BADF + sample 62: + time = 1312000 + flags = 1 + data = length 186, hash 19A52CA6 + sample 63: + time = 1333333 + flags = 1 + data = length 165, hash 9005AFA4 + sample 64: + time = 1354666 + flags = 1 + data = length 174, hash B3FFF871 + sample 65: + time = 1376000 + flags = 1 + data = length 168, hash 679B064F + sample 66: + time = 1397333 + flags = 1 + data = length 161, hash C527F2CF + sample 67: + time = 1418666 + flags = 1 + data = length 164, hash 97BDA71 + sample 68: + time = 1440000 + flags = 1 + data = length 175, hash B946A6FC + sample 69: + time = 1461333 + flags = 1 + data = length 171, hash EB8C3DAA + sample 70: + time = 1482666 + flags = 1 + data = length 169, hash AF2B68C2 + sample 71: + time = 1504000 + flags = 1 + data = length 169, hash 34806889 + sample 72: + time = 1525333 + flags = 1 + data = length 179, hash 10F4F845 + sample 73: + time = 1546666 + flags = 1 + data = length 178, hash 1C0BB141 + sample 74: + time = 1568000 + flags = 1 + data = length 169, hash EBC2F9D3 + sample 75: + time = 1589333 + flags = 1 + data = length 173, hash 87114F06 + sample 76: + time = 1610666 + flags = 1 + data = length 184, hash 2DCFDAA7 + sample 77: + time = 1632000 + flags = 1 + data = length 160, hash 960E95E9 + sample 78: + time = 1653333 + flags = 1 + data = length 171, hash 30A7ADC9 + sample 79: + time = 1674666 + flags = 1 + data = length 165, hash E258987C + sample 80: + time = 1696000 + flags = 1 + data = length 171, hash B553EC5 + sample 81: + time = 1717333 + flags = 1 + data = length 167, hash C256FC27 + sample 82: + time = 1738666 + flags = 1 + data = length 164, hash 95C5ED7A + sample 83: + time = 1760000 + flags = 1 + data = length 165, hash 65D52DCA + sample 84: + time = 1781333 + flags = 1 + data = length 167, hash C13D6CCD + sample 85: + time = 1802666 + flags = 1 + data = length 161, hash 2DA3FE8B + sample 86: + time = 1824000 + flags = 1 + data = length 162, hash AF340292 + sample 87: + time = 1845333 + flags = 1 + data = length 185, hash 38CC26E7 + sample 88: + time = 1866666 + flags = 1 + data = length 163, hash 17095A46 + sample 89: + time = 1888000 + flags = 1 + data = length 175, hash 21DD31A8 + sample 90: + time = 1909333 + flags = 1 + data = length 169, hash 4DDB17F7 + sample 91: + time = 1930666 + flags = 1 + data = length 165, hash 8DA098EB + sample 92: + time = 1952000 + flags = 1 + data = length 179, hash 65FD40BF + sample 93: + time = 1973333 + flags = 1 + data = length 166, hash 805972E8 + sample 94: + time = 1994666 + flags = 1 + data = length 163, hash F9B1E7A2 + sample 95: + time = 2016000 + flags = 1 + data = length 169, hash AC5E2512 + sample 96: + time = 2037333 + flags = 1 + data = length 178, hash 73E030EA + sample 97: + time = 2058666 + flags = 1 + data = length 167, hash 886E4400 + sample 98: + time = 2080000 + flags = 1 + data = length 194, hash EA99F334 + sample 99: + time = 2101333 + flags = 1 + data = length 177, hash C529C5D3 + sample 100: + time = 2122666 + flags = 1 + data = length 188, hash 8969BEAE + sample 101: + time = 2144000 + flags = 1 + data = length 166, hash 76FB52D3 + sample 102: + time = 2165333 + flags = 1 + data = length 174, hash 1442EEB6 + sample 103: + time = 2186666 + flags = 1 + data = length 167, hash 892B25D2 + sample 104: + time = 2208000 + flags = 1 + data = length 174, hash 91988BEC + sample 105: + time = 2229333 + flags = 1 + data = length 170, hash 920E2E7D + sample 106: + time = 2250666 + flags = 1 + data = length 170, hash F5E1CBBA + sample 107: + time = 2272000 + flags = 1 + data = length 174, hash C2558A52 + sample 108: + time = 2293333 + flags = 1 + data = length 164, hash D9A3323D + sample 109: + time = 2314666 + flags = 1 + data = length 159, hash 8156AA0 + sample 110: + time = 2336000 + flags = 1 + data = length 165, hash B5CA640D + sample 111: + time = 2357333 + flags = 1 + data = length 179, hash 3392A228 + sample 112: + time = 2378666 + flags = 1 + data = length 161, hash D9D6FEC8 + sample 113: + time = 2400000 + flags = 1 + data = length 175, hash 8F43632 + sample 114: + time = 2421333 + flags = 1 + data = length 179, hash 8E946EFB + sample 115: + time = 2442666 + flags = 1 + data = length 154, hash 9563E77D + sample 116: + time = 2464000 + flags = 1 + data = length 181, hash C575F000 + sample 117: + time = 2485333 + flags = 1 + data = length 178, hash 93B541B4 + sample 118: + time = 2506666 + flags = 1 + data = length 175, hash E57C55F1 + sample 119: + time = 2528000 + flags = 1 + data = length 179, hash D076F3F4 + sample 120: + time = 2549333 + flags = 1 + data = length 174, hash 7C0E3CFB + sample 121: + time = 2570666 + flags = 1 + data = length 184, hash AC26359D + sample 122: + time = 2592000 + flags = 1 + data = length 177, hash C7A7B641 + sample 123: + time = 2613333 + flags = 1 + data = length 175, hash 354ED162 + sample 124: + time = 2634666 + flags = 1 + data = length 169, hash F12225C2 + sample 125: + time = 2656000 + flags = 1 + data = length 167, hash 49F08C6 + sample 126: + time = 2677333 + flags = 1 + data = length 162, hash C67AF2C8 + sample 127: + time = 2698666 + flags = 1 + data = length 159, hash F04C3CA1 + sample 128: + time = 2720000 + flags = 1 + data = length 173, hash 3F3434E5 + sample 129: + time = 2741333 + flags = 1 + data = length 156, hash 845C5F69 + sample 130: + time = 2762666 + flags = 1 + data = length 161, hash FD8BB65F + sample 131: + time = 2784000 + flags = 1 + data = length 153, hash F6C79C63 + sample 132: + time = 2805333 + flags = 1 + data = length 167, hash EE49B051 + sample 133: + time = 2826666 + flags = 1 + data = length 162, hash 71DEF41F + sample 134: + time = 2848000 + flags = 1 + data = length 167, hash 257E8DCA + sample 135: + time = 2869333 + flags = 1 + data = length 174, hash 5A185F3A + sample 136: + time = 2890666 + flags = 1 + data = length 181, hash F2FEC2F0 + sample 137: + time = 2912000 + flags = 1 + data = length 185, hash 218242A7 + sample 138: + time = 2933333 + flags = 1 + data = length 181, hash 8D67187A + sample 139: + time = 2954666 + flags = 1 + data = length 173, hash 1E3DA0DB + sample 140: + time = 2976000 + flags = 1 + data = length 157, hash F73274A4 + sample 141: + time = 2997333 + flags = 1 + data = length 194, hash 7DFA32C8 + sample 142: + time = 3018666 + flags = 1 + data = length 175, hash 22108019 + sample 143: + time = 3040000 + flags = 1 + data = length 178, hash FEB9BA23 + sample 144: + time = 3061333 + flags = 1 + data = length 166, hash B070463 + sample 145: + time = 3082666 + flags = 1 + data = length 169, hash 57EDC3BD + sample 146: + time = 3104000 + flags = 1 + data = length 181, hash D2A540C7 + sample 147: + time = 3125333 + flags = 1 + data = length 155, hash D1629748 + sample 148: + time = 3146666 + flags = 1 + data = length 186, hash C5F4C6AD + sample 149: + time = 3168000 + flags = 1 + data = length 156, hash 97857E74 + sample 150: + time = 3189333 + flags = 1 + data = length 202, hash B5F815E3 + sample 151: + time = 3210666 + flags = 1 + data = length 178, hash 7820DAA1 + sample 152: + time = 3232000 + flags = 1 + data = length 161, hash 14FAA152 + sample 153: + time = 3253333 + flags = 1 + data = length 165, hash BBEC43EA + sample 154: + time = 3274666 + flags = 1 + data = length 172, hash B98ED015 + sample 155: + time = 3296000 + flags = 1 + data = length 162, hash 5E595366 + sample 156: + time = 3317333 + flags = 1 + data = length 172, hash 39601393 + sample 157: + time = 3338666 + flags = 1 + data = length 173, hash 150033AA + sample 158: + time = 3360000 + flags = 1 + data = length 152, hash A971F99D + sample 159: + time = 3381333 + flags = 1 + data = length 162, hash 54681025 + sample 160: + time = 3402666 + flags = 1 + data = length 168, hash 8C1C19EE + sample 161: + time = 3424000 + flags = 1 + data = length 165, hash A2557EBD + sample 162: + time = 3445333 + flags = 1 + data = length 168, hash D833CD5D + sample 163: + time = 3466666 + flags = 1 + data = length 163, hash 750247C0 + sample 164: + time = 3488000 + flags = 1 + data = length 168, hash EFBF636 + sample 165: + time = 3509333 + flags = 1 + data = length 189, hash 68CEA5AF + sample 166: + time = 3530666 + flags = 1 + data = length 167, hash DE56A8E7 + sample 167: + time = 3552000 + flags = 1 + data = length 177, hash D27991AE + sample 168: + time = 3573333 + flags = 1 + data = length 161, hash 828648C9 + sample 169: + time = 3594666 + flags = 1 + data = length 187, hash E231E64D + sample 170: + time = 3616000 + flags = 1 + data = length 157, hash 135FB77A + sample 171: + time = 3637333 + flags = 1 + data = length 168, hash 59E6AD22 + sample 172: + time = 3658666 + flags = 1 + data = length 182, hash EA22527D + sample 173: + time = 3680000 + flags = 1 + data = length 165, hash 60971FFE + sample 174: + time = 3701333 + flags = 1 + data = length 168, hash B7B02AD2 + sample 175: + time = 3722666 + flags = 1 + data = length 171, hash EBF1904C + sample 176: + time = 3744000 + flags = 1 + data = length 174, hash 759187E + sample 177: + time = 3765333 + flags = 1 + data = length 170, hash A7AA0960 + sample 178: + time = 3786666 + flags = 1 + data = length 173, hash DC28BDA + sample 179: + time = 3808000 + flags = 1 + data = length 159, hash 2C7A6206 + sample 180: + time = 3829333 + flags = 1 + data = length 176, hash EC1F4AA4 + sample 181: + time = 3850666 + flags = 1 + data = length 164, hash 94B7AB68 + sample 182: + time = 3872000 + flags = 1 + data = length 178, hash 99C2763F + sample 183: + time = 3893333 + flags = 1 + data = length 162, hash AF49D3A7 + sample 184: + time = 3914666 + flags = 1 + data = length 158, hash 3F04BF69 + sample 185: + time = 3936000 + flags = 1 + data = length 198, hash 48E7DFD5 + sample 186: + time = 3957333 + flags = 1 + data = length 182, hash B883D24F + sample 187: + time = 3978666 + flags = 1 + data = length 188, hash F02C5B3 + sample 188: + time = 4000000 + flags = 1 + data = length 155, hash 32307E72 + sample 189: + time = 4021333 + flags = 1 + data = length 166, hash BAFDBA39 + sample 190: + time = 4042666 + flags = 1 + data = length 160, hash 25701D65 + sample 191: + time = 4064000 + flags = 1 + data = length 181, hash 6A4CB4FD + sample 192: + time = 4085333 + flags = 1 + data = length 169, hash DB2A4C7D + sample 193: + time = 4106666 + flags = 1 + data = length 182, hash 274B85F2 + sample 194: + time = 4128000 + flags = 1 + data = length 163, hash A594B098 + sample 195: + time = 4149333 + flags = 1 + data = length 188, hash 13A19913 + sample 196: + time = 4170666 + flags = 1 + data = length 164, hash 722858E1 + sample 197: + time = 4192000 + flags = 1 + data = length 170, hash B54283F9 + sample 198: + time = 4213333 + flags = 1 + data = length 192, hash DCADA870 + sample 199: + time = 4234666 + flags = 1 + data = length 177, hash 11EAD371 + sample 200: + time = 4256000 + flags = 1 + data = length 166, hash 71966FD5 + sample 201: + time = 4277333 + flags = 1 + data = length 169, hash 36C071C6 + sample 202: + time = 4298666 + flags = 1 + data = length 163, hash 58C8BAF6 + sample 203: + time = 4320000 + flags = 1 + data = length 166, hash 42D6CA6A + sample 204: + time = 4341333 + flags = 1 + data = length 170, hash 8E1BB65E + sample 205: + time = 4362666 + flags = 1 + data = length 172, hash B071B6B6 + sample 206: + time = 4384000 + flags = 1 + data = length 170, hash 266BFE19 + sample 207: + time = 4405333 + flags = 1 + data = length 180, hash 170BC158 + sample 208: + time = 4426666 + flags = 1 + data = length 172, hash 2B1AF0A3 + sample 209: + time = 4448000 + flags = 1 + data = length 163, hash B068746F + sample 210: + time = 4469333 + flags = 1 + data = length 171, hash C8F7D374 + sample 211: + time = 4490666 + flags = 1 + data = length 162, hash 29E5B0C + sample 212: + time = 4512000 + flags = 1 + data = length 174, hash 8AC5832A + sample 213: + time = 4533333 + flags = 1 + data = length 166, hash 4EE19A7D + sample 214: + time = 4554666 + flags = 1 + data = length 161, hash 5563574A + sample 215: + time = 4576000 + flags = 1 + data = length 162, hash 87823FF + sample 216: + time = 4597333 + flags = 1 + data = length 166, hash 170CD14E + sample 217: + time = 4618666 + flags = 1 + data = length 179, hash FE2E5FCE + sample 218: + time = 4640000 + flags = 1 + data = length 175, hash 81DC4FF4 + sample 219: + time = 4661333 + flags = 1 + data = length 174, hash 48F1E0EE + sample 220: + time = 4682666 + flags = 1 + data = length 176, hash A0099477 + sample 221: + time = 4704000 + flags = 1 + data = length 177, hash 50D6F2E9 + sample 222: + time = 4725333 + flags = 1 + data = length 172, hash DB542517 + sample 223: + time = 4746666 + flags = 1 + data = length 170, hash FD0A0BE4 + sample 224: + time = 4768000 + flags = 1 + data = length 182, hash 783C2DC6 + sample 225: + time = 4789333 + flags = 1 + data = length 153, hash FE6BB549 + sample 226: + time = 4810666 + flags = 1 + data = length 170, hash D0933F6A + sample 227: + time = 4832000 + flags = 1 + data = length 161, hash 3B795608 + sample 228: + time = 4853333 + flags = 1 + data = length 167, hash 65ED3D19 + sample 229: + time = 4874666 + flags = 1 + data = length 171, hash A267A152 + sample 230: + time = 4896000 + flags = 1 + data = length 179, hash 7B183050 + sample 231: + time = 4917333 + flags = 1 + data = length 150, hash F9DC2CB3 + sample 232: + time = 4938666 + flags = 1 + data = length 169, hash 111F15E + sample 233: + time = 4960000 + flags = 1 + data = length 161, hash A87D9061 + sample 234: + time = 4981333 + flags = 1 + data = length 183, hash 7AFA8695 + sample 235: + time = 5002666 + flags = 1 + data = length 177, hash 9B03255C + sample 236: + time = 5024000 + flags = 1 + data = length 185, hash EE2F3E6F + sample 237: + time = 5045333 + flags = 1 + data = length 168, hash 79E9EDCE + sample 238: + time = 5066666 + flags = 1 + data = length 177, hash CD48D9FF + sample 239: + time = 5088000 + flags = 1 + data = length 204, hash D8882331 + sample 240: + time = 5109333 + flags = 1 + data = length 186, hash 3E8A417A + sample 241: + time = 5130666 + flags = 1 + data = length 171, hash 8474704 + sample 242: + time = 5152000 + flags = 1 + data = length 176, hash 38FE2FEA + sample 243: + time = 5173333 + flags = 1 + data = length 182, hash B88B19A4 + sample 244: + time = 5194666 + flags = 1 + data = length 171, hash 992529CC + sample 245: + time = 5216000 + flags = 1 + data = length 169, hash 64238D8A + sample 246: + time = 5237333 + flags = 1 + data = length 194, hash 7586032F + sample 247: + time = 5258666 + flags = 1 + data = length 166, hash AEC1E33E + sample 248: + time = 5280000 + flags = 1 + data = length 172, hash F831BEDD + sample 249: + time = 5301333 + flags = 1 + data = length 162, hash EB799853 + sample 250: + time = 5322666 + flags = 1 + data = length 168, hash 3BEFF6EA + sample 251: + time = 5344000 + flags = 1 + data = length 168, hash 1989F6BE + sample 252: + time = 5365333 + flags = 1 + data = length 156, hash 5D5FDC92 + sample 253: + time = 5386666 + flags = 1 + data = length 191, hash C6FF5D50 + sample 254: + time = 5408000 + flags = 1 + data = length 155, hash FEE8CA98 + sample 255: + time = 5429333 + flags = 1 + data = length 159, hash 2D47EF30 + sample 256: + time = 5450666 + flags = 1 + data = length 159, hash 99AD5247 + sample 257: + time = 5472000 + flags = 1 + data = length 167, hash 87CCAF58 + sample 258: + time = 5493333 + flags = 1 + data = length 186, hash E4F3ACF2 + sample 259: + time = 5514666 + flags = 1 + data = length 172, hash AB222534 + sample 260: + time = 5536000 + flags = 1 + data = length 174, hash 68FBD8EB + sample 261: + time = 5557333 + flags = 1 + data = length 172, hash 6C67A846 + sample 262: + time = 5578666 + flags = 1 + data = length 179, hash 1D0CA224 + sample 263: + time = 5600000 + flags = 1 + data = length 171, hash 4B7F5AB6 + sample 264: + time = 5621333 + flags = 1 + data = length 178, hash 32F6F816 + sample 265: + time = 5642666 + flags = 1 + data = length 163, hash D5FBB752 + sample 266: + time = 5664000 + flags = 1 + data = length 175, hash 82222CCF + sample 267: + time = 5685333 + flags = 1 + data = length 166, hash DCB51A49 + sample 268: + time = 5706666 + flags = 1 + data = length 171, hash 990146B2 + sample 269: + time = 5728000 + flags = 1 + data = length 163, hash 668EC234 + sample 270: + time = 5749333 + flags = 1 + data = length 160, hash BE4633EF + sample 271: + time = 5770666 + flags = 1 + data = length 172, hash 43D115D6 + sample 272: + time = 5792000 + flags = 1 + data = length 166, hash 52695342 + sample 273: + time = 5813333 + flags = 1 + data = length 156, hash 989D07F9 + sample 274: + time = 5834666 + flags = 1 + data = length 180, hash E6B80EBF + sample 275: + time = 5856000 + flags = 1 + data = length 179, hash F94F7112 + sample 276: + time = 5877333 + flags = 1 + data = length 175, hash C185F5E0 + sample 277: + time = 5898666 + flags = 1 + data = length 167, hash 58923C20 + sample 278: + time = 5920000 + flags = 1 + data = length 171, hash 704C1ADB + sample 279: + time = 5941333 + flags = 1 + data = length 165, hash 3E5C7A05 + sample 280: + time = 5962666 + flags = 1 + data = length 188, hash 58766D0D + sample 281: + time = 5984000 + flags = 1 + data = length 179, hash C886193F + sample 282: + time = 6005333 + flags = 1 + data = length 187, hash 931CD427 + sample 283: + time = 6026666 + flags = 1 + data = length 187, hash 5FD06890 + sample 284: + time = 6048000 + flags = 1 + data = length 174, hash F87B4771 + sample 285: + time = 6069333 + flags = 1 + data = length 159, hash 27BD2A84 + sample 286: + time = 6090666 + flags = 1 + data = length 168, hash DDAFF9E3 + sample 287: + time = 6112000 + flags = 1 + data = length 185, hash BE916543 + sample 288: + time = 6133333 + flags = 1 + data = length 159, hash C53F10C + sample 289: + time = 6154666 + flags = 1 + data = length 175, hash C9C0D2C7 + sample 290: + time = 6176000 + flags = 1 + data = length 184, hash C99D9EC8 + sample 291: + time = 6197333 + flags = 1 + data = length 170, hash C349CB9B + sample 292: + time = 6218666 + flags = 1 + data = length 177, hash 3856045C + sample 293: + time = 6240000 + flags = 1 + data = length 171, hash DFA7F7C7 + sample 294: + time = 6261333 + flags = 1 + data = length 154, hash 6E4EF65E + sample 295: + time = 6282666 + flags = 1 + data = length 166, hash B9D2690C + sample 296: + time = 6304000 + flags = 1 + data = length 166, hash AB3E1F6D + sample 297: + time = 6325333 + flags = 1 + data = length 159, hash 20CA6B12 + sample 298: + time = 6346666 + flags = 1 + data = length 160, hash 39C9E025 + sample 299: + time = 6368000 + flags = 1 + data = length 175, hash 9D2F8212 + sample 300: + time = 6389333 + flags = 1 + data = length 166, hash 1D37706B + sample 301: + time = 6410666 + flags = 1 + data = length 163, hash 5370A36 + sample 302: + time = 6432000 + flags = 1 + data = length 167, hash 151ED105 + sample 303: + time = 6453333 + flags = 1 + data = length 165, hash 6BA95349 + sample 304: + time = 6474666 + flags = 1 + data = length 168, hash 208061C4 + sample 305: + time = 6496000 + flags = 1 + data = length 171, hash 47196B + sample 306: + time = 6517333 + flags = 1 + data = length 173, hash A84A5647 + sample 307: + time = 6538666 + flags = 1 + data = length 159, hash EFFE863F + sample 308: + time = 6560000 + flags = 1 + data = length 180, hash 2C3E14BD + sample 309: + time = 6581333 + flags = 1 + data = length 167, hash E32650E3 + sample 310: + time = 6602666 + flags = 1 + data = length 181, hash 60928DBD + sample 311: + time = 6624000 + flags = 1 + data = length 182, hash BF86D886 + sample 312: + time = 6645333 + flags = 1 + data = length 161, hash 661C82CE + sample 313: + time = 6666666 + flags = 1 + data = length 164, hash 2B56DE78 + sample 314: + time = 6688000 + flags = 1 + data = length 173, hash 9F25C44C + sample 315: + time = 6709333 + flags = 1 + data = length 167, hash ECF62146 + sample 316: + time = 6730666 + flags = 1 + data = length 160, hash 2894B220 + sample 317: + time = 6752000 + flags = 1 + data = length 173, hash D07FA194 + sample 318: + time = 6773333 + flags = 1 + data = length 173, hash 8AE2AFF + sample 319: + time = 6794666 + flags = 1 + data = length 167, hash 89488281 + sample 320: + time = 6816000 + flags = 1 + data = length 184, hash 2BA44F72 + sample 321: + time = 6837333 + flags = 1 + data = length 168, hash 60DD40E + sample 322: + time = 6858666 + flags = 1 + data = length 171, hash 4D146644 + sample 323: + time = 6880000 + flags = 1 + data = length 173, hash 94B5056B + sample 324: + time = 6901333 + flags = 1 + data = length 157, hash F128CA2A + sample 325: + time = 6922666 + flags = 1 + data = length 177, hash 678A3280 + sample 326: + time = 6944000 + flags = 1 + data = length 173, hash A3C647E8 + sample 327: + time = 6965333 + flags = 1 + data = length 161, hash 135CDACB + sample 328: + time = 6986666 + flags = 1 + data = length 170, hash 574C87F1 + sample 329: + time = 7008000 + flags = 1 + data = length 165, hash E1DCD3B5 + sample 330: + time = 7029333 + flags = 1 + data = length 154, hash 9B9937D9 + sample 331: + time = 7050666 + flags = 1 + data = length 183, hash 72C85716 + sample 332: + time = 7072000 + flags = 1 + data = length 175, hash 2C1123FA + sample 333: + time = 7093333 + flags = 1 + data = length 181, hash 65C95CED + sample 334: + time = 7114666 + flags = 1 + data = length 162, hash AA397C61 + sample 335: + time = 7136000 + flags = 1 + data = length 168, hash 29FF4314 + sample 336: + time = 7157333 + flags = 1 + data = length 166, hash 312732D1 + sample 337: + time = 7178666 + flags = 1 + data = length 190, hash F53922A9 + sample 338: + time = 7200000 + flags = 1 + data = length 174, hash 7A33F241 + sample 339: + time = 7221333 + flags = 1 + data = length 173, hash EC5DF9C4 + sample 340: + time = 7242666 + flags = 1 + data = length 167, hash 58849B44 + sample 341: + time = 7264000 + flags = 1 + data = length 168, hash E807AD20 + sample 342: + time = 7285333 + flags = 1 + data = length 179, hash 85BB5E00 + sample 343: + time = 7306666 + flags = 1 + data = length 170, hash D60F937D + sample 344: + time = 7328000 + flags = 1 + data = length 181, hash 12A9D8EF + sample 345: + time = 7349333 + flags = 1 + data = length 171, hash 8AA7E1B0 + sample 346: + time = 7370666 + flags = 1 + data = length 169, hash E3760583 + sample 347: + time = 7392000 + flags = 1 + data = length 181, hash 6B0075E2 + sample 348: + time = 7413333 + flags = 1 + data = length 175, hash 74513962 + sample 349: + time = 7434666 + flags = 1 + data = length 181, hash 960824B5 + sample 350: + time = 7456000 + flags = 1 + data = length 171, hash 263869DA + sample 351: + time = 7477333 + flags = 1 + data = length 161, hash 8C46D624 + sample 352: + time = 7498666 + flags = 1 + data = length 169, hash 1451B16D + sample 353: + time = 7520000 + flags = 1 + data = length 154, hash 7628D5E9 + sample 354: + time = 7541333 + flags = 1 + data = length 176, hash 6D875427 + sample 355: + time = 7562666 + flags = 1 + data = length 196, hash 5CA30BB3 + sample 356: + time = 7584000 + flags = 1 + data = length 167, hash A9B1E4E + sample 357: + time = 7605333 + flags = 1 + data = length 165, hash E4980930 + sample 358: + time = 7626666 + flags = 1 + data = length 174, hash CD4F2E37 + sample 359: + time = 7648000 + flags = 1 + data = length 168, hash FFF10F7 + sample 360: + time = 7669333 + flags = 1 + data = length 168, hash 7A97DECD + sample 361: + time = 7690666 + flags = 1 + data = length 167, hash B8B47D4C + sample 362: + time = 7712000 + flags = 1 + data = length 174, hash 18279BAC + sample 363: + time = 7733333 + flags = 1 + data = length 176, hash D43DE64A + sample 364: + time = 7754666 + flags = 1 + data = length 177, hash 175E74E6 + sample 365: + time = 7776000 + flags = 1 + data = length 171, hash AAD5EB42 + sample 366: + time = 7797333 + flags = 1 + data = length 176, hash 8FA35FBC + sample 367: + time = 7818666 + flags = 1 + data = length 162, hash 8726C5B7 + sample 368: + time = 7840000 + flags = 1 + data = length 166, hash FD4F2FEE + sample 369: + time = 7861333 + flags = 1 + data = length 166, hash 3568DDA5 + sample 370: + time = 7882666 + flags = 1 + data = length 171, hash 76D36F8C + sample 371: + time = 7904000 + flags = 1 + data = length 170, hash BE669868 + sample 372: + time = 7925333 + flags = 1 + data = length 188, hash 2E2111D8 + sample 373: + time = 7946666 + flags = 1 + data = length 179, hash D8B73981 + sample 374: + time = 7968000 + flags = 1 + data = length 164, hash CA72E084 + sample 375: + time = 7989333 + flags = 1 + data = length 168, hash 4554826B +tracksEnded = true diff --git a/libraries/test_data/src/test/assets/media/mp4/sample_fragmented_variable_length_sgpd.mp4 b/libraries/test_data/src/test/assets/media/mp4/sample_fragmented_variable_length_sgpd.mp4 new file mode 100644 index 00000000000..a0d20e91310 Binary files /dev/null and b/libraries/test_data/src/test/assets/media/mp4/sample_fragmented_variable_length_sgpd.mp4 differ