Fix rounding error in fMP4 presentation time calculation

The presentation time in fMP4 is calculated by adding and subtracting
3 values. All 3 values are currently converted to microseconds first
before the calculation, leading to rounding errors. The rounding errors
can be avoided by doing the conversion to microseconds as the last step.

For example:
In timescale 96000:  8008+8008-16016 = 0
Rounding to us first: 83416+83416-166833=-1

#minor-release

PiperOrigin-RevId: 406809844
This commit is contained in:
tonihei 2021-11-01 13:19:35 +00:00 committed by Ian Baker
parent 7b84d6b051
commit d1e13b629d
15 changed files with 142 additions and 151 deletions

View File

@ -1001,21 +1001,18 @@ public class FragmentedMp4Extractor implements Extractor {
// Offset to the entire video timeline. In the presence of B-frames this is usually used to
// ensure that the first frame's presentation timestamp is zero.
long edtsOffsetUs = 0;
long edtsOffset = 0;
// Currently we only support a single edit that moves the entire media timeline (indicated by
// duration == 0). Other uses of edit lists are uncommon and unsupported.
if (track.editListDurations != null
&& track.editListDurations.length == 1
&& track.editListDurations[0] == 0) {
edtsOffsetUs =
Util.scaleLargeTimestamp(
castNonNull(track.editListMediaTimes)[0], C.MICROS_PER_SECOND, track.timescale);
edtsOffset = castNonNull(track.editListMediaTimes)[0];
}
int[] sampleSizeTable = fragment.sampleSizeTable;
int[] sampleCompositionTimeOffsetUsTable = fragment.sampleCompositionTimeOffsetUsTable;
long[] sampleDecodingTimeUsTable = fragment.sampleDecodingTimeUsTable;
long[] samplePresentationTimesUs = fragment.samplePresentationTimesUs;
boolean[] sampleIsSyncFrameTable = fragment.sampleIsSyncFrameTable;
boolean workaroundEveryVideoFrameIsSyncFrame =
@ -1035,22 +1032,20 @@ public class FragmentedMp4Extractor implements Extractor {
sampleFlagsPresent
? trun.readInt()
: (i == 0 && firstSampleFlagsPresent) ? firstSampleFlags : defaultSampleValues.flags;
int sampleCompositionTimeOffset = 0;
if (sampleCompositionTimeOffsetsPresent) {
// The BMFF spec (ISO 14496-12) states that sample offsets should be unsigned integers in
// version 0 trun boxes, however a significant number of streams violate the spec and use
// signed integers instead. It's safe to always decode sample offsets as signed integers
// here, because unsigned integers will still be parsed correctly (unless their top bit is
// set, which is never true in practice because sample offsets are always small).
int sampleOffset = trun.readInt();
sampleCompositionTimeOffsetUsTable[i] =
(int) ((sampleOffset * C.MICROS_PER_SECOND) / timescale);
} else {
sampleCompositionTimeOffsetUsTable[i] = 0;
sampleCompositionTimeOffset = trun.readInt();
}
sampleDecodingTimeUsTable[i] =
Util.scaleLargeTimestamp(cumulativeTime, C.MICROS_PER_SECOND, timescale) - edtsOffsetUs;
long samplePresentationTime = cumulativeTime + sampleCompositionTimeOffset - edtsOffset;
samplePresentationTimesUs[i] =
Util.scaleLargeTimestamp(samplePresentationTime, C.MICROS_PER_SECOND, timescale);
if (!fragment.nextFragmentDecodeTimeIncludesMoov) {
sampleDecodingTimeUsTable[i] += trackBundle.moovSampleTable.durationUs;
samplePresentationTimesUs[i] += trackBundle.moovSampleTable.durationUs;
}
sampleSizeTable[i] = sampleSize;
sampleIsSyncFrameTable[i] =

View File

@ -42,10 +42,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
public int[] trunLength;
/** The size of each sample in the fragment. */
public int[] sampleSizeTable;
/** The composition time offset of each sample in the fragment, in microseconds. */
public int[] sampleCompositionTimeOffsetUsTable;
/** The decoding time of each sample in the fragment, in microseconds. */
public long[] sampleDecodingTimeUsTable;
/** The presentation time of each sample in the fragment, in microseconds. */
public long[] samplePresentationTimesUs;
/** Indicates which samples are sync frames. */
public boolean[] sampleIsSyncFrameTable;
/** Whether the fragment defines encryption data. */
@ -80,8 +78,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
trunDataPosition = new long[0];
trunLength = new int[0];
sampleSizeTable = new int[0];
sampleCompositionTimeOffsetUsTable = new int[0];
sampleDecodingTimeUsTable = new long[0];
samplePresentationTimesUs = new long[0];
sampleIsSyncFrameTable = new boolean[0];
sampleHasSubsampleEncryptionTable = new boolean[0];
sampleEncryptionData = new ParsableByteArray();
@ -123,8 +120,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
// likely. The choice of 25% is relatively arbitrary.
int tableSize = (sampleCount * 125) / 100;
sampleSizeTable = new int[tableSize];
sampleCompositionTimeOffsetUsTable = new int[tableSize];
sampleDecodingTimeUsTable = new long[tableSize];
samplePresentationTimesUs = new long[tableSize];
sampleIsSyncFrameTable = new boolean[tableSize];
sampleHasSubsampleEncryptionTable = new boolean[tableSize];
}
@ -173,7 +169,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
* @return The presentation timestamps of this sample in microseconds.
*/
public long getSamplePresentationTimeUs(int index) {
return sampleDecodingTimeUsTable[index] + sampleCompositionTimeOffsetUsTable[index];
return samplePresentationTimesUs[index];
}
/** Returns whether the sample at the given index has a subsample encryption table. */

View File

@ -20,7 +20,7 @@ track 0:
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
time = 200200
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
@ -32,7 +32,7 @@ track 0:
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
time = 166833
flags = 0
data = length 564, hash E5F56C5B
sample 5:
@ -48,7 +48,7 @@ track 0:
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
time = 300300
flags = 0
data = length 467, hash 69806D94
sample 9:
@ -56,7 +56,7 @@ track 0:
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1087, hash 491BF106
sample 11:
@ -68,7 +68,7 @@ track 0:
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5190, hash B9031D8
sample 14:
@ -80,7 +80,7 @@ track 0:
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
time = 567233
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
@ -96,7 +96,7 @@ track 0:
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
time = 700700
flags = 0
data = length 491, hash B5930C7C
sample 21:
@ -104,7 +104,7 @@ track 0:
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
time = 800800
flags = 0
data = length 838, hash 294A3451
sample 23:
@ -116,7 +116,7 @@ track 0:
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
@ -128,7 +128,7 @@ track 0:
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
time = 967633
flags = 0
data = length 415, hash 850DFEA3
sample 29:

View File

@ -20,7 +20,7 @@ track 0:
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
time = 200200
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
@ -32,7 +32,7 @@ track 0:
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
time = 166833
flags = 0
data = length 564, hash E5F56C5B
sample 5:
@ -48,7 +48,7 @@ track 0:
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
time = 300300
flags = 0
data = length 467, hash 69806D94
sample 9:
@ -56,7 +56,7 @@ track 0:
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1087, hash 491BF106
sample 11:
@ -68,7 +68,7 @@ track 0:
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5190, hash B9031D8
sample 14:
@ -80,7 +80,7 @@ track 0:
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
time = 567233
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
@ -96,7 +96,7 @@ track 0:
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
time = 700700
flags = 0
data = length 491, hash B5930C7C
sample 21:
@ -104,7 +104,7 @@ track 0:
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
time = 800800
flags = 0
data = length 838, hash 294A3451
sample 23:
@ -116,7 +116,7 @@ track 0:
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
@ -128,7 +128,7 @@ track 0:
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
time = 967633
flags = 0
data = length 415, hash 850DFEA3
sample 29:

View File

@ -23,7 +23,7 @@ track 0:
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
time = 200200
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
@ -35,7 +35,7 @@ track 0:
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
time = 166833
flags = 0
data = length 564, hash E5F56C5B
sample 5:
@ -51,7 +51,7 @@ track 0:
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
time = 300300
flags = 0
data = length 467, hash 69806D94
sample 9:
@ -59,7 +59,7 @@ track 0:
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1087, hash 491BF106
sample 11:
@ -71,7 +71,7 @@ track 0:
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5190, hash B9031D8
sample 14:
@ -83,7 +83,7 @@ track 0:
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
time = 567233
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
@ -99,7 +99,7 @@ track 0:
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
time = 700700
flags = 0
data = length 491, hash B5930C7C
sample 21:
@ -107,7 +107,7 @@ track 0:
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
time = 800800
flags = 0
data = length 838, hash 294A3451
sample 23:
@ -119,7 +119,7 @@ track 0:
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
@ -131,7 +131,7 @@ track 0:
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
time = 967633
flags = 0
data = length 415, hash 850DFEA3
sample 29:

View File

@ -23,7 +23,7 @@ track 0:
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
time = 200200
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
@ -35,7 +35,7 @@ track 0:
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
time = 166833
flags = 0
data = length 564, hash E5F56C5B
sample 5:
@ -51,7 +51,7 @@ track 0:
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
time = 300300
flags = 0
data = length 467, hash 69806D94
sample 9:
@ -59,7 +59,7 @@ track 0:
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1087, hash 491BF106
sample 11:
@ -71,7 +71,7 @@ track 0:
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5190, hash B9031D8
sample 14:
@ -83,7 +83,7 @@ track 0:
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
time = 567233
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
@ -99,7 +99,7 @@ track 0:
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
time = 700700
flags = 0
data = length 491, hash B5930C7C
sample 21:
@ -107,7 +107,7 @@ track 0:
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
time = 800800
flags = 0
data = length 838, hash 294A3451
sample 23:
@ -119,7 +119,7 @@ track 0:
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
@ -131,7 +131,7 @@ track 0:
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
time = 967633
flags = 0
data = length 415, hash 850DFEA3
sample 29:

View File

@ -23,7 +23,7 @@ track 0:
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
time = 200200
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
@ -35,7 +35,7 @@ track 0:
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
time = 166833
flags = 0
data = length 564, hash E5F56C5B
sample 5:
@ -51,7 +51,7 @@ track 0:
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
time = 300300
flags = 0
data = length 467, hash 69806D94
sample 9:
@ -59,7 +59,7 @@ track 0:
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1087, hash 491BF106
sample 11:
@ -71,7 +71,7 @@ track 0:
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5190, hash B9031D8
sample 14:
@ -83,7 +83,7 @@ track 0:
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
time = 567233
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
@ -99,7 +99,7 @@ track 0:
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
time = 700700
flags = 0
data = length 491, hash B5930C7C
sample 21:
@ -107,7 +107,7 @@ track 0:
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
time = 800800
flags = 0
data = length 838, hash 294A3451
sample 23:
@ -119,7 +119,7 @@ track 0:
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
@ -131,7 +131,7 @@ track 0:
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
time = 967633
flags = 0
data = length 415, hash 850DFEA3
sample 29:

View File

@ -23,7 +23,7 @@ track 0:
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
time = 200200
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
@ -35,7 +35,7 @@ track 0:
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
time = 166833
flags = 0
data = length 564, hash E5F56C5B
sample 5:
@ -51,7 +51,7 @@ track 0:
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
time = 300300
flags = 0
data = length 467, hash 69806D94
sample 9:
@ -59,7 +59,7 @@ track 0:
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1087, hash 491BF106
sample 11:
@ -71,7 +71,7 @@ track 0:
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5190, hash B9031D8
sample 14:
@ -83,7 +83,7 @@ track 0:
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
time = 567233
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
@ -99,7 +99,7 @@ track 0:
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
time = 700700
flags = 0
data = length 491, hash B5930C7C
sample 21:
@ -107,7 +107,7 @@ track 0:
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
time = 800800
flags = 0
data = length 838, hash 294A3451
sample 23:
@ -119,7 +119,7 @@ track 0:
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
@ -131,7 +131,7 @@ track 0:
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
time = 967633
flags = 0
data = length 415, hash 850DFEA3
sample 29:

View File

@ -23,7 +23,7 @@ track 0:
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
time = 200200
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
@ -35,7 +35,7 @@ track 0:
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
time = 166833
flags = 0
data = length 564, hash E5F56C5B
sample 5:
@ -51,7 +51,7 @@ track 0:
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
time = 300300
flags = 0
data = length 467, hash 69806D94
sample 9:
@ -59,7 +59,7 @@ track 0:
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1087, hash 491BF106
sample 11:
@ -71,7 +71,7 @@ track 0:
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5190, hash B9031D8
sample 14:
@ -83,7 +83,7 @@ track 0:
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
time = 567233
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
@ -99,7 +99,7 @@ track 0:
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
time = 700700
flags = 0
data = length 491, hash B5930C7C
sample 21:
@ -107,7 +107,7 @@ track 0:
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
time = 800800
flags = 0
data = length 838, hash 294A3451
sample 23:
@ -119,7 +119,7 @@ track 0:
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
@ -131,7 +131,7 @@ track 0:
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
time = 967633
flags = 0
data = length 415, hash 850DFEA3
sample 29:

View File

@ -20,7 +20,7 @@ track 0:
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
time = 200200
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
@ -32,7 +32,7 @@ track 0:
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
time = 166833
flags = 0
data = length 564, hash E5F56C5B
sample 5:
@ -48,7 +48,7 @@ track 0:
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
time = 300300
flags = 0
data = length 467, hash 69806D94
sample 9:
@ -56,7 +56,7 @@ track 0:
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1087, hash 491BF106
sample 11:
@ -68,7 +68,7 @@ track 0:
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5190, hash B9031D8
sample 14:
@ -80,7 +80,7 @@ track 0:
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
time = 567233
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
@ -96,7 +96,7 @@ track 0:
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
time = 700700
flags = 0
data = length 491, hash B5930C7C
sample 21:
@ -104,7 +104,7 @@ track 0:
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
time = 800800
flags = 0
data = length 838, hash 294A3451
sample 23:
@ -116,7 +116,7 @@ track 0:
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
@ -128,7 +128,7 @@ track 0:
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
time = 967633
flags = 0
data = length 415, hash 850DFEA3
sample 29:

View File

@ -20,7 +20,7 @@ track 0:
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
time = 200200
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
@ -32,7 +32,7 @@ track 0:
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
time = 166833
flags = 0
data = length 564, hash E5F56C5B
sample 5:
@ -48,7 +48,7 @@ track 0:
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
time = 300300
flags = 0
data = length 467, hash 69806D94
sample 9:
@ -56,7 +56,7 @@ track 0:
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1087, hash 491BF106
sample 11:
@ -68,7 +68,7 @@ track 0:
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5190, hash B9031D8
sample 14:
@ -80,7 +80,7 @@ track 0:
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
time = 567233
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
@ -96,7 +96,7 @@ track 0:
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
time = 700700
flags = 0
data = length 491, hash B5930C7C
sample 21:
@ -104,7 +104,7 @@ track 0:
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
time = 800800
flags = 0
data = length 838, hash 294A3451
sample 23:
@ -116,7 +116,7 @@ track 0:
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
@ -128,7 +128,7 @@ track 0:
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
time = 967633
flags = 0
data = length 415, hash 850DFEA3
sample 29:

View File

@ -13,7 +13,7 @@ track 0:
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
time = 200200
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
@ -25,7 +25,7 @@ track 0:
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
time = 166833
flags = 0
data = length 564, hash E5F56C5B
sample 5:
@ -41,7 +41,7 @@ track 0:
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
time = 300300
flags = 0
data = length 467, hash 69806D94
sample 9:
@ -49,7 +49,7 @@ track 0:
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1087, hash 491BF106
sample 11:
@ -61,7 +61,7 @@ track 0:
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5190, hash B9031D8
sample 14:
@ -73,7 +73,7 @@ track 0:
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
time = 567233
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
@ -89,7 +89,7 @@ track 0:
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
time = 700700
flags = 0
data = length 491, hash B5930C7C
sample 21:
@ -97,7 +97,7 @@ track 0:
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
time = 800800
flags = 0
data = length 838, hash 294A3451
sample 23:
@ -109,7 +109,7 @@ track 0:
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
@ -121,7 +121,7 @@ track 0:
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
time = 967633
flags = 0
data = length 415, hash 850DFEA3
sample 29:

View File

@ -13,7 +13,7 @@ track 0:
flags = 1
data = length 38070, hash B58E1AEE
sample 1:
time = 200199
time = 200200
flags = 0
data = length 8340, hash 8AC449FF
sample 2:
@ -25,7 +25,7 @@ track 0:
flags = 0
data = length 469, hash D6E0A200
sample 4:
time = 166832
time = 166833
flags = 0
data = length 564, hash E5F56C5B
sample 5:
@ -41,7 +41,7 @@ track 0:
flags = 0
data = length 455, hash B9CCE047
sample 8:
time = 300299
time = 300300
flags = 0
data = length 467, hash 69806D94
sample 9:
@ -49,7 +49,7 @@ track 0:
flags = 0
data = length 4549, hash 3944F501
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1087, hash 491BF106
sample 11:
@ -61,7 +61,7 @@ track 0:
flags = 0
data = length 455, hash 8A0610
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5190, hash B9031D8
sample 14:
@ -73,7 +73,7 @@ track 0:
flags = 0
data = length 653, hash 8494F326
sample 16:
time = 567232
time = 567233
flags = 0
data = length 485, hash 2CCC85F4
sample 17:
@ -89,7 +89,7 @@ track 0:
flags = 0
data = length 640, hash F664125B
sample 20:
time = 700699
time = 700700
flags = 0
data = length 491, hash B5930C7C
sample 21:
@ -97,7 +97,7 @@ track 0:
flags = 0
data = length 2989, hash 92CF4FCF
sample 22:
time = 800799
time = 800800
flags = 0
data = length 838, hash 294A3451
sample 23:
@ -109,7 +109,7 @@ track 0:
flags = 0
data = length 329, hash A654FFA1
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1517, hash 5F7EBF8B
sample 26:
@ -121,7 +121,7 @@ track 0:
flags = 0
data = length 415, hash B31BBC3B
sample 28:
time = 967632
time = 967633
flags = 0
data = length 415, hash 850DFEA3
sample 29:

View File

@ -32,7 +32,7 @@ track 0:
flags = 536870912
data = length 5867, hash 56F9EE87
sample 4:
time = 166832
time = 166833
flags = 0
data = length 570, hash 984421BD
sample 5:
@ -48,7 +48,7 @@ track 0:
flags = 0
data = length 4310, hash 291E6161
sample 8:
time = 300299
time = 300300
flags = 0
data = length 497, hash 398CBFAA
sample 9:
@ -56,7 +56,7 @@ track 0:
flags = 0
data = length 4449, hash 322CAA2B
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1076, hash B479B634
sample 11:
@ -68,7 +68,7 @@ track 0:
flags = 0
data = length 463, hash A85F9769
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5339, hash F232195D
sample 14:
@ -80,7 +80,7 @@ track 0:
flags = 0
data = length 689, hash 3EB753A3
sample 16:
time = 567232
time = 567233
flags = 0
data = length 516, hash E6DF9C1C
sample 17:
@ -96,7 +96,7 @@ track 0:
flags = 0
data = length 625, hash ED1C8EF1
sample 20:
time = 700699
time = 700700
flags = 0
data = length 492, hash E6E066EA
sample 21:
@ -104,7 +104,7 @@ track 0:
flags = 0
data = length 2973, hash A3C54C3B
sample 22:
time = 800799
time = 800800
flags = 0
data = length 833, hash 41CA807D
sample 23:
@ -116,7 +116,7 @@ track 0:
flags = 0
data = length 384, hash A0E8FA50
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1450, hash 92741C3B
sample 26:
@ -128,7 +128,7 @@ track 0:
flags = 0
data = length 413, hash 886904C
sample 28:
time = 967632
time = 967633
flags = 0
data = length 427, hash FC2FA8CC
sample 29:

View File

@ -32,7 +32,7 @@ track 0:
flags = 536870912
data = length 5867, hash 56F9EE87
sample 4:
time = 166832
time = 166833
flags = 0
data = length 570, hash 984421BD
sample 5:
@ -48,7 +48,7 @@ track 0:
flags = 0
data = length 4310, hash 291E6161
sample 8:
time = 300299
time = 300300
flags = 0
data = length 497, hash 398CBFAA
sample 9:
@ -56,7 +56,7 @@ track 0:
flags = 0
data = length 4449, hash 322CAA2B
sample 10:
time = 400399
time = 400400
flags = 0
data = length 1076, hash B479B634
sample 11:
@ -68,7 +68,7 @@ track 0:
flags = 0
data = length 463, hash A85F9769
sample 13:
time = 600599
time = 600600
flags = 0
data = length 5339, hash F232195D
sample 14:
@ -80,7 +80,7 @@ track 0:
flags = 0
data = length 689, hash 3EB753A3
sample 16:
time = 567232
time = 567233
flags = 0
data = length 516, hash E6DF9C1C
sample 17:
@ -96,7 +96,7 @@ track 0:
flags = 0
data = length 625, hash ED1C8EF1
sample 20:
time = 700699
time = 700700
flags = 0
data = length 492, hash E6E066EA
sample 21:
@ -104,7 +104,7 @@ track 0:
flags = 0
data = length 2973, hash A3C54C3B
sample 22:
time = 800799
time = 800800
flags = 0
data = length 833, hash 41CA807D
sample 23:
@ -116,7 +116,7 @@ track 0:
flags = 0
data = length 384, hash A0E8FA50
sample 25:
time = 1000999
time = 1001000
flags = 0
data = length 1450, hash 92741C3B
sample 26:
@ -128,7 +128,7 @@ track 0:
flags = 0
data = length 413, hash 886904C
sample 28:
time = 967632
time = 967633
flags = 0
data = length 427, hash FC2FA8CC
sample 29: