Parse HDR static metadata from MP4 files

#minor-release

PiperOrigin-RevId: 407136922
This commit is contained in:
aquilescanta 2021-11-02 18:36:26 +00:00 committed by Ian Baker
parent e88c158524
commit ab9741aced
9 changed files with 2014 additions and 11 deletions

View File

@ -410,6 +410,12 @@ import java.util.List;
@SuppressWarnings("ConstantCaseForConstants")
public static final int TYPE_twos = 0x74776f73;
@SuppressWarnings("ConstantCaseForConstants")
public static final int TYPE_clli = 0x636c6c69;
@SuppressWarnings("ConstantCaseForConstants")
public static final int TYPE_mdcv = 0x6d646376;
public final int type;
public Atom(int type) {

View File

@ -45,6 +45,8 @@ import androidx.media3.extractor.OpusUtil;
import androidx.media3.extractor.metadata.mp4.SmtaMetadataEntry;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@ -1061,6 +1063,8 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
.build();
}
// hdrStaticInfo is allocated using allocate() in allocateHdrStaticInfo().
@SuppressWarnings("ByteBufferBackingArray")
private static void parseVideoSampleEntry(
ParsableByteArray parent,
int atomType,
@ -1112,7 +1116,14 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
@Nullable String codecs = null;
@Nullable byte[] projectionData = null;
@C.StereoMode int stereoMode = Format.NO_VALUE;
@Nullable ColorInfo colorInfo = null;
// HDR related metadata.
@C.ColorSpace int colorSpace = Format.NO_VALUE;
@C.ColorRange int colorRange = Format.NO_VALUE;
@C.ColorTransfer int colorTransfer = Format.NO_VALUE;
// The format of HDR static info is defined in CTA-861-G:2017, Table 45.
@Nullable ByteBuffer hdrStaticInfo = null;
while (childPosition - position < size) {
parent.setPosition(childPosition);
int childStartPosition = parent.getPosition();
@ -1157,6 +1168,43 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
} else if (childAtomType == Atom.TYPE_av1C) {
ExtractorUtil.checkContainerInput(mimeType == null, /* message= */ null);
mimeType = MimeTypes.VIDEO_AV1;
} else if (childAtomType == Atom.TYPE_clli) {
if (hdrStaticInfo == null) {
hdrStaticInfo = allocateHdrStaticInfo();
}
// The contents of the clli box occupy the last 4 bytes of the HDR static info array. Note
// that each field is read in big endian and written in little endian.
hdrStaticInfo.position(21);
hdrStaticInfo.putShort(parent.readShort()); // max_content_light_level.
hdrStaticInfo.putShort(parent.readShort()); // max_pic_average_light_level.
} else if (childAtomType == Atom.TYPE_mdcv) {
if (hdrStaticInfo == null) {
hdrStaticInfo = allocateHdrStaticInfo();
}
// The contents of the mdcv box occupy 20 bytes after the first byte of the HDR static info
// array. Note that each field is read in big endian and written in little endian.
short displayPrimariesGX = parent.readShort();
short displayPrimariesGY = parent.readShort();
short displayPrimariesBX = parent.readShort();
short displayPrimariesBY = parent.readShort();
short displayPrimariesRX = parent.readShort();
short displayPrimariesRY = parent.readShort();
short whitePointX = parent.readShort();
short whitePointY = parent.readShort();
long maxDisplayMasteringLuminance = parent.readUnsignedInt();
long minDisplayMasteringLuminance = parent.readUnsignedInt();
hdrStaticInfo.position(1);
hdrStaticInfo.putShort(displayPrimariesRX);
hdrStaticInfo.putShort(displayPrimariesRY);
hdrStaticInfo.putShort(displayPrimariesGX);
hdrStaticInfo.putShort(displayPrimariesGY);
hdrStaticInfo.putShort(displayPrimariesBX);
hdrStaticInfo.putShort(displayPrimariesBY);
hdrStaticInfo.putShort(whitePointX);
hdrStaticInfo.putShort(whitePointY);
hdrStaticInfo.putShort((short) (maxDisplayMasteringLuminance / 10000));
hdrStaticInfo.putShort((short) (minDisplayMasteringLuminance / 10000));
} else if (childAtomType == Atom.TYPE_d263) {
ExtractorUtil.checkContainerInput(mimeType == null, /* message= */ null);
mimeType = MimeTypes.VIDEO_H263;
@ -1211,12 +1259,10 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
// size=18): https://github.com/google/ExoPlayer/issues/9332
boolean fullRangeFlag =
childAtomSize == 19 && (parent.readUnsignedByte() & 0b10000000) != 0;
colorInfo =
new ColorInfo(
ColorInfo.isoColorPrimariesToColorSpace(colorPrimaries),
fullRangeFlag ? C.COLOR_RANGE_FULL : C.COLOR_RANGE_LIMITED,
ColorInfo.isoTransferCharacteristicsToColorTransfer(transferCharacteristics),
/* hdrStaticInfo= */ null);
colorSpace = ColorInfo.isoColorPrimariesToColorSpace(colorPrimaries);
colorRange = fullRangeFlag ? C.COLOR_RANGE_FULL : C.COLOR_RANGE_LIMITED;
colorTransfer =
ColorInfo.isoTransferCharacteristicsToColorTransfer(transferCharacteristics);
} else {
Log.w(TAG, "Unsupported color type: " + Atom.getAtomTypeString(colorType));
}
@ -1229,7 +1275,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
return;
}
out.format =
Format.Builder formatBuilder =
new Format.Builder()
.setId(trackId)
.setSampleMimeType(mimeType)
@ -1241,9 +1287,28 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
.setProjectionData(projectionData)
.setStereoMode(stereoMode)
.setInitializationData(initializationData)
.setDrmInitData(drmInitData)
.setColorInfo(colorInfo)
.build();
.setDrmInitData(drmInitData);
if (colorSpace != Format.NO_VALUE
|| colorRange != Format.NO_VALUE
|| colorTransfer != Format.NO_VALUE
|| hdrStaticInfo != null) {
// Note that if either mdcv or clli are missing, we leave the corresponding HDR static
// metadata bytes with value zero. See [Internal ref: b/194535665].
formatBuilder.setColorInfo(
new ColorInfo(
colorSpace,
colorRange,
colorTransfer,
hdrStaticInfo != null ? hdrStaticInfo.array() : null));
}
out.format = formatBuilder.build();
}
private static ByteBuffer allocateHdrStaticInfo() {
// For HDR static info, Android decoders expect a 25-byte array. The first byte is zero to
// represent Static Metadata Type 1, as per CTA-861-G:2017, Table 44. The following 24 bytes
// follow CTA-861-G:2017, Table 45.
return ByteBuffer.allocate(25).order(ByteOrder.LITTLE_ENDIAN);
}
private static void parseMetaDataSampleEntry(

View File

@ -119,4 +119,10 @@ public final class Mp4ExtractorTest {
ExtractorAsserts.assertBehavior(
Mp4Extractor::new, "media/mp4/sample_dthd.mp4", simulationConfig);
}
@Test
public void mp4SampleWithColrMdcvAndClli() throws Exception {
ExtractorAsserts.assertBehavior(
Mp4Extractor::new, "media/mp4/sample_with_colr_mdcv_and_clli.mp4", simulationConfig);
}
}

View File

@ -0,0 +1,454 @@
seekMap:
isSeekable = true
duration = 1022000
getPosition(0) = [[timeUs=0, position=48]]
getPosition(1) = [[timeUs=0, position=48]]
getPosition(511000) = [[timeUs=0, position=48]]
getPosition(1022000) = [[timeUs=0, position=48]]
numberOfTracks = 2
track 0:
total output bytes = 266091
sample count = 60
format 0:
id = 1
sampleMimeType = video/av01
maxInputSize = 144656
width = 1920
height = 1080
frameRate = 59.940056
colorInfo:
colorSpace = 6
colorRange = 2
colorTransfer = 6
hdrStaticInfo = length 25, hash 423AFC35
sample 0:
time = 0
flags = 1
data = length 144626, hash 7C021D5F
sample 1:
time = 16683
flags = 0
data = length 4018, hash FA5E79FA
sample 2:
time = 33366
flags = 0
data = length 3, hash D5E0
sample 3:
time = 50050
flags = 0
data = length 144, hash 4A868A2F
sample 4:
time = 66733
flags = 0
data = length 3, hash D5D0
sample 5:
time = 83416
flags = 0
data = length 342, hash 5A2E1C3C
sample 6:
time = 100100
flags = 0
data = length 3, hash D610
sample 7:
time = 116783
flags = 0
data = length 173, hash CFE014B3
sample 8:
time = 133466
flags = 0
data = length 3, hash D5C0
sample 9:
time = 150150
flags = 0
data = length 655, hash 3A7738B6
sample 10:
time = 166833
flags = 0
data = length 3, hash D5D0
sample 11:
time = 183516
flags = 0
data = length 208, hash E7D2035A
sample 12:
time = 200200
flags = 0
data = length 3, hash D600
sample 13:
time = 216883
flags = 0
data = length 385, hash 4D025B28
sample 14:
time = 233566
flags = 0
data = length 3, hash D5E0
sample 15:
time = 250250
flags = 0
data = length 192, hash CC0BD164
sample 16:
time = 266933
flags = 0
data = length 3, hash D5B0
sample 17:
time = 283616
flags = 0
data = length 36989, hash C213D35E
sample 18:
time = 300300
flags = 0
data = length 3, hash D5C0
sample 19:
time = 316983
flags = 0
data = length 213, hash 2BBA39D3
sample 20:
time = 333666
flags = 0
data = length 3, hash D600
sample 21:
time = 350350
flags = 0
data = length 474, hash 83D66E3F
sample 22:
time = 367033
flags = 0
data = length 3, hash D5E0
sample 23:
time = 383716
flags = 0
data = length 246, hash CF512AF0
sample 24:
time = 400400
flags = 0
data = length 3, hash D610
sample 25:
time = 417083
flags = 0
data = length 880, hash 8BFDE683
sample 26:
time = 433766
flags = 0
data = length 3, hash D5C0
sample 27:
time = 450450
flags = 0
data = length 246, hash 16B70503
sample 28:
time = 467133
flags = 0
data = length 3, hash D600
sample 29:
time = 483816
flags = 0
data = length 402, hash 51B5FAC9
sample 30:
time = 500500
flags = 0
data = length 3, hash D610
sample 31:
time = 517183
flags = 0
data = length 199, hash 12005069
sample 32:
time = 533866
flags = 0
data = length 3, hash D5D0
sample 33:
time = 550550
flags = 0
data = length 32362, hash F9FE31F7
sample 34:
time = 567233
flags = 0
data = length 3, hash D5E0
sample 35:
time = 583916
flags = 0
data = length 215, hash 2D4E3DC4
sample 36:
time = 600600
flags = 0
data = length 3, hash D600
sample 37:
time = 617283
flags = 0
data = length 450, hash C1A95E3
sample 38:
time = 633966
flags = 0
data = length 3, hash D610
sample 39:
time = 650650
flags = 0
data = length 221, hash 964386D9
sample 40:
time = 667333
flags = 0
data = length 3, hash D5F0
sample 41:
time = 684016
flags = 0
data = length 853, hash 2B9E0AAF
sample 42:
time = 700700
flags = 0
data = length 3, hash D5E0
sample 43:
time = 717383
flags = 0
data = length 236, hash 7E84BBAE
sample 44:
time = 734066
flags = 0
data = length 3, hash D600
sample 45:
time = 750750
flags = 0
data = length 419, hash 619235F2
sample 46:
time = 767433
flags = 0
data = length 3, hash D5F0
sample 47:
time = 784116
flags = 0
data = length 194, hash D386F352
sample 48:
time = 800800
flags = 0
data = length 3, hash D5A0
sample 49:
time = 817483
flags = 0
data = length 38679, hash 17E63FCD
sample 50:
time = 834166
flags = 0
data = length 3, hash D610
sample 51:
time = 850850
flags = 0
data = length 183, hash C8DD98E2
sample 52:
time = 867533
flags = 0
data = length 3, hash D600
sample 53:
time = 884216
flags = 0
data = length 457, hash 2B4E3476
sample 54:
time = 900900
flags = 0
data = length 3, hash D5F0
sample 55:
time = 917583
flags = 0
data = length 216, hash 7233540A
sample 56:
time = 934266
flags = 0
data = length 3, hash D5C0
sample 57:
time = 950950
flags = 0
data = length 894, hash 7319F313
sample 58:
time = 967633
flags = 0
data = length 3, hash D610
sample 59:
time = 984316
flags = 536870912
data = length 233, hash DE4DBE67
track 1:
total output bytes = 16638
sample count = 44
format 0:
id = 2
sampleMimeType = audio/mp4a-latm
codecs = mp4a.40.2
maxInputSize = 441
channelCount = 2
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: value=Lavf58.76.100]
initializationData:
data = length 16, hash CAA21BBF
sample 0:
time = 0
flags = 1
data = length 393, hash 706D1B6F
sample 1:
time = 23219
flags = 1
data = length 400, hash B48107D1
sample 2:
time = 46439
flags = 1
data = length 398, hash E5F4E9C1
sample 3:
time = 69659
flags = 1
data = length 400, hash 4317B40D
sample 4:
time = 92879
flags = 1
data = length 403, hash CB949D88
sample 5:
time = 116099
flags = 1
data = length 411, hash 616C8F82
sample 6:
time = 139319
flags = 1
data = length 392, hash 3BA50F06
sample 7:
time = 162539
flags = 1
data = length 401, hash 1C62F82C
sample 8:
time = 185759
flags = 1
data = length 400, hash 180FEA17
sample 9:
time = 208979
flags = 1
data = length 378, hash 2F6B0AE6
sample 10:
time = 232199
flags = 1
data = length 375, hash 6AE86D08
sample 11:
time = 255419
flags = 1
data = length 375, hash EF2FD9CC
sample 12:
time = 278639
flags = 1
data = length 374, hash 97B83243
sample 13:
time = 301859
flags = 1
data = length 382, hash 8BD6191C
sample 14:
time = 325079
flags = 1
data = length 393, hash D5F53221
sample 15:
time = 348299
flags = 1
data = length 375, hash 2437C16B
sample 16:
time = 371519
flags = 1
data = length 372, hash EE50108B
sample 17:
time = 394739
flags = 1
data = length 364, hash 9952E0FE
sample 18:
time = 417959
flags = 1
data = length 387, hash C4EC0E45
sample 19:
time = 441179
flags = 1
data = length 384, hash 7DFB424F
sample 20:
time = 464399
flags = 1
data = length 370, hash 28619E43
sample 21:
time = 487619
flags = 1
data = length 373, hash 440EB9E8
sample 22:
time = 510839
flags = 1
data = length 363, hash B7655913
sample 23:
time = 534058
flags = 1
data = length 362, hash A0690E92
sample 24:
time = 557278
flags = 1
data = length 377, hash 41BF1244
sample 25:
time = 580498
flags = 1
data = length 371, hash EE4124CD
sample 26:
time = 603718
flags = 1
data = length 372, hash 7A512168
sample 27:
time = 626938
flags = 1
data = length 370, hash ED00D55C
sample 28:
time = 650158
flags = 1
data = length 356, hash 43F4FFCA
sample 29:
time = 673378
flags = 1
data = length 373, hash 1950F38C
sample 30:
time = 696598
flags = 1
data = length 366, hash 5F426A7A
sample 31:
time = 719818
flags = 1
data = length 371, hash FCC286D2
sample 32:
time = 743038
flags = 1
data = length 366, hash CF6F5DD9
sample 33:
time = 766258
flags = 1
data = length 386, hash 83E3B1E6
sample 34:
time = 789478
flags = 1
data = length 369, hash 5BDF670B
sample 35:
time = 812698
flags = 1
data = length 367, hash DC847E4D
sample 36:
time = 835918
flags = 1
data = length 366, hash 8AC0C55C
sample 37:
time = 859138
flags = 1
data = length 375, hash C0D4BF4
sample 38:
time = 882358
flags = 1
data = length 367, hash 6C5284E2
sample 39:
time = 905578
flags = 1
data = length 380, hash BDFAB187
sample 40:
time = 928798
flags = 1
data = length 372, hash CEF87EB6
sample 41:
time = 952018
flags = 1
data = length 369, hash B0FF049B
sample 42:
time = 975238
flags = 1
data = length 366, hash BADD46E6
sample 43:
time = 998458
flags = 536870913
data = length 374, hash 6102A531
tracksEnded = true

View File

@ -0,0 +1,398 @@
seekMap:
isSeekable = true
duration = 1022000
getPosition(0) = [[timeUs=0, position=48]]
getPosition(1) = [[timeUs=0, position=48]]
getPosition(511000) = [[timeUs=0, position=48]]
getPosition(1022000) = [[timeUs=0, position=48]]
numberOfTracks = 2
track 0:
total output bytes = 266091
sample count = 60
format 0:
id = 1
sampleMimeType = video/av01
maxInputSize = 144656
width = 1920
height = 1080
frameRate = 59.940056
colorInfo:
colorSpace = 6
colorRange = 2
colorTransfer = 6
hdrStaticInfo = length 25, hash 423AFC35
sample 0:
time = 0
flags = 1
data = length 144626, hash 7C021D5F
sample 1:
time = 16683
flags = 0
data = length 4018, hash FA5E79FA
sample 2:
time = 33366
flags = 0
data = length 3, hash D5E0
sample 3:
time = 50050
flags = 0
data = length 144, hash 4A868A2F
sample 4:
time = 66733
flags = 0
data = length 3, hash D5D0
sample 5:
time = 83416
flags = 0
data = length 342, hash 5A2E1C3C
sample 6:
time = 100100
flags = 0
data = length 3, hash D610
sample 7:
time = 116783
flags = 0
data = length 173, hash CFE014B3
sample 8:
time = 133466
flags = 0
data = length 3, hash D5C0
sample 9:
time = 150150
flags = 0
data = length 655, hash 3A7738B6
sample 10:
time = 166833
flags = 0
data = length 3, hash D5D0
sample 11:
time = 183516
flags = 0
data = length 208, hash E7D2035A
sample 12:
time = 200200
flags = 0
data = length 3, hash D600
sample 13:
time = 216883
flags = 0
data = length 385, hash 4D025B28
sample 14:
time = 233566
flags = 0
data = length 3, hash D5E0
sample 15:
time = 250250
flags = 0
data = length 192, hash CC0BD164
sample 16:
time = 266933
flags = 0
data = length 3, hash D5B0
sample 17:
time = 283616
flags = 0
data = length 36989, hash C213D35E
sample 18:
time = 300300
flags = 0
data = length 3, hash D5C0
sample 19:
time = 316983
flags = 0
data = length 213, hash 2BBA39D3
sample 20:
time = 333666
flags = 0
data = length 3, hash D600
sample 21:
time = 350350
flags = 0
data = length 474, hash 83D66E3F
sample 22:
time = 367033
flags = 0
data = length 3, hash D5E0
sample 23:
time = 383716
flags = 0
data = length 246, hash CF512AF0
sample 24:
time = 400400
flags = 0
data = length 3, hash D610
sample 25:
time = 417083
flags = 0
data = length 880, hash 8BFDE683
sample 26:
time = 433766
flags = 0
data = length 3, hash D5C0
sample 27:
time = 450450
flags = 0
data = length 246, hash 16B70503
sample 28:
time = 467133
flags = 0
data = length 3, hash D600
sample 29:
time = 483816
flags = 0
data = length 402, hash 51B5FAC9
sample 30:
time = 500500
flags = 0
data = length 3, hash D610
sample 31:
time = 517183
flags = 0
data = length 199, hash 12005069
sample 32:
time = 533866
flags = 0
data = length 3, hash D5D0
sample 33:
time = 550550
flags = 0
data = length 32362, hash F9FE31F7
sample 34:
time = 567233
flags = 0
data = length 3, hash D5E0
sample 35:
time = 583916
flags = 0
data = length 215, hash 2D4E3DC4
sample 36:
time = 600600
flags = 0
data = length 3, hash D600
sample 37:
time = 617283
flags = 0
data = length 450, hash C1A95E3
sample 38:
time = 633966
flags = 0
data = length 3, hash D610
sample 39:
time = 650650
flags = 0
data = length 221, hash 964386D9
sample 40:
time = 667333
flags = 0
data = length 3, hash D5F0
sample 41:
time = 684016
flags = 0
data = length 853, hash 2B9E0AAF
sample 42:
time = 700700
flags = 0
data = length 3, hash D5E0
sample 43:
time = 717383
flags = 0
data = length 236, hash 7E84BBAE
sample 44:
time = 734066
flags = 0
data = length 3, hash D600
sample 45:
time = 750750
flags = 0
data = length 419, hash 619235F2
sample 46:
time = 767433
flags = 0
data = length 3, hash D5F0
sample 47:
time = 784116
flags = 0
data = length 194, hash D386F352
sample 48:
time = 800800
flags = 0
data = length 3, hash D5A0
sample 49:
time = 817483
flags = 0
data = length 38679, hash 17E63FCD
sample 50:
time = 834166
flags = 0
data = length 3, hash D610
sample 51:
time = 850850
flags = 0
data = length 183, hash C8DD98E2
sample 52:
time = 867533
flags = 0
data = length 3, hash D600
sample 53:
time = 884216
flags = 0
data = length 457, hash 2B4E3476
sample 54:
time = 900900
flags = 0
data = length 3, hash D5F0
sample 55:
time = 917583
flags = 0
data = length 216, hash 7233540A
sample 56:
time = 934266
flags = 0
data = length 3, hash D5C0
sample 57:
time = 950950
flags = 0
data = length 894, hash 7319F313
sample 58:
time = 967633
flags = 0
data = length 3, hash D610
sample 59:
time = 984316
flags = 536870912
data = length 233, hash DE4DBE67
track 1:
total output bytes = 11156
sample count = 30
format 0:
id = 2
sampleMimeType = audio/mp4a-latm
codecs = mp4a.40.2
maxInputSize = 441
channelCount = 2
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: value=Lavf58.76.100]
initializationData:
data = length 16, hash CAA21BBF
sample 0:
time = 325079
flags = 1
data = length 393, hash D5F53221
sample 1:
time = 348299
flags = 1
data = length 375, hash 2437C16B
sample 2:
time = 371519
flags = 1
data = length 372, hash EE50108B
sample 3:
time = 394739
flags = 1
data = length 364, hash 9952E0FE
sample 4:
time = 417959
flags = 1
data = length 387, hash C4EC0E45
sample 5:
time = 441179
flags = 1
data = length 384, hash 7DFB424F
sample 6:
time = 464399
flags = 1
data = length 370, hash 28619E43
sample 7:
time = 487619
flags = 1
data = length 373, hash 440EB9E8
sample 8:
time = 510839
flags = 1
data = length 363, hash B7655913
sample 9:
time = 534058
flags = 1
data = length 362, hash A0690E92
sample 10:
time = 557278
flags = 1
data = length 377, hash 41BF1244
sample 11:
time = 580498
flags = 1
data = length 371, hash EE4124CD
sample 12:
time = 603718
flags = 1
data = length 372, hash 7A512168
sample 13:
time = 626938
flags = 1
data = length 370, hash ED00D55C
sample 14:
time = 650158
flags = 1
data = length 356, hash 43F4FFCA
sample 15:
time = 673378
flags = 1
data = length 373, hash 1950F38C
sample 16:
time = 696598
flags = 1
data = length 366, hash 5F426A7A
sample 17:
time = 719818
flags = 1
data = length 371, hash FCC286D2
sample 18:
time = 743038
flags = 1
data = length 366, hash CF6F5DD9
sample 19:
time = 766258
flags = 1
data = length 386, hash 83E3B1E6
sample 20:
time = 789478
flags = 1
data = length 369, hash 5BDF670B
sample 21:
time = 812698
flags = 1
data = length 367, hash DC847E4D
sample 22:
time = 835918
flags = 1
data = length 366, hash 8AC0C55C
sample 23:
time = 859138
flags = 1
data = length 375, hash C0D4BF4
sample 24:
time = 882358
flags = 1
data = length 367, hash 6C5284E2
sample 25:
time = 905578
flags = 1
data = length 380, hash BDFAB187
sample 26:
time = 928798
flags = 1
data = length 372, hash CEF87EB6
sample 27:
time = 952018
flags = 1
data = length 369, hash B0FF049B
sample 28:
time = 975238
flags = 1
data = length 366, hash BADD46E6
sample 29:
time = 998458
flags = 536870913
data = length 374, hash 6102A531
tracksEnded = true

View File

@ -0,0 +1,338 @@
seekMap:
isSeekable = true
duration = 1022000
getPosition(0) = [[timeUs=0, position=48]]
getPosition(1) = [[timeUs=0, position=48]]
getPosition(511000) = [[timeUs=0, position=48]]
getPosition(1022000) = [[timeUs=0, position=48]]
numberOfTracks = 2
track 0:
total output bytes = 266091
sample count = 60
format 0:
id = 1
sampleMimeType = video/av01
maxInputSize = 144656
width = 1920
height = 1080
frameRate = 59.940056
colorInfo:
colorSpace = 6
colorRange = 2
colorTransfer = 6
hdrStaticInfo = length 25, hash 423AFC35
sample 0:
time = 0
flags = 1
data = length 144626, hash 7C021D5F
sample 1:
time = 16683
flags = 0
data = length 4018, hash FA5E79FA
sample 2:
time = 33366
flags = 0
data = length 3, hash D5E0
sample 3:
time = 50050
flags = 0
data = length 144, hash 4A868A2F
sample 4:
time = 66733
flags = 0
data = length 3, hash D5D0
sample 5:
time = 83416
flags = 0
data = length 342, hash 5A2E1C3C
sample 6:
time = 100100
flags = 0
data = length 3, hash D610
sample 7:
time = 116783
flags = 0
data = length 173, hash CFE014B3
sample 8:
time = 133466
flags = 0
data = length 3, hash D5C0
sample 9:
time = 150150
flags = 0
data = length 655, hash 3A7738B6
sample 10:
time = 166833
flags = 0
data = length 3, hash D5D0
sample 11:
time = 183516
flags = 0
data = length 208, hash E7D2035A
sample 12:
time = 200200
flags = 0
data = length 3, hash D600
sample 13:
time = 216883
flags = 0
data = length 385, hash 4D025B28
sample 14:
time = 233566
flags = 0
data = length 3, hash D5E0
sample 15:
time = 250250
flags = 0
data = length 192, hash CC0BD164
sample 16:
time = 266933
flags = 0
data = length 3, hash D5B0
sample 17:
time = 283616
flags = 0
data = length 36989, hash C213D35E
sample 18:
time = 300300
flags = 0
data = length 3, hash D5C0
sample 19:
time = 316983
flags = 0
data = length 213, hash 2BBA39D3
sample 20:
time = 333666
flags = 0
data = length 3, hash D600
sample 21:
time = 350350
flags = 0
data = length 474, hash 83D66E3F
sample 22:
time = 367033
flags = 0
data = length 3, hash D5E0
sample 23:
time = 383716
flags = 0
data = length 246, hash CF512AF0
sample 24:
time = 400400
flags = 0
data = length 3, hash D610
sample 25:
time = 417083
flags = 0
data = length 880, hash 8BFDE683
sample 26:
time = 433766
flags = 0
data = length 3, hash D5C0
sample 27:
time = 450450
flags = 0
data = length 246, hash 16B70503
sample 28:
time = 467133
flags = 0
data = length 3, hash D600
sample 29:
time = 483816
flags = 0
data = length 402, hash 51B5FAC9
sample 30:
time = 500500
flags = 0
data = length 3, hash D610
sample 31:
time = 517183
flags = 0
data = length 199, hash 12005069
sample 32:
time = 533866
flags = 0
data = length 3, hash D5D0
sample 33:
time = 550550
flags = 0
data = length 32362, hash F9FE31F7
sample 34:
time = 567233
flags = 0
data = length 3, hash D5E0
sample 35:
time = 583916
flags = 0
data = length 215, hash 2D4E3DC4
sample 36:
time = 600600
flags = 0
data = length 3, hash D600
sample 37:
time = 617283
flags = 0
data = length 450, hash C1A95E3
sample 38:
time = 633966
flags = 0
data = length 3, hash D610
sample 39:
time = 650650
flags = 0
data = length 221, hash 964386D9
sample 40:
time = 667333
flags = 0
data = length 3, hash D5F0
sample 41:
time = 684016
flags = 0
data = length 853, hash 2B9E0AAF
sample 42:
time = 700700
flags = 0
data = length 3, hash D5E0
sample 43:
time = 717383
flags = 0
data = length 236, hash 7E84BBAE
sample 44:
time = 734066
flags = 0
data = length 3, hash D600
sample 45:
time = 750750
flags = 0
data = length 419, hash 619235F2
sample 46:
time = 767433
flags = 0
data = length 3, hash D5F0
sample 47:
time = 784116
flags = 0
data = length 194, hash D386F352
sample 48:
time = 800800
flags = 0
data = length 3, hash D5A0
sample 49:
time = 817483
flags = 0
data = length 38679, hash 17E63FCD
sample 50:
time = 834166
flags = 0
data = length 3, hash D610
sample 51:
time = 850850
flags = 0
data = length 183, hash C8DD98E2
sample 52:
time = 867533
flags = 0
data = length 3, hash D600
sample 53:
time = 884216
flags = 0
data = length 457, hash 2B4E3476
sample 54:
time = 900900
flags = 0
data = length 3, hash D5F0
sample 55:
time = 917583
flags = 0
data = length 216, hash 7233540A
sample 56:
time = 934266
flags = 0
data = length 3, hash D5C0
sample 57:
time = 950950
flags = 0
data = length 894, hash 7319F313
sample 58:
time = 967633
flags = 0
data = length 3, hash D610
sample 59:
time = 984316
flags = 536870912
data = length 233, hash DE4DBE67
track 1:
total output bytes = 5567
sample count = 15
format 0:
id = 2
sampleMimeType = audio/mp4a-latm
codecs = mp4a.40.2
maxInputSize = 441
channelCount = 2
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: value=Lavf58.76.100]
initializationData:
data = length 16, hash CAA21BBF
sample 0:
time = 673378
flags = 1
data = length 373, hash 1950F38C
sample 1:
time = 696598
flags = 1
data = length 366, hash 5F426A7A
sample 2:
time = 719818
flags = 1
data = length 371, hash FCC286D2
sample 3:
time = 743038
flags = 1
data = length 366, hash CF6F5DD9
sample 4:
time = 766258
flags = 1
data = length 386, hash 83E3B1E6
sample 5:
time = 789478
flags = 1
data = length 369, hash 5BDF670B
sample 6:
time = 812698
flags = 1
data = length 367, hash DC847E4D
sample 7:
time = 835918
flags = 1
data = length 366, hash 8AC0C55C
sample 8:
time = 859138
flags = 1
data = length 375, hash C0D4BF4
sample 9:
time = 882358
flags = 1
data = length 367, hash 6C5284E2
sample 10:
time = 905578
flags = 1
data = length 380, hash BDFAB187
sample 11:
time = 928798
flags = 1
data = length 372, hash CEF87EB6
sample 12:
time = 952018
flags = 1
data = length 369, hash B0FF049B
sample 13:
time = 975238
flags = 1
data = length 366, hash BADD46E6
sample 14:
time = 998458
flags = 536870913
data = length 374, hash 6102A531
tracksEnded = true

View File

@ -0,0 +1,282 @@
seekMap:
isSeekable = true
duration = 1022000
getPosition(0) = [[timeUs=0, position=48]]
getPosition(1) = [[timeUs=0, position=48]]
getPosition(511000) = [[timeUs=0, position=48]]
getPosition(1022000) = [[timeUs=0, position=48]]
numberOfTracks = 2
track 0:
total output bytes = 266091
sample count = 60
format 0:
id = 1
sampleMimeType = video/av01
maxInputSize = 144656
width = 1920
height = 1080
frameRate = 59.940056
colorInfo:
colorSpace = 6
colorRange = 2
colorTransfer = 6
hdrStaticInfo = length 25, hash 423AFC35
sample 0:
time = 0
flags = 1
data = length 144626, hash 7C021D5F
sample 1:
time = 16683
flags = 0
data = length 4018, hash FA5E79FA
sample 2:
time = 33366
flags = 0
data = length 3, hash D5E0
sample 3:
time = 50050
flags = 0
data = length 144, hash 4A868A2F
sample 4:
time = 66733
flags = 0
data = length 3, hash D5D0
sample 5:
time = 83416
flags = 0
data = length 342, hash 5A2E1C3C
sample 6:
time = 100100
flags = 0
data = length 3, hash D610
sample 7:
time = 116783
flags = 0
data = length 173, hash CFE014B3
sample 8:
time = 133466
flags = 0
data = length 3, hash D5C0
sample 9:
time = 150150
flags = 0
data = length 655, hash 3A7738B6
sample 10:
time = 166833
flags = 0
data = length 3, hash D5D0
sample 11:
time = 183516
flags = 0
data = length 208, hash E7D2035A
sample 12:
time = 200200
flags = 0
data = length 3, hash D600
sample 13:
time = 216883
flags = 0
data = length 385, hash 4D025B28
sample 14:
time = 233566
flags = 0
data = length 3, hash D5E0
sample 15:
time = 250250
flags = 0
data = length 192, hash CC0BD164
sample 16:
time = 266933
flags = 0
data = length 3, hash D5B0
sample 17:
time = 283616
flags = 0
data = length 36989, hash C213D35E
sample 18:
time = 300300
flags = 0
data = length 3, hash D5C0
sample 19:
time = 316983
flags = 0
data = length 213, hash 2BBA39D3
sample 20:
time = 333666
flags = 0
data = length 3, hash D600
sample 21:
time = 350350
flags = 0
data = length 474, hash 83D66E3F
sample 22:
time = 367033
flags = 0
data = length 3, hash D5E0
sample 23:
time = 383716
flags = 0
data = length 246, hash CF512AF0
sample 24:
time = 400400
flags = 0
data = length 3, hash D610
sample 25:
time = 417083
flags = 0
data = length 880, hash 8BFDE683
sample 26:
time = 433766
flags = 0
data = length 3, hash D5C0
sample 27:
time = 450450
flags = 0
data = length 246, hash 16B70503
sample 28:
time = 467133
flags = 0
data = length 3, hash D600
sample 29:
time = 483816
flags = 0
data = length 402, hash 51B5FAC9
sample 30:
time = 500500
flags = 0
data = length 3, hash D610
sample 31:
time = 517183
flags = 0
data = length 199, hash 12005069
sample 32:
time = 533866
flags = 0
data = length 3, hash D5D0
sample 33:
time = 550550
flags = 0
data = length 32362, hash F9FE31F7
sample 34:
time = 567233
flags = 0
data = length 3, hash D5E0
sample 35:
time = 583916
flags = 0
data = length 215, hash 2D4E3DC4
sample 36:
time = 600600
flags = 0
data = length 3, hash D600
sample 37:
time = 617283
flags = 0
data = length 450, hash C1A95E3
sample 38:
time = 633966
flags = 0
data = length 3, hash D610
sample 39:
time = 650650
flags = 0
data = length 221, hash 964386D9
sample 40:
time = 667333
flags = 0
data = length 3, hash D5F0
sample 41:
time = 684016
flags = 0
data = length 853, hash 2B9E0AAF
sample 42:
time = 700700
flags = 0
data = length 3, hash D5E0
sample 43:
time = 717383
flags = 0
data = length 236, hash 7E84BBAE
sample 44:
time = 734066
flags = 0
data = length 3, hash D600
sample 45:
time = 750750
flags = 0
data = length 419, hash 619235F2
sample 46:
time = 767433
flags = 0
data = length 3, hash D5F0
sample 47:
time = 784116
flags = 0
data = length 194, hash D386F352
sample 48:
time = 800800
flags = 0
data = length 3, hash D5A0
sample 49:
time = 817483
flags = 0
data = length 38679, hash 17E63FCD
sample 50:
time = 834166
flags = 0
data = length 3, hash D610
sample 51:
time = 850850
flags = 0
data = length 183, hash C8DD98E2
sample 52:
time = 867533
flags = 0
data = length 3, hash D600
sample 53:
time = 884216
flags = 0
data = length 457, hash 2B4E3476
sample 54:
time = 900900
flags = 0
data = length 3, hash D5F0
sample 55:
time = 917583
flags = 0
data = length 216, hash 7233540A
sample 56:
time = 934266
flags = 0
data = length 3, hash D5C0
sample 57:
time = 950950
flags = 0
data = length 894, hash 7319F313
sample 58:
time = 967633
flags = 0
data = length 3, hash D610
sample 59:
time = 984316
flags = 536870912
data = length 233, hash DE4DBE67
track 1:
total output bytes = 374
sample count = 1
format 0:
id = 2
sampleMimeType = audio/mp4a-latm
codecs = mp4a.40.2
maxInputSize = 441
channelCount = 2
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: value=Lavf58.76.100]
initializationData:
data = length 16, hash CAA21BBF
sample 0:
time = 998458
flags = 536870913
data = length 374, hash 6102A531
tracksEnded = true

View File

@ -0,0 +1,454 @@
seekMap:
isSeekable = true
duration = 1022000
getPosition(0) = [[timeUs=0, position=48]]
getPosition(1) = [[timeUs=0, position=48]]
getPosition(511000) = [[timeUs=0, position=48]]
getPosition(1022000) = [[timeUs=0, position=48]]
numberOfTracks = 2
track 0:
total output bytes = 266091
sample count = 60
format 0:
id = 1
sampleMimeType = video/av01
maxInputSize = 144656
width = 1920
height = 1080
frameRate = 59.940056
colorInfo:
colorSpace = 6
colorRange = 2
colorTransfer = 6
hdrStaticInfo = length 25, hash 423AFC35
sample 0:
time = 0
flags = 1
data = length 144626, hash 7C021D5F
sample 1:
time = 16683
flags = 0
data = length 4018, hash FA5E79FA
sample 2:
time = 33366
flags = 0
data = length 3, hash D5E0
sample 3:
time = 50050
flags = 0
data = length 144, hash 4A868A2F
sample 4:
time = 66733
flags = 0
data = length 3, hash D5D0
sample 5:
time = 83416
flags = 0
data = length 342, hash 5A2E1C3C
sample 6:
time = 100100
flags = 0
data = length 3, hash D610
sample 7:
time = 116783
flags = 0
data = length 173, hash CFE014B3
sample 8:
time = 133466
flags = 0
data = length 3, hash D5C0
sample 9:
time = 150150
flags = 0
data = length 655, hash 3A7738B6
sample 10:
time = 166833
flags = 0
data = length 3, hash D5D0
sample 11:
time = 183516
flags = 0
data = length 208, hash E7D2035A
sample 12:
time = 200200
flags = 0
data = length 3, hash D600
sample 13:
time = 216883
flags = 0
data = length 385, hash 4D025B28
sample 14:
time = 233566
flags = 0
data = length 3, hash D5E0
sample 15:
time = 250250
flags = 0
data = length 192, hash CC0BD164
sample 16:
time = 266933
flags = 0
data = length 3, hash D5B0
sample 17:
time = 283616
flags = 0
data = length 36989, hash C213D35E
sample 18:
time = 300300
flags = 0
data = length 3, hash D5C0
sample 19:
time = 316983
flags = 0
data = length 213, hash 2BBA39D3
sample 20:
time = 333666
flags = 0
data = length 3, hash D600
sample 21:
time = 350350
flags = 0
data = length 474, hash 83D66E3F
sample 22:
time = 367033
flags = 0
data = length 3, hash D5E0
sample 23:
time = 383716
flags = 0
data = length 246, hash CF512AF0
sample 24:
time = 400400
flags = 0
data = length 3, hash D610
sample 25:
time = 417083
flags = 0
data = length 880, hash 8BFDE683
sample 26:
time = 433766
flags = 0
data = length 3, hash D5C0
sample 27:
time = 450450
flags = 0
data = length 246, hash 16B70503
sample 28:
time = 467133
flags = 0
data = length 3, hash D600
sample 29:
time = 483816
flags = 0
data = length 402, hash 51B5FAC9
sample 30:
time = 500500
flags = 0
data = length 3, hash D610
sample 31:
time = 517183
flags = 0
data = length 199, hash 12005069
sample 32:
time = 533866
flags = 0
data = length 3, hash D5D0
sample 33:
time = 550550
flags = 0
data = length 32362, hash F9FE31F7
sample 34:
time = 567233
flags = 0
data = length 3, hash D5E0
sample 35:
time = 583916
flags = 0
data = length 215, hash 2D4E3DC4
sample 36:
time = 600600
flags = 0
data = length 3, hash D600
sample 37:
time = 617283
flags = 0
data = length 450, hash C1A95E3
sample 38:
time = 633966
flags = 0
data = length 3, hash D610
sample 39:
time = 650650
flags = 0
data = length 221, hash 964386D9
sample 40:
time = 667333
flags = 0
data = length 3, hash D5F0
sample 41:
time = 684016
flags = 0
data = length 853, hash 2B9E0AAF
sample 42:
time = 700700
flags = 0
data = length 3, hash D5E0
sample 43:
time = 717383
flags = 0
data = length 236, hash 7E84BBAE
sample 44:
time = 734066
flags = 0
data = length 3, hash D600
sample 45:
time = 750750
flags = 0
data = length 419, hash 619235F2
sample 46:
time = 767433
flags = 0
data = length 3, hash D5F0
sample 47:
time = 784116
flags = 0
data = length 194, hash D386F352
sample 48:
time = 800800
flags = 0
data = length 3, hash D5A0
sample 49:
time = 817483
flags = 0
data = length 38679, hash 17E63FCD
sample 50:
time = 834166
flags = 0
data = length 3, hash D610
sample 51:
time = 850850
flags = 0
data = length 183, hash C8DD98E2
sample 52:
time = 867533
flags = 0
data = length 3, hash D600
sample 53:
time = 884216
flags = 0
data = length 457, hash 2B4E3476
sample 54:
time = 900900
flags = 0
data = length 3, hash D5F0
sample 55:
time = 917583
flags = 0
data = length 216, hash 7233540A
sample 56:
time = 934266
flags = 0
data = length 3, hash D5C0
sample 57:
time = 950950
flags = 0
data = length 894, hash 7319F313
sample 58:
time = 967633
flags = 0
data = length 3, hash D610
sample 59:
time = 984316
flags = 536870912
data = length 233, hash DE4DBE67
track 1:
total output bytes = 16638
sample count = 44
format 0:
id = 2
sampleMimeType = audio/mp4a-latm
codecs = mp4a.40.2
maxInputSize = 441
channelCount = 2
sampleRate = 44100
language = und
metadata = entries=[TSSE: description=null: value=Lavf58.76.100]
initializationData:
data = length 16, hash CAA21BBF
sample 0:
time = 0
flags = 1
data = length 393, hash 706D1B6F
sample 1:
time = 23219
flags = 1
data = length 400, hash B48107D1
sample 2:
time = 46439
flags = 1
data = length 398, hash E5F4E9C1
sample 3:
time = 69659
flags = 1
data = length 400, hash 4317B40D
sample 4:
time = 92879
flags = 1
data = length 403, hash CB949D88
sample 5:
time = 116099
flags = 1
data = length 411, hash 616C8F82
sample 6:
time = 139319
flags = 1
data = length 392, hash 3BA50F06
sample 7:
time = 162539
flags = 1
data = length 401, hash 1C62F82C
sample 8:
time = 185759
flags = 1
data = length 400, hash 180FEA17
sample 9:
time = 208979
flags = 1
data = length 378, hash 2F6B0AE6
sample 10:
time = 232199
flags = 1
data = length 375, hash 6AE86D08
sample 11:
time = 255419
flags = 1
data = length 375, hash EF2FD9CC
sample 12:
time = 278639
flags = 1
data = length 374, hash 97B83243
sample 13:
time = 301859
flags = 1
data = length 382, hash 8BD6191C
sample 14:
time = 325079
flags = 1
data = length 393, hash D5F53221
sample 15:
time = 348299
flags = 1
data = length 375, hash 2437C16B
sample 16:
time = 371519
flags = 1
data = length 372, hash EE50108B
sample 17:
time = 394739
flags = 1
data = length 364, hash 9952E0FE
sample 18:
time = 417959
flags = 1
data = length 387, hash C4EC0E45
sample 19:
time = 441179
flags = 1
data = length 384, hash 7DFB424F
sample 20:
time = 464399
flags = 1
data = length 370, hash 28619E43
sample 21:
time = 487619
flags = 1
data = length 373, hash 440EB9E8
sample 22:
time = 510839
flags = 1
data = length 363, hash B7655913
sample 23:
time = 534058
flags = 1
data = length 362, hash A0690E92
sample 24:
time = 557278
flags = 1
data = length 377, hash 41BF1244
sample 25:
time = 580498
flags = 1
data = length 371, hash EE4124CD
sample 26:
time = 603718
flags = 1
data = length 372, hash 7A512168
sample 27:
time = 626938
flags = 1
data = length 370, hash ED00D55C
sample 28:
time = 650158
flags = 1
data = length 356, hash 43F4FFCA
sample 29:
time = 673378
flags = 1
data = length 373, hash 1950F38C
sample 30:
time = 696598
flags = 1
data = length 366, hash 5F426A7A
sample 31:
time = 719818
flags = 1
data = length 371, hash FCC286D2
sample 32:
time = 743038
flags = 1
data = length 366, hash CF6F5DD9
sample 33:
time = 766258
flags = 1
data = length 386, hash 83E3B1E6
sample 34:
time = 789478
flags = 1
data = length 369, hash 5BDF670B
sample 35:
time = 812698
flags = 1
data = length 367, hash DC847E4D
sample 36:
time = 835918
flags = 1
data = length 366, hash 8AC0C55C
sample 37:
time = 859138
flags = 1
data = length 375, hash C0D4BF4
sample 38:
time = 882358
flags = 1
data = length 367, hash 6C5284E2
sample 39:
time = 905578
flags = 1
data = length 380, hash BDFAB187
sample 40:
time = 928798
flags = 1
data = length 372, hash CEF87EB6
sample 41:
time = 952018
flags = 1
data = length 369, hash B0FF049B
sample 42:
time = 975238
flags = 1
data = length 366, hash BADD46E6
sample 43:
time = 998458
flags = 536870913
data = length 374, hash 6102A531
tracksEnded = true