Add QuickTime (Classic) support to Mp4Extractor

PiperOrigin-RevId: 566272132
This commit is contained in:
rohks 2023-09-18 05:26:38 -07:00 committed by Copybara-Service
parent 2c0d9ba4c3
commit fe199455e7
10 changed files with 1642 additions and 0 deletions

View File

@ -31,6 +31,9 @@
* Add `BmpExtractor`. * Add `BmpExtractor`.
* Add `WebpExtractor`. * Add `WebpExtractor`.
* Add `media3.extractor.heif.HeifExtractor`. * Add `media3.extractor.heif.HeifExtractor`.
* Add QuickTime classic
(https://developer.apple.com/standards/qtff-2001.pdf) support to
`Mp4Extractor`.
* Audio: * Audio:
* Add support for Opus gapless metadata during offload playback. * Add support for Opus gapless metadata during offload playback.
* Allow renderer recovery by disabling offload if failed at first write * Allow renderer recovery by disabling offload if failed at first write

View File

@ -164,6 +164,7 @@ public final class Mp4Extractor implements Extractor, SeekMap {
private int sampleBytesRead; private int sampleBytesRead;
private int sampleBytesWritten; private int sampleBytesWritten;
private int sampleCurrentNalBytesRemaining; private int sampleCurrentNalBytesRemaining;
private boolean seenFtypAtom;
// Extractor outputs. // Extractor outputs.
private ExtractorOutput extractorOutput; private ExtractorOutput extractorOutput;
@ -444,11 +445,17 @@ public final class Mp4Extractor implements Extractor, SeekMap {
if (atomData != null) { if (atomData != null) {
input.readFully(atomData.getData(), atomHeaderBytesRead, (int) atomPayloadSize); input.readFully(atomData.getData(), atomHeaderBytesRead, (int) atomPayloadSize);
if (atomType == Atom.TYPE_ftyp) { if (atomType == Atom.TYPE_ftyp) {
seenFtypAtom = true;
fileType = processFtypAtom(atomData); fileType = processFtypAtom(atomData);
} else if (!containerAtoms.isEmpty()) { } else if (!containerAtoms.isEmpty()) {
containerAtoms.peek().add(new Atom.LeafAtom(atomType, atomData)); containerAtoms.peek().add(new Atom.LeafAtom(atomType, atomData));
} }
} else { } else {
if (!seenFtypAtom && atomType == Atom.TYPE_mdat) {
// The original QuickTime specification did not require files to begin with the ftyp atom.
// See https://developer.apple.com/standards/qtff-2001.pdf.
fileType = FILE_TYPE_QUICKTIME;
}
// We don't need the data. Skip or seek, depending on how large the atom is. // We don't need the data. Skip or seek, depending on how large the atom is.
if (atomPayloadSize < RELOAD_MINIMUM_SEEK_DISTANCE) { if (atomPayloadSize < RELOAD_MINIMUM_SEEK_DISTANCE) {
input.skipFully((int) atomPayloadSize); input.skipFully((int) atomPayloadSize);

View File

@ -170,6 +170,12 @@ import java.io.IOException;
break; break;
} }
if (atomType == Atom.TYPE_mdat) {
// The original QuickTime specification did not require files to begin with the ftyp atom.
// See https://developer.apple.com/standards/qtff-2001.pdf.
foundGoodFileType = true;
}
if (bytesSearched + atomSize - headerSize >= bytesToSearch) { if (bytesSearched + atomSize - headerSize >= bytesToSearch) {
// Stop searching as peeking this atom would exceed the search limit. // Stop searching as peeking this atom would exceed the search limit.
break; break;

View File

@ -125,4 +125,13 @@ public final class Mp4ExtractorTest {
ExtractorAsserts.assertBehavior( ExtractorAsserts.assertBehavior(
Mp4Extractor::new, "media/mp4/sample_with_colr_mdcv_and_clli.mp4", simulationConfig); Mp4Extractor::new, "media/mp4/sample_with_colr_mdcv_and_clli.mp4", simulationConfig);
} }
/** Test case for supporting original QuickTime specification [Internal: b/297137302]. */
@Test
public void mp4SampleWithOriginalQuicktimeSpecification() throws Exception {
ExtractorAsserts.assertBehavior(
Mp4Extractor::new,
"media/mp4/sample_with_original_quicktime_specification.mov",
simulationConfig);
}
} }

View File

@ -0,0 +1,477 @@
seekMap:
isSeekable = true
duration = 2741666
getPosition(0) = [[timeUs=0, position=16]]
getPosition(1) = [[timeUs=0, position=16], [timeUs=471666, position=694060]]
getPosition(1370833) = [[timeUs=1081666, position=1534024], [timeUs=1691666, position=2598705]]
getPosition(2741666) = [[timeUs=2438333, position=4019235]]
numberOfTracks = 2
track 0:
total output bytes = 4478284
sample count = 80
format 0:
id = 1
sampleMimeType = video/hevc
codecs = hvc1.1.6.L150.B0
maxInputSize = 364750
width = 1920
height = 1440
frameRate = 29.179338
rotationDegrees = 90
colorInfo:
colorSpace = -1
colorRange = 1
colorTransfer = 3
hdrStaticInfo = length 0, hash 0
metadata = entries=[mdta: key=com.apple.quicktime.live-photo.auto, value=01, mdta: key=com.apple.quicktime.content.identifier, value=A873E9D3-2FBA-440A-B4D1-AEB073BC8E54, mdta: key=com.apple.quicktime.live-photo.vitality-score, value=0.9398496, mdta: key=com.apple.quicktime.live-photo.vitality-scoring-version, value=0000000000000004, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone SE (3rd generation), mdta: key=com.apple.quicktime.software, value=16.5.1, mdta: key=com.apple.quicktime.creationdate, value=2023-07-05T13:13:32+0800, Mp4Timestamp: creation time=3771378882, modification time=3771378882, timescale=600]
initializationData:
data = length 78, hash C57F938D
sample 0:
time = 0
flags = 1
data = length 199307, hash 5864D22F
sample 1:
time = 135000
flags = 0
data = length 61191, hash 8D7235B7
sample 2:
time = 66666
flags = 0
data = length 21875, hash 9FD10CF3
sample 3:
time = 33333
flags = 0
data = length 10447, hash 14D226A7
sample 4:
time = 101666
flags = 0
data = length 16015, hash 188EE834
sample 5:
time = 270000
flags = 0
data = length 138443, hash EBCD299
sample 6:
time = 201666
flags = 0
data = length 32805, hash 7626D6C3
sample 7:
time = 168333
flags = 0
data = length 14883, hash A734B5FE
sample 8:
time = 236666
flags = 0
data = length 11948, hash BCCC2A33
sample 9:
time = 405000
flags = 0
data = length 88769, hash 149FF9D3
sample 10:
time = 336666
flags = 0
data = length 25855, hash A0C3D845
sample 11:
time = 303333
flags = 0
data = length 11071, hash 23BA2C6B
sample 12:
time = 371666
flags = 0
data = length 11859, hash FE106775
sample 13:
time = 438333
flags = 0
data = length 47560, hash F4A52500
sample 14:
time = 471666
flags = 1
data = length 206359, hash AA9C86B7
sample 15:
time = 606666
flags = 0
data = length 32316, hash 91F96807
sample 16:
time = 540000
flags = 0
data = length 15943, hash 45FA9864
sample 17:
time = 506666
flags = 0
data = length 7183, hash BEF025B1
sample 18:
time = 573333
flags = 0
data = length 9604, hash A6E08624
sample 19:
time = 741666
flags = 0
data = length 93206, hash 8D92A1BC
sample 20:
time = 675000
flags = 0
data = length 27500, hash 9DBA11AA
sample 21:
time = 641666
flags = 0
data = length 11687, hash E23F32C7
sample 22:
time = 708333
flags = 0
data = length 14906, hash DC2DA89D
sample 23:
time = 880000
flags = 0
data = length 80531, hash 5F281EEE
sample 24:
time = 811666
flags = 0
data = length 25736, hash 4D443883
sample 25:
time = 776666
flags = 0
data = length 45840, hash 4456028
sample 26:
time = 845000
flags = 0
data = length 20499, hash 9940E6F1
sample 27:
time = 1015000
flags = 0
data = length 89733, hash 5BBF699C
sample 28:
time = 946666
flags = 0
data = length 35009, hash DB122D5B
sample 29:
time = 913333
flags = 0
data = length 19035, hash 3C338E70
sample 30:
time = 980000
flags = 0
data = length 17084, hash 8E308D8C
sample 31:
time = 1048333
flags = 0
data = length 87793, hash FAC29674
sample 32:
time = 1081666
flags = 1
data = length 356935, hash 8C646516
sample 33:
time = 1216666
flags = 0
data = length 65937, hash 6F9EDC54
sample 34:
time = 1150000
flags = 0
data = length 18102, hash 703C5395
sample 35:
time = 1115000
flags = 0
data = length 6787, hash 3D0E2B31
sample 36:
time = 1183333
flags = 0
data = length 10192, hash 461CF7D3
sample 37:
time = 1353333
flags = 0
data = length 189823, hash FFBAEEFD
sample 38:
time = 1285000
flags = 0
data = length 25293, hash 33EFA370
sample 39:
time = 1250000
flags = 0
data = length 9088, hash 46BE5B80
sample 40:
time = 1318333
flags = 0
data = length 16795, hash F3915E7A
sample 41:
time = 1488333
flags = 0
data = length 71742, hash 170147AF
sample 42:
time = 1421666
flags = 0
data = length 29558, hash 181F9C60
sample 43:
time = 1388333
flags = 0
data = length 15494, hash 1F2B57F6
sample 44:
time = 1455000
flags = 0
data = length 14166, hash E1FD2EC1
sample 45:
time = 1623333
flags = 0
data = length 84016, hash 99426E2E
sample 46:
time = 1556666
flags = 0
data = length 28831, hash 5CD70807
sample 47:
time = 1523333
flags = 0
data = length 17372, hash AFF61899
sample 48:
time = 1590000
flags = 0
data = length 21827, hash E3B1A343
sample 49:
time = 1658333
flags = 0
data = length 82723, hash 116637ED
sample 50:
time = 1691666
flags = 1
data = length 364720, hash 97CC919
sample 51:
time = 1826666
flags = 0
data = length 56266, hash B00EE494
sample 52:
time = 1758333
flags = 0
data = length 15158, hash A9F99FBC
sample 53:
time = 1725000
flags = 0
data = length 9522, hash B3C6232B
sample 54:
time = 1793333
flags = 0
data = length 11191, hash C2118AB9
sample 55:
time = 1963333
flags = 0
data = length 77904, hash 19170263
sample 56:
time = 1895000
flags = 0
data = length 105375, hash E5C39C98
sample 57:
time = 1860000
flags = 0
data = length 16265, hash 478FD058
sample 58:
time = 1930000
flags = 0
data = length 9527, hash B8C5D790
sample 59:
time = 2031666
flags = 0
data = length 27558, hash 3CAFD1D3
sample 60:
time = 1996666
flags = 0
data = length 10814, hash 9CBA8FAA
sample 61:
time = 2065000
flags = 1
data = length 354639, hash 5F75524F
sample 62:
time = 2200000
flags = 0
data = length 34289, hash 7BD19879
sample 63:
time = 2131666
flags = 0
data = length 16370, hash 7247AF47
sample 64:
time = 2098333
flags = 0
data = length 8429, hash B9F88E07
sample 65:
time = 2166666
flags = 0
data = length 11477, hash 7E9AF3B8
sample 66:
time = 2335000
flags = 0
data = length 202300, hash FC193F4E
sample 67:
time = 2266666
flags = 0
data = length 17622, hash C230902B
sample 68:
time = 2233333
flags = 0
data = length 7898, hash 70F94769
sample 69:
time = 2301666
flags = 0
data = length 13175, hash 966061EB
sample 70:
time = 2403333
flags = 0
data = length 30833, hash B4420439
sample 71:
time = 2368333
flags = 0
data = length 10846, hash 88595E1
sample 72:
time = 2438333
flags = 1
data = length 302471, hash 94BDFA4A
sample 73:
time = 2573333
flags = 0
data = length 30489, hash C077BCC8
sample 74:
time = 2506666
flags = 0
data = length 20085, hash FD0232B7
sample 75:
time = 2471666
flags = 0
data = length 11066, hash 10D3869
sample 76:
time = 2540000
flags = 0
data = length 12144, hash FC1D71A8
sample 77:
time = 2708333
flags = 0
data = length 64048, hash AF8C69C4
sample 78:
time = 2640000
flags = 0
data = length 17710, hash ED7B986C
sample 79:
time = 2606666
flags = 536870912
data = length 11420, hash 712BAC8D
track 1:
total output bytes = 232260
sample count = 29
format 0:
id = 2
sampleMimeType = audio/raw
maxInputSize = 8222
channelCount = 1
sampleRate = 44100
pcmEncoding = 2
language = und
metadata = entries=[mdta: key=com.apple.quicktime.live-photo.auto, value=01, mdta: key=com.apple.quicktime.content.identifier, value=A873E9D3-2FBA-440A-B4D1-AEB073BC8E54, mdta: key=com.apple.quicktime.live-photo.vitality-score, value=0.9398496, mdta: key=com.apple.quicktime.live-photo.vitality-scoring-version, value=0000000000000004, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone SE (3rd generation), mdta: key=com.apple.quicktime.software, value=16.5.1, mdta: key=com.apple.quicktime.creationdate, value=2023-07-05T13:13:32+0800, Mp4Timestamp: creation time=3771378882, modification time=3771378882, timescale=600]
sample 0:
time = 0
flags = 1
data = length 8192, hash F5635F50
sample 1:
time = 92879
flags = 1
data = length 8192, hash 474BEB58
sample 2:
time = 185759
flags = 1
data = length 8192, hash 7749D89B
sample 3:
time = 278639
flags = 1
data = length 8192, hash ABCCD27C
sample 4:
time = 371519
flags = 1
data = length 8192, hash DBAED6B
sample 5:
time = 464399
flags = 1
data = length 8192, hash BD10BAD6
sample 6:
time = 557278
flags = 1
data = length 8192, hash 38454832
sample 7:
time = 650158
flags = 1
data = length 8192, hash 894C38EA
sample 8:
time = 743038
flags = 1
data = length 8192, hash D002964D
sample 9:
time = 835918
flags = 1
data = length 8192, hash 15A70C61
sample 10:
time = 928798
flags = 1
data = length 6280, hash 418D1C1
sample 11:
time = 1000000
flags = 1
data = length 8192, hash E1AE913E
sample 12:
time = 1092879
flags = 1
data = length 8192, hash 888B8687
sample 13:
time = 1185759
flags = 1
data = length 8192, hash F750B9D9
sample 14:
time = 1278639
flags = 1
data = length 8192, hash 4566AA2D
sample 15:
time = 1371519
flags = 1
data = length 8192, hash C6F827CD
sample 16:
time = 1464399
flags = 1
data = length 8192, hash 3A911603
sample 17:
time = 1557278
flags = 1
data = length 8192, hash FDE3EF6A
sample 18:
time = 1650158
flags = 1
data = length 8192, hash 450F2C8B
sample 19:
time = 1743038
flags = 1
data = length 8192, hash 9D74782F
sample 20:
time = 1835918
flags = 1
data = length 8192, hash 3A421696
sample 21:
time = 1928798
flags = 1
data = length 6280, hash CD4EC54B
sample 22:
time = 2000000
flags = 1
data = length 8192, hash A7477920
sample 23:
time = 2092879
flags = 1
data = length 8192, hash 1AF0CDAE
sample 24:
time = 2185759
flags = 1
data = length 8192, hash 8F158715
sample 25:
time = 2278639
flags = 1
data = length 8192, hash 4787ED61
sample 26:
time = 2371519
flags = 1
data = length 8192, hash 8E96B0F9
sample 27:
time = 2464399
flags = 1
data = length 8192, hash B6BDD1BD
sample 28:
time = 2557278
flags = 536870913
data = length 6708, hash BF420F22
tracksEnded = true

View File

@ -0,0 +1,385 @@
seekMap:
isSeekable = true
duration = 2741666
getPosition(0) = [[timeUs=0, position=16]]
getPosition(1) = [[timeUs=0, position=16], [timeUs=471666, position=694060]]
getPosition(1370833) = [[timeUs=1081666, position=1534024], [timeUs=1691666, position=2598705]]
getPosition(2741666) = [[timeUs=2438333, position=4019235]]
numberOfTracks = 2
track 0:
total output bytes = 3786256
sample count = 66
format 0:
id = 1
sampleMimeType = video/hevc
codecs = hvc1.1.6.L150.B0
maxInputSize = 364750
width = 1920
height = 1440
frameRate = 29.179338
rotationDegrees = 90
colorInfo:
colorSpace = -1
colorRange = 1
colorTransfer = 3
hdrStaticInfo = length 0, hash 0
metadata = entries=[mdta: key=com.apple.quicktime.live-photo.auto, value=01, mdta: key=com.apple.quicktime.content.identifier, value=A873E9D3-2FBA-440A-B4D1-AEB073BC8E54, mdta: key=com.apple.quicktime.live-photo.vitality-score, value=0.9398496, mdta: key=com.apple.quicktime.live-photo.vitality-scoring-version, value=0000000000000004, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone SE (3rd generation), mdta: key=com.apple.quicktime.software, value=16.5.1, mdta: key=com.apple.quicktime.creationdate, value=2023-07-05T13:13:32+0800, Mp4Timestamp: creation time=3771378882, modification time=3771378882, timescale=600]
initializationData:
data = length 78, hash C57F938D
sample 0:
time = 471666
flags = 1
data = length 206359, hash AA9C86B7
sample 1:
time = 606666
flags = 0
data = length 32316, hash 91F96807
sample 2:
time = 540000
flags = 0
data = length 15943, hash 45FA9864
sample 3:
time = 506666
flags = 0
data = length 7183, hash BEF025B1
sample 4:
time = 573333
flags = 0
data = length 9604, hash A6E08624
sample 5:
time = 741666
flags = 0
data = length 93206, hash 8D92A1BC
sample 6:
time = 675000
flags = 0
data = length 27500, hash 9DBA11AA
sample 7:
time = 641666
flags = 0
data = length 11687, hash E23F32C7
sample 8:
time = 708333
flags = 0
data = length 14906, hash DC2DA89D
sample 9:
time = 880000
flags = 0
data = length 80531, hash 5F281EEE
sample 10:
time = 811666
flags = 0
data = length 25736, hash 4D443883
sample 11:
time = 776666
flags = 0
data = length 45840, hash 4456028
sample 12:
time = 845000
flags = 0
data = length 20499, hash 9940E6F1
sample 13:
time = 1015000
flags = 0
data = length 89733, hash 5BBF699C
sample 14:
time = 946666
flags = 0
data = length 35009, hash DB122D5B
sample 15:
time = 913333
flags = 0
data = length 19035, hash 3C338E70
sample 16:
time = 980000
flags = 0
data = length 17084, hash 8E308D8C
sample 17:
time = 1048333
flags = 0
data = length 87793, hash FAC29674
sample 18:
time = 1081666
flags = 1
data = length 356935, hash 8C646516
sample 19:
time = 1216666
flags = 0
data = length 65937, hash 6F9EDC54
sample 20:
time = 1150000
flags = 0
data = length 18102, hash 703C5395
sample 21:
time = 1115000
flags = 0
data = length 6787, hash 3D0E2B31
sample 22:
time = 1183333
flags = 0
data = length 10192, hash 461CF7D3
sample 23:
time = 1353333
flags = 0
data = length 189823, hash FFBAEEFD
sample 24:
time = 1285000
flags = 0
data = length 25293, hash 33EFA370
sample 25:
time = 1250000
flags = 0
data = length 9088, hash 46BE5B80
sample 26:
time = 1318333
flags = 0
data = length 16795, hash F3915E7A
sample 27:
time = 1488333
flags = 0
data = length 71742, hash 170147AF
sample 28:
time = 1421666
flags = 0
data = length 29558, hash 181F9C60
sample 29:
time = 1388333
flags = 0
data = length 15494, hash 1F2B57F6
sample 30:
time = 1455000
flags = 0
data = length 14166, hash E1FD2EC1
sample 31:
time = 1623333
flags = 0
data = length 84016, hash 99426E2E
sample 32:
time = 1556666
flags = 0
data = length 28831, hash 5CD70807
sample 33:
time = 1523333
flags = 0
data = length 17372, hash AFF61899
sample 34:
time = 1590000
flags = 0
data = length 21827, hash E3B1A343
sample 35:
time = 1658333
flags = 0
data = length 82723, hash 116637ED
sample 36:
time = 1691666
flags = 1
data = length 364720, hash 97CC919
sample 37:
time = 1826666
flags = 0
data = length 56266, hash B00EE494
sample 38:
time = 1758333
flags = 0
data = length 15158, hash A9F99FBC
sample 39:
time = 1725000
flags = 0
data = length 9522, hash B3C6232B
sample 40:
time = 1793333
flags = 0
data = length 11191, hash C2118AB9
sample 41:
time = 1963333
flags = 0
data = length 77904, hash 19170263
sample 42:
time = 1895000
flags = 0
data = length 105375, hash E5C39C98
sample 43:
time = 1860000
flags = 0
data = length 16265, hash 478FD058
sample 44:
time = 1930000
flags = 0
data = length 9527, hash B8C5D790
sample 45:
time = 2031666
flags = 0
data = length 27558, hash 3CAFD1D3
sample 46:
time = 1996666
flags = 0
data = length 10814, hash 9CBA8FAA
sample 47:
time = 2065000
flags = 1
data = length 354639, hash 5F75524F
sample 48:
time = 2200000
flags = 0
data = length 34289, hash 7BD19879
sample 49:
time = 2131666
flags = 0
data = length 16370, hash 7247AF47
sample 50:
time = 2098333
flags = 0
data = length 8429, hash B9F88E07
sample 51:
time = 2166666
flags = 0
data = length 11477, hash 7E9AF3B8
sample 52:
time = 2335000
flags = 0
data = length 202300, hash FC193F4E
sample 53:
time = 2266666
flags = 0
data = length 17622, hash C230902B
sample 54:
time = 2233333
flags = 0
data = length 7898, hash 70F94769
sample 55:
time = 2301666
flags = 0
data = length 13175, hash 966061EB
sample 56:
time = 2403333
flags = 0
data = length 30833, hash B4420439
sample 57:
time = 2368333
flags = 0
data = length 10846, hash 88595E1
sample 58:
time = 2438333
flags = 1
data = length 302471, hash 94BDFA4A
sample 59:
time = 2573333
flags = 0
data = length 30489, hash C077BCC8
sample 60:
time = 2506666
flags = 0
data = length 20085, hash FD0232B7
sample 61:
time = 2471666
flags = 0
data = length 11066, hash 10D3869
sample 62:
time = 2540000
flags = 0
data = length 12144, hash FC1D71A8
sample 63:
time = 2708333
flags = 0
data = length 64048, hash AF8C69C4
sample 64:
time = 2640000
flags = 0
data = length 17710, hash ED7B986C
sample 65:
time = 2606666
flags = 536870912
data = length 11420, hash 712BAC8D
track 1:
total output bytes = 158532
sample count = 20
format 0:
id = 2
sampleMimeType = audio/raw
maxInputSize = 8222
channelCount = 1
sampleRate = 44100
pcmEncoding = 2
language = und
metadata = entries=[mdta: key=com.apple.quicktime.live-photo.auto, value=01, mdta: key=com.apple.quicktime.content.identifier, value=A873E9D3-2FBA-440A-B4D1-AEB073BC8E54, mdta: key=com.apple.quicktime.live-photo.vitality-score, value=0.9398496, mdta: key=com.apple.quicktime.live-photo.vitality-scoring-version, value=0000000000000004, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone SE (3rd generation), mdta: key=com.apple.quicktime.software, value=16.5.1, mdta: key=com.apple.quicktime.creationdate, value=2023-07-05T13:13:32+0800, Mp4Timestamp: creation time=3771378882, modification time=3771378882, timescale=600]
sample 0:
time = 835918
flags = 1
data = length 8192, hash 15A70C61
sample 1:
time = 928798
flags = 1
data = length 6280, hash 418D1C1
sample 2:
time = 1000000
flags = 1
data = length 8192, hash E1AE913E
sample 3:
time = 1092879
flags = 1
data = length 8192, hash 888B8687
sample 4:
time = 1185759
flags = 1
data = length 8192, hash F750B9D9
sample 5:
time = 1278639
flags = 1
data = length 8192, hash 4566AA2D
sample 6:
time = 1371519
flags = 1
data = length 8192, hash C6F827CD
sample 7:
time = 1464399
flags = 1
data = length 8192, hash 3A911603
sample 8:
time = 1557278
flags = 1
data = length 8192, hash FDE3EF6A
sample 9:
time = 1650158
flags = 1
data = length 8192, hash 450F2C8B
sample 10:
time = 1743038
flags = 1
data = length 8192, hash 9D74782F
sample 11:
time = 1835918
flags = 1
data = length 8192, hash 3A421696
sample 12:
time = 1928798
flags = 1
data = length 6280, hash CD4EC54B
sample 13:
time = 2000000
flags = 1
data = length 8192, hash A7477920
sample 14:
time = 2092879
flags = 1
data = length 8192, hash 1AF0CDAE
sample 15:
time = 2185759
flags = 1
data = length 8192, hash 8F158715
sample 16:
time = 2278639
flags = 1
data = length 8192, hash 4787ED61
sample 17:
time = 2371519
flags = 1
data = length 8192, hash 8E96B0F9
sample 18:
time = 2464399
flags = 1
data = length 8192, hash B6BDD1BD
sample 19:
time = 2557278
flags = 536870913
data = length 6708, hash BF420F22
tracksEnded = true

View File

@ -0,0 +1,201 @@
seekMap:
isSeekable = true
duration = 2741666
getPosition(0) = [[timeUs=0, position=16]]
getPosition(1) = [[timeUs=0, position=16], [timeUs=471666, position=694060]]
getPosition(1370833) = [[timeUs=1081666, position=1534024], [timeUs=1691666, position=2598705]]
getPosition(2741666) = [[timeUs=2438333, position=4019235]]
numberOfTracks = 2
track 0:
total output bytes = 1881611
sample count = 30
format 0:
id = 1
sampleMimeType = video/hevc
codecs = hvc1.1.6.L150.B0
maxInputSize = 364750
width = 1920
height = 1440
frameRate = 29.179338
rotationDegrees = 90
colorInfo:
colorSpace = -1
colorRange = 1
colorTransfer = 3
hdrStaticInfo = length 0, hash 0
metadata = entries=[mdta: key=com.apple.quicktime.live-photo.auto, value=01, mdta: key=com.apple.quicktime.content.identifier, value=A873E9D3-2FBA-440A-B4D1-AEB073BC8E54, mdta: key=com.apple.quicktime.live-photo.vitality-score, value=0.9398496, mdta: key=com.apple.quicktime.live-photo.vitality-scoring-version, value=0000000000000004, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone SE (3rd generation), mdta: key=com.apple.quicktime.software, value=16.5.1, mdta: key=com.apple.quicktime.creationdate, value=2023-07-05T13:13:32+0800, Mp4Timestamp: creation time=3771378882, modification time=3771378882, timescale=600]
initializationData:
data = length 78, hash C57F938D
sample 0:
time = 1691666
flags = 1
data = length 364720, hash 97CC919
sample 1:
time = 1826666
flags = 0
data = length 56266, hash B00EE494
sample 2:
time = 1758333
flags = 0
data = length 15158, hash A9F99FBC
sample 3:
time = 1725000
flags = 0
data = length 9522, hash B3C6232B
sample 4:
time = 1793333
flags = 0
data = length 11191, hash C2118AB9
sample 5:
time = 1963333
flags = 0
data = length 77904, hash 19170263
sample 6:
time = 1895000
flags = 0
data = length 105375, hash E5C39C98
sample 7:
time = 1860000
flags = 0
data = length 16265, hash 478FD058
sample 8:
time = 1930000
flags = 0
data = length 9527, hash B8C5D790
sample 9:
time = 2031666
flags = 0
data = length 27558, hash 3CAFD1D3
sample 10:
time = 1996666
flags = 0
data = length 10814, hash 9CBA8FAA
sample 11:
time = 2065000
flags = 1
data = length 354639, hash 5F75524F
sample 12:
time = 2200000
flags = 0
data = length 34289, hash 7BD19879
sample 13:
time = 2131666
flags = 0
data = length 16370, hash 7247AF47
sample 14:
time = 2098333
flags = 0
data = length 8429, hash B9F88E07
sample 15:
time = 2166666
flags = 0
data = length 11477, hash 7E9AF3B8
sample 16:
time = 2335000
flags = 0
data = length 202300, hash FC193F4E
sample 17:
time = 2266666
flags = 0
data = length 17622, hash C230902B
sample 18:
time = 2233333
flags = 0
data = length 7898, hash 70F94769
sample 19:
time = 2301666
flags = 0
data = length 13175, hash 966061EB
sample 20:
time = 2403333
flags = 0
data = length 30833, hash B4420439
sample 21:
time = 2368333
flags = 0
data = length 10846, hash 88595E1
sample 22:
time = 2438333
flags = 1
data = length 302471, hash 94BDFA4A
sample 23:
time = 2573333
flags = 0
data = length 30489, hash C077BCC8
sample 24:
time = 2506666
flags = 0
data = length 20085, hash FD0232B7
sample 25:
time = 2471666
flags = 0
data = length 11066, hash 10D3869
sample 26:
time = 2540000
flags = 0
data = length 12144, hash FC1D71A8
sample 27:
time = 2708333
flags = 0
data = length 64048, hash AF8C69C4
sample 28:
time = 2640000
flags = 0
data = length 17710, hash ED7B986C
sample 29:
time = 2606666
flags = 536870912
data = length 11420, hash 712BAC8D
track 1:
total output bytes = 78524
sample count = 10
format 0:
id = 2
sampleMimeType = audio/raw
maxInputSize = 8222
channelCount = 1
sampleRate = 44100
pcmEncoding = 2
language = und
metadata = entries=[mdta: key=com.apple.quicktime.live-photo.auto, value=01, mdta: key=com.apple.quicktime.content.identifier, value=A873E9D3-2FBA-440A-B4D1-AEB073BC8E54, mdta: key=com.apple.quicktime.live-photo.vitality-score, value=0.9398496, mdta: key=com.apple.quicktime.live-photo.vitality-scoring-version, value=0000000000000004, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone SE (3rd generation), mdta: key=com.apple.quicktime.software, value=16.5.1, mdta: key=com.apple.quicktime.creationdate, value=2023-07-05T13:13:32+0800, Mp4Timestamp: creation time=3771378882, modification time=3771378882, timescale=600]
sample 0:
time = 1743038
flags = 1
data = length 8192, hash 9D74782F
sample 1:
time = 1835918
flags = 1
data = length 8192, hash 3A421696
sample 2:
time = 1928798
flags = 1
data = length 6280, hash CD4EC54B
sample 3:
time = 2000000
flags = 1
data = length 8192, hash A7477920
sample 4:
time = 2092879
flags = 1
data = length 8192, hash 1AF0CDAE
sample 5:
time = 2185759
flags = 1
data = length 8192, hash 8F158715
sample 6:
time = 2278639
flags = 1
data = length 8192, hash 4787ED61
sample 7:
time = 2371519
flags = 1
data = length 8192, hash 8E96B0F9
sample 8:
time = 2464399
flags = 1
data = length 8192, hash B6BDD1BD
sample 9:
time = 2557278
flags = 536870913
data = length 6708, hash BF420F22
tracksEnded = true

View File

@ -0,0 +1,77 @@
seekMap:
isSeekable = true
duration = 2741666
getPosition(0) = [[timeUs=0, position=16]]
getPosition(1) = [[timeUs=0, position=16], [timeUs=471666, position=694060]]
getPosition(1370833) = [[timeUs=1081666, position=1534024], [timeUs=1691666, position=2598705]]
getPosition(2741666) = [[timeUs=2438333, position=4019235]]
numberOfTracks = 2
track 0:
total output bytes = 469433
sample count = 8
format 0:
id = 1
sampleMimeType = video/hevc
codecs = hvc1.1.6.L150.B0
maxInputSize = 364750
width = 1920
height = 1440
frameRate = 29.179338
rotationDegrees = 90
colorInfo:
colorSpace = -1
colorRange = 1
colorTransfer = 3
hdrStaticInfo = length 0, hash 0
metadata = entries=[mdta: key=com.apple.quicktime.live-photo.auto, value=01, mdta: key=com.apple.quicktime.content.identifier, value=A873E9D3-2FBA-440A-B4D1-AEB073BC8E54, mdta: key=com.apple.quicktime.live-photo.vitality-score, value=0.9398496, mdta: key=com.apple.quicktime.live-photo.vitality-scoring-version, value=0000000000000004, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone SE (3rd generation), mdta: key=com.apple.quicktime.software, value=16.5.1, mdta: key=com.apple.quicktime.creationdate, value=2023-07-05T13:13:32+0800, Mp4Timestamp: creation time=3771378882, modification time=3771378882, timescale=600]
initializationData:
data = length 78, hash C57F938D
sample 0:
time = 2438333
flags = 1
data = length 302471, hash 94BDFA4A
sample 1:
time = 2573333
flags = 0
data = length 30489, hash C077BCC8
sample 2:
time = 2506666
flags = 0
data = length 20085, hash FD0232B7
sample 3:
time = 2471666
flags = 0
data = length 11066, hash 10D3869
sample 4:
time = 2540000
flags = 0
data = length 12144, hash FC1D71A8
sample 5:
time = 2708333
flags = 0
data = length 64048, hash AF8C69C4
sample 6:
time = 2640000
flags = 0
data = length 17710, hash ED7B986C
sample 7:
time = 2606666
flags = 536870912
data = length 11420, hash 712BAC8D
track 1:
total output bytes = 6708
sample count = 1
format 0:
id = 2
sampleMimeType = audio/raw
maxInputSize = 8222
channelCount = 1
sampleRate = 44100
pcmEncoding = 2
language = und
metadata = entries=[mdta: key=com.apple.quicktime.live-photo.auto, value=01, mdta: key=com.apple.quicktime.content.identifier, value=A873E9D3-2FBA-440A-B4D1-AEB073BC8E54, mdta: key=com.apple.quicktime.live-photo.vitality-score, value=0.9398496, mdta: key=com.apple.quicktime.live-photo.vitality-scoring-version, value=0000000000000004, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone SE (3rd generation), mdta: key=com.apple.quicktime.software, value=16.5.1, mdta: key=com.apple.quicktime.creationdate, value=2023-07-05T13:13:32+0800, Mp4Timestamp: creation time=3771378882, modification time=3771378882, timescale=600]
sample 0:
time = 2557278
flags = 536870913
data = length 6708, hash BF420F22
tracksEnded = true

View File

@ -0,0 +1,477 @@
seekMap:
isSeekable = true
duration = 2741666
getPosition(0) = [[timeUs=0, position=16]]
getPosition(1) = [[timeUs=0, position=16], [timeUs=471666, position=694060]]
getPosition(1370833) = [[timeUs=1081666, position=1534024], [timeUs=1691666, position=2598705]]
getPosition(2741666) = [[timeUs=2438333, position=4019235]]
numberOfTracks = 2
track 0:
total output bytes = 4478284
sample count = 80
format 0:
id = 1
sampleMimeType = video/hevc
codecs = hvc1.1.6.L150.B0
maxInputSize = 364750
width = 1920
height = 1440
frameRate = 29.179338
rotationDegrees = 90
colorInfo:
colorSpace = -1
colorRange = 1
colorTransfer = 3
hdrStaticInfo = length 0, hash 0
metadata = entries=[mdta: key=com.apple.quicktime.live-photo.auto, value=01, mdta: key=com.apple.quicktime.content.identifier, value=A873E9D3-2FBA-440A-B4D1-AEB073BC8E54, mdta: key=com.apple.quicktime.live-photo.vitality-score, value=0.9398496, mdta: key=com.apple.quicktime.live-photo.vitality-scoring-version, value=0000000000000004, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone SE (3rd generation), mdta: key=com.apple.quicktime.software, value=16.5.1, mdta: key=com.apple.quicktime.creationdate, value=2023-07-05T13:13:32+0800, Mp4Timestamp: creation time=3771378882, modification time=3771378882, timescale=600]
initializationData:
data = length 78, hash C57F938D
sample 0:
time = 0
flags = 1
data = length 199307, hash 5864D22F
sample 1:
time = 135000
flags = 0
data = length 61191, hash 8D7235B7
sample 2:
time = 66666
flags = 0
data = length 21875, hash 9FD10CF3
sample 3:
time = 33333
flags = 0
data = length 10447, hash 14D226A7
sample 4:
time = 101666
flags = 0
data = length 16015, hash 188EE834
sample 5:
time = 270000
flags = 0
data = length 138443, hash EBCD299
sample 6:
time = 201666
flags = 0
data = length 32805, hash 7626D6C3
sample 7:
time = 168333
flags = 0
data = length 14883, hash A734B5FE
sample 8:
time = 236666
flags = 0
data = length 11948, hash BCCC2A33
sample 9:
time = 405000
flags = 0
data = length 88769, hash 149FF9D3
sample 10:
time = 336666
flags = 0
data = length 25855, hash A0C3D845
sample 11:
time = 303333
flags = 0
data = length 11071, hash 23BA2C6B
sample 12:
time = 371666
flags = 0
data = length 11859, hash FE106775
sample 13:
time = 438333
flags = 0
data = length 47560, hash F4A52500
sample 14:
time = 471666
flags = 1
data = length 206359, hash AA9C86B7
sample 15:
time = 606666
flags = 0
data = length 32316, hash 91F96807
sample 16:
time = 540000
flags = 0
data = length 15943, hash 45FA9864
sample 17:
time = 506666
flags = 0
data = length 7183, hash BEF025B1
sample 18:
time = 573333
flags = 0
data = length 9604, hash A6E08624
sample 19:
time = 741666
flags = 0
data = length 93206, hash 8D92A1BC
sample 20:
time = 675000
flags = 0
data = length 27500, hash 9DBA11AA
sample 21:
time = 641666
flags = 0
data = length 11687, hash E23F32C7
sample 22:
time = 708333
flags = 0
data = length 14906, hash DC2DA89D
sample 23:
time = 880000
flags = 0
data = length 80531, hash 5F281EEE
sample 24:
time = 811666
flags = 0
data = length 25736, hash 4D443883
sample 25:
time = 776666
flags = 0
data = length 45840, hash 4456028
sample 26:
time = 845000
flags = 0
data = length 20499, hash 9940E6F1
sample 27:
time = 1015000
flags = 0
data = length 89733, hash 5BBF699C
sample 28:
time = 946666
flags = 0
data = length 35009, hash DB122D5B
sample 29:
time = 913333
flags = 0
data = length 19035, hash 3C338E70
sample 30:
time = 980000
flags = 0
data = length 17084, hash 8E308D8C
sample 31:
time = 1048333
flags = 0
data = length 87793, hash FAC29674
sample 32:
time = 1081666
flags = 1
data = length 356935, hash 8C646516
sample 33:
time = 1216666
flags = 0
data = length 65937, hash 6F9EDC54
sample 34:
time = 1150000
flags = 0
data = length 18102, hash 703C5395
sample 35:
time = 1115000
flags = 0
data = length 6787, hash 3D0E2B31
sample 36:
time = 1183333
flags = 0
data = length 10192, hash 461CF7D3
sample 37:
time = 1353333
flags = 0
data = length 189823, hash FFBAEEFD
sample 38:
time = 1285000
flags = 0
data = length 25293, hash 33EFA370
sample 39:
time = 1250000
flags = 0
data = length 9088, hash 46BE5B80
sample 40:
time = 1318333
flags = 0
data = length 16795, hash F3915E7A
sample 41:
time = 1488333
flags = 0
data = length 71742, hash 170147AF
sample 42:
time = 1421666
flags = 0
data = length 29558, hash 181F9C60
sample 43:
time = 1388333
flags = 0
data = length 15494, hash 1F2B57F6
sample 44:
time = 1455000
flags = 0
data = length 14166, hash E1FD2EC1
sample 45:
time = 1623333
flags = 0
data = length 84016, hash 99426E2E
sample 46:
time = 1556666
flags = 0
data = length 28831, hash 5CD70807
sample 47:
time = 1523333
flags = 0
data = length 17372, hash AFF61899
sample 48:
time = 1590000
flags = 0
data = length 21827, hash E3B1A343
sample 49:
time = 1658333
flags = 0
data = length 82723, hash 116637ED
sample 50:
time = 1691666
flags = 1
data = length 364720, hash 97CC919
sample 51:
time = 1826666
flags = 0
data = length 56266, hash B00EE494
sample 52:
time = 1758333
flags = 0
data = length 15158, hash A9F99FBC
sample 53:
time = 1725000
flags = 0
data = length 9522, hash B3C6232B
sample 54:
time = 1793333
flags = 0
data = length 11191, hash C2118AB9
sample 55:
time = 1963333
flags = 0
data = length 77904, hash 19170263
sample 56:
time = 1895000
flags = 0
data = length 105375, hash E5C39C98
sample 57:
time = 1860000
flags = 0
data = length 16265, hash 478FD058
sample 58:
time = 1930000
flags = 0
data = length 9527, hash B8C5D790
sample 59:
time = 2031666
flags = 0
data = length 27558, hash 3CAFD1D3
sample 60:
time = 1996666
flags = 0
data = length 10814, hash 9CBA8FAA
sample 61:
time = 2065000
flags = 1
data = length 354639, hash 5F75524F
sample 62:
time = 2200000
flags = 0
data = length 34289, hash 7BD19879
sample 63:
time = 2131666
flags = 0
data = length 16370, hash 7247AF47
sample 64:
time = 2098333
flags = 0
data = length 8429, hash B9F88E07
sample 65:
time = 2166666
flags = 0
data = length 11477, hash 7E9AF3B8
sample 66:
time = 2335000
flags = 0
data = length 202300, hash FC193F4E
sample 67:
time = 2266666
flags = 0
data = length 17622, hash C230902B
sample 68:
time = 2233333
flags = 0
data = length 7898, hash 70F94769
sample 69:
time = 2301666
flags = 0
data = length 13175, hash 966061EB
sample 70:
time = 2403333
flags = 0
data = length 30833, hash B4420439
sample 71:
time = 2368333
flags = 0
data = length 10846, hash 88595E1
sample 72:
time = 2438333
flags = 1
data = length 302471, hash 94BDFA4A
sample 73:
time = 2573333
flags = 0
data = length 30489, hash C077BCC8
sample 74:
time = 2506666
flags = 0
data = length 20085, hash FD0232B7
sample 75:
time = 2471666
flags = 0
data = length 11066, hash 10D3869
sample 76:
time = 2540000
flags = 0
data = length 12144, hash FC1D71A8
sample 77:
time = 2708333
flags = 0
data = length 64048, hash AF8C69C4
sample 78:
time = 2640000
flags = 0
data = length 17710, hash ED7B986C
sample 79:
time = 2606666
flags = 536870912
data = length 11420, hash 712BAC8D
track 1:
total output bytes = 232260
sample count = 29
format 0:
id = 2
sampleMimeType = audio/raw
maxInputSize = 8222
channelCount = 1
sampleRate = 44100
pcmEncoding = 2
language = und
metadata = entries=[mdta: key=com.apple.quicktime.live-photo.auto, value=01, mdta: key=com.apple.quicktime.content.identifier, value=A873E9D3-2FBA-440A-B4D1-AEB073BC8E54, mdta: key=com.apple.quicktime.live-photo.vitality-score, value=0.9398496, mdta: key=com.apple.quicktime.live-photo.vitality-scoring-version, value=0000000000000004, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone SE (3rd generation), mdta: key=com.apple.quicktime.software, value=16.5.1, mdta: key=com.apple.quicktime.creationdate, value=2023-07-05T13:13:32+0800, Mp4Timestamp: creation time=3771378882, modification time=3771378882, timescale=600]
sample 0:
time = 0
flags = 1
data = length 8192, hash F5635F50
sample 1:
time = 92879
flags = 1
data = length 8192, hash 474BEB58
sample 2:
time = 185759
flags = 1
data = length 8192, hash 7749D89B
sample 3:
time = 278639
flags = 1
data = length 8192, hash ABCCD27C
sample 4:
time = 371519
flags = 1
data = length 8192, hash DBAED6B
sample 5:
time = 464399
flags = 1
data = length 8192, hash BD10BAD6
sample 6:
time = 557278
flags = 1
data = length 8192, hash 38454832
sample 7:
time = 650158
flags = 1
data = length 8192, hash 894C38EA
sample 8:
time = 743038
flags = 1
data = length 8192, hash D002964D
sample 9:
time = 835918
flags = 1
data = length 8192, hash 15A70C61
sample 10:
time = 928798
flags = 1
data = length 6280, hash 418D1C1
sample 11:
time = 1000000
flags = 1
data = length 8192, hash E1AE913E
sample 12:
time = 1092879
flags = 1
data = length 8192, hash 888B8687
sample 13:
time = 1185759
flags = 1
data = length 8192, hash F750B9D9
sample 14:
time = 1278639
flags = 1
data = length 8192, hash 4566AA2D
sample 15:
time = 1371519
flags = 1
data = length 8192, hash C6F827CD
sample 16:
time = 1464399
flags = 1
data = length 8192, hash 3A911603
sample 17:
time = 1557278
flags = 1
data = length 8192, hash FDE3EF6A
sample 18:
time = 1650158
flags = 1
data = length 8192, hash 450F2C8B
sample 19:
time = 1743038
flags = 1
data = length 8192, hash 9D74782F
sample 20:
time = 1835918
flags = 1
data = length 8192, hash 3A421696
sample 21:
time = 1928798
flags = 1
data = length 6280, hash CD4EC54B
sample 22:
time = 2000000
flags = 1
data = length 8192, hash A7477920
sample 23:
time = 2092879
flags = 1
data = length 8192, hash 1AF0CDAE
sample 24:
time = 2185759
flags = 1
data = length 8192, hash 8F158715
sample 25:
time = 2278639
flags = 1
data = length 8192, hash 4787ED61
sample 26:
time = 2371519
flags = 1
data = length 8192, hash 8E96B0F9
sample 27:
time = 2464399
flags = 1
data = length 8192, hash B6BDD1BD
sample 28:
time = 2557278
flags = 536870913
data = length 6708, hash BF420F22
tracksEnded = true