Merge pull request #419 from v-novaltd:vnova-104

This commit is contained in:
Tofunmi Adigun-Hameed 2023-06-22 15:33:06 +00:00 committed by Rohit Singh
parent 72013446c4
commit c002ff6a6f
42 changed files with 185 additions and 46 deletions

View File

@ -159,7 +159,7 @@ public final class Ac3Reader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
// Do nothing. // Do nothing.
} }

View File

@ -161,7 +161,7 @@ public final class Ac4Reader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
// Do nothing. // Do nothing.
} }

View File

@ -194,7 +194,7 @@ public final class AdtsReader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
// Do nothing. // Do nothing.
} }

View File

@ -215,7 +215,7 @@ public final class DtsReader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
// Do nothing. // Do nothing.
} }

View File

@ -86,7 +86,7 @@ public final class DvbSubtitleReader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
if (writingSample) { if (writingSample) {
// packetStarted method must be called before reading sample. // packetStarted method must be called before reading sample.
checkState(sampleTimeUs != C.TIME_UNSET); checkState(sampleTimeUs != C.TIME_UNSET);

View File

@ -67,5 +67,5 @@ public interface ElementaryStreamReader {
void consume(ParsableByteArray data) throws ParserException; void consume(ParsableByteArray data) throws ParserException;
/** Called when a packet ends. */ /** Called when a packet ends. */
void packetFinished(); void packetFinished(boolean isEndOfInput);
} }

View File

@ -217,8 +217,13 @@ public final class H262Reader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
// Do nothing. checkStateNotNull(output); // Asserts that createTracks has been called.
if (isEndOfInput) {
@C.BufferFlags int flags = sampleIsKeyframe ? C.BUFFER_FLAG_KEY_FRAME : 0;
int size = (int) (totalBytesWritten - samplePosition);
output.sampleMetadata(sampleTimeUs, flags, size, /* offset= */ 0, /* cryptoData= */ null);
}
} }
/** /**

View File

@ -216,8 +216,13 @@ public final class H263Reader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
// Do nothing. // Assert that createTracks has been called.
checkStateNotNull(sampleReader);
if (isEndOfInput) {
sampleReader.onDataEnd(totalBytesWritten, /* bytesWrittenPastPosition= */ 0, hasOutputFormat);
sampleReader.reset();
}
} }
/** /**

View File

@ -167,8 +167,11 @@ public final class H264Reader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
// Do nothing. assertTracksCreated();
if (isEndOfInput) {
sampleReader.end(totalBytesWritten);
}
} }
@RequiresNonNull("sampleReader") @RequiresNonNull("sampleReader")
@ -508,6 +511,13 @@ public final class H264Reader implements ElementaryStreamReader {
output.sampleMetadata(sampleTimeUs, flags, size, offset, null); output.sampleMetadata(sampleTimeUs, flags, size, offset, null);
} }
public void end(long position) {
// Output a final sample with the NAL units currently held
nalUnitStartPosition = position;
outputSample(/* offset= */ 0);
readingSample = false;
}
private static final class SliceHeaderData { private static final class SliceHeaderData {
private static final int SLICE_TYPE_I = 2; private static final int SLICE_TYPE_I = 2;

View File

@ -172,8 +172,11 @@ public final class H265Reader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
// Do nothing. assertTracksCreated();
if (isEndOfInput) {
sampleReader.end(totalBytesWritten);
}
} }
@RequiresNonNull("sampleReader") @RequiresNonNull("sampleReader")
@ -383,6 +386,13 @@ public final class H265Reader implements ElementaryStreamReader {
output.sampleMetadata(sampleTimeUs, flags, size, offset, null); output.sampleMetadata(sampleTimeUs, flags, size, offset, null);
} }
public void end(long position) {
// Output a final sample with the NAL units currently held
nalUnitPosition = position;
outputSample(/* offset= */ 0);
readingSample = false;
}
/** Returns whether a NAL unit type is one that occurs before any VCL NAL units in a sample. */ /** Returns whether a NAL unit type is one that occurs before any VCL NAL units in a sample. */
private static boolean isPrefixNalUnit(int nalUnitType) { private static boolean isPrefixNalUnit(int nalUnitType) {
return (VPS_NUT <= nalUnitType && nalUnitType <= AUD_NUT) || nalUnitType == PREFIX_SEI_NUT; return (VPS_NUT <= nalUnitType && nalUnitType <= AUD_NUT) || nalUnitType == PREFIX_SEI_NUT;

View File

@ -120,7 +120,7 @@ public final class Id3Reader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
Assertions.checkStateNotNull(output); // Asserts that createTracks has been called. Assertions.checkStateNotNull(output); // Asserts that createTracks has been called.
if (!writingSample || sampleSize == 0 || sampleBytesRead != sampleSize) { if (!writingSample || sampleSize == 0 || sampleBytesRead != sampleSize) {
return; return;

View File

@ -153,7 +153,7 @@ public final class LatmReader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
// Do nothing. // Do nothing.
} }

View File

@ -119,7 +119,7 @@ public final class MpegAudioReader implements ElementaryStreamReader {
} }
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
// Do nothing. // Do nothing.
} }

View File

@ -107,7 +107,8 @@ public final class PesReader implements TsPayloadReader {
Log.w(TAG, "Unexpected start indicator: expected " + payloadSize + " more bytes"); Log.w(TAG, "Unexpected start indicator: expected " + payloadSize + " more bytes");
} }
// Either way, notify the reader that it has now finished. // Either way, notify the reader that it has now finished.
reader.packetFinished(); boolean isEndOfInput = (data.limit() == 0);
reader.packetFinished(isEndOfInput);
break; break;
default: default:
throw new IllegalStateException(); throw new IllegalStateException();
@ -147,7 +148,8 @@ public final class PesReader implements TsPayloadReader {
if (payloadSize != C.LENGTH_UNSET) { if (payloadSize != C.LENGTH_UNSET) {
payloadSize -= readLength; payloadSize -= readLength;
if (payloadSize == 0) { if (payloadSize == 0) {
reader.packetFinished(); // There are bytes left in data, see above, so this is not the end of input
reader.packetFinished(/* isEndOfInput= */ false);
setState(STATE_READING_HEADER); setState(STATE_READING_HEADER);
} }
} }

View File

@ -357,7 +357,7 @@ public final class PsExtractor implements Extractor {
pesPayloadReader.packetStarted(timeUs, TsPayloadReader.FLAG_DATA_ALIGNMENT_INDICATOR); pesPayloadReader.packetStarted(timeUs, TsPayloadReader.FLAG_DATA_ALIGNMENT_INDICATOR);
pesPayloadReader.consume(data); pesPayloadReader.consume(data);
// We always have complete PES packets with program stream. // We always have complete PES packets with program stream.
pesPayloadReader.packetFinished(); pesPayloadReader.packetFinished(/* isEndOfInput= */ false);
} }
private void parseHeader() { private void parseHeader() {

View File

@ -447,6 +447,13 @@ public final class TsExtractor implements Extractor {
} }
if (!fillBufferWithAtLeastOnePacket(input)) { if (!fillBufferWithAtLeastOnePacket(input)) {
// Send a synthesised empty pusi to allow for packetFinished to be triggered on the last unit.
for (int i = 0; i < tsPayloadReaders.size(); i++) {
TsPayloadReader payloadReader = tsPayloadReaders.valueAt(i);
if (payloadReader instanceof PesReader) {
payloadReader.consume(new ParsableByteArray(), FLAG_PAYLOAD_UNIT_START_INDICATOR);
}
}
return RESULT_END_OF_INPUT; return RESULT_END_OF_INPUT;
} }

View File

@ -545,7 +545,7 @@ public final class TsExtractorTest {
public void consume(ParsableByteArray data) {} public void consume(ParsableByteArray data) {}
@Override @Override
public void packetFinished() { public void packetFinished(boolean isEndOfInput) {
packetsRead++; packetsRead++;
} }

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 39002 total output bytes = 39002
sample count = 24 sample count = 25
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/mp4v-es sampleMimeType = video/mp4v-es
@ -112,4 +112,8 @@ track 256:
time = 920000 time = 920000
flags = 0 flags = 0
data = length 222, hash 7E77BF79 data = length 222, hash 7E77BF79
sample 24:
time = 960000
flags = 1
data = length 11769, hash D94C80C0
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 27354 total output bytes = 27354
sample count = 18 sample count = 19
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/mp4v-es sampleMimeType = video/mp4v-es
@ -88,4 +88,8 @@ track 256:
time = 920000 time = 920000
flags = 0 flags = 0
data = length 222, hash 7E77BF79 data = length 222, hash 7E77BF79
sample 18:
time = 960000
flags = 1
data = length 11769, hash D94C80C0
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 13592 total output bytes = 13592
sample count = 8 sample count = 9
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/mp4v-es sampleMimeType = video/mp4v-es
@ -48,4 +48,8 @@ track 256:
time = 920000 time = 920000
flags = 0 flags = 0
data = length 222, hash 7E77BF79 data = length 222, hash 7E77BF79
sample 8:
time = 960000
flags = 1
data = length 11769, hash D94C80C0
tracksEnded = true tracksEnded = true

View File

@ -5,7 +5,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 39002 total output bytes = 39002
sample count = 24 sample count = 25
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/mp4v-es sampleMimeType = video/mp4v-es
@ -109,4 +109,8 @@ track 256:
time = 920000 time = 920000
flags = 0 flags = 0
data = length 222, hash 7E77BF79 data = length 222, hash 7E77BF79
sample 24:
time = 960000
flags = 1
data = length 11769, hash D94C80C0
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 2 numberOfTracks = 2
track 256: track 256:
total output bytes = 13650 total output bytes = 13650
sample count = 2 sample count = 3
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/avc sampleMimeType = video/avc
@ -29,6 +29,10 @@ track 256:
time = 100100 time = 100100
flags = 0 flags = 0
data = length 813, hash 99F7B4FA data = length 813, hash 99F7B4FA
sample 2:
time = 133466
flags = 0
data = length 442, hash A7367ECF
track 257: track 257:
total output bytes = 18432 total output bytes = 18432
sample count = 9 sample count = 9

View File

@ -5,7 +5,7 @@ seekMap:
numberOfTracks = 2 numberOfTracks = 2
track 256: track 256:
total output bytes = 13650 total output bytes = 13650
sample count = 2 sample count = 3
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/avc sampleMimeType = video/avc
@ -26,6 +26,10 @@ track 256:
time = 100100 time = 100100
flags = 0 flags = 0
data = length 813, hash 99F7B4FA data = length 813, hash 99F7B4FA
sample 2:
time = 133466
flags = 0
data = length 442, hash A7367ECF
track 257: track 257:
total output bytes = 18432 total output bytes = 18432
sample count = 9 sample count = 9

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 2 numberOfTracks = 2
track 256: track 256:
total output bytes = 13650 total output bytes = 13650
sample count = 2 sample count = 3
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/avc sampleMimeType = video/avc
@ -29,6 +29,10 @@ track 256:
time = 100100 time = 100100
flags = 0 flags = 0
data = length 813, hash 99F7B4FA data = length 813, hash 99F7B4FA
sample 2:
time = 133466
flags = 0
data = length 442, hash A7367ECF
track 257: track 257:
total output bytes = 5015 total output bytes = 5015
sample count = 4 sample count = 4

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 2 numberOfTracks = 2
track 256: track 256:
total output bytes = 13650 total output bytes = 13650
sample count = 2 sample count = 3
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/avc sampleMimeType = video/avc
@ -29,6 +29,10 @@ track 256:
time = 100100 time = 100100
flags = 0 flags = 0
data = length 813, hash 99F7B4FA data = length 813, hash 99F7B4FA
sample 2:
time = 133466
flags = 0
data = length 442, hash A7367ECF
track 257: track 257:
total output bytes = 5015 total output bytes = 5015
sample count = 4 sample count = 4

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 2 numberOfTracks = 2
track 256: track 256:
total output bytes = 13650 total output bytes = 13650
sample count = 2 sample count = 3
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/avc sampleMimeType = video/avc
@ -29,6 +29,10 @@ track 256:
time = 100100 time = 100100
flags = 0 flags = 0
data = length 813, hash 99F7B4FA data = length 813, hash 99F7B4FA
sample 2:
time = 133466
flags = 0
data = length 442, hash A7367ECF
track 257: track 257:
total output bytes = 5015 total output bytes = 5015
sample count = 4 sample count = 4

View File

@ -5,7 +5,7 @@ seekMap:
numberOfTracks = 2 numberOfTracks = 2
track 256: track 256:
total output bytes = 13650 total output bytes = 13650
sample count = 2 sample count = 3
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/avc sampleMimeType = video/avc
@ -26,6 +26,10 @@ track 256:
time = 100100 time = 100100
flags = 0 flags = 0
data = length 813, hash 99F7B4FA data = length 813, hash 99F7B4FA
sample 2:
time = 133466
flags = 0
data = length 442, hash A7367ECF
track 257: track 257:
total output bytes = 5015 total output bytes = 5015
sample count = 4 sample count = 4

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 12451 total output bytes = 12451
sample count = 4 sample count = 5
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/avc sampleMimeType = video/avc
@ -37,4 +37,8 @@ track 256:
time = 133466 time = 133466
flags = 0 flags = 0
data = length 518, hash 546C177 data = length 518, hash 546C177
sample 4:
time = 100100
flags = 0
data = length 254, hash 36EBDA1
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 12451 total output bytes = 12451
sample count = 4 sample count = 5
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/avc sampleMimeType = video/avc
@ -37,4 +37,8 @@ track 256:
time = 133466 time = 133466
flags = 0 flags = 0
data = length 518, hash 546C177 data = length 518, hash 546C177
sample 4:
time = 100100
flags = 0
data = length 254, hash 36EBDA1
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 12451 total output bytes = 12451
sample count = 4 sample count = 5
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/avc sampleMimeType = video/avc
@ -37,4 +37,8 @@ track 256:
time = 133466 time = 133466
flags = 0 flags = 0
data = length 518, hash 546C177 data = length 518, hash 546C177
sample 4:
time = 100100
flags = 0
data = length 254, hash 36EBDA1
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 255 total output bytes = 255
sample count = 0 sample count = 1
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/avc sampleMimeType = video/avc
@ -21,4 +21,8 @@ track 256:
initializationData: initializationData:
data = length 29, hash 4C2CAE9C data = length 29, hash 4C2CAE9C
data = length 9, hash D971CD89 data = length 9, hash D971CD89
sample 0:
time = 100100
flags = 0
data = length 254, hash 36EBDA1
tracksEnded = true tracksEnded = true

View File

@ -5,7 +5,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 12451 total output bytes = 12451
sample count = 4 sample count = 5
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/avc sampleMimeType = video/avc
@ -34,4 +34,8 @@ track 256:
time = 133466 time = 133466
flags = 0 flags = 0
data = length 518, hash 546C177 data = length 518, hash 546C177
sample 4:
time = 100100
flags = 0
data = length 254, hash 36EBDA1
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 19364 total output bytes = 19364
sample count = 29 sample count = 30
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/hevc sampleMimeType = video/hevc
@ -137,4 +137,8 @@ track 256:
time = 933333 time = 933333
flags = 0 flags = 0
data = length 87, hash EEC4D98C data = length 87, hash EEC4D98C
sample 29:
time = 1000000
flags = 0
data = length 167, hash EAE2DF9A
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 3806 total output bytes = 3806
sample count = 20 sample count = 21
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/hevc sampleMimeType = video/hevc
@ -101,4 +101,8 @@ track 256:
time = 933333 time = 933333
flags = 0 flags = 0
data = length 87, hash EEC4D98C data = length 87, hash EEC4D98C
sample 20:
time = 1000000
flags = 0
data = length 167, hash EAE2DF9A
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 1796 total output bytes = 1796
sample count = 11 sample count = 12
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/hevc sampleMimeType = video/hevc
@ -65,4 +65,8 @@ track 256:
time = 933333 time = 933333
flags = 0 flags = 0
data = length 87, hash EEC4D98C data = length 87, hash EEC4D98C
sample 11:
time = 1000000
flags = 0
data = length 167, hash EAE2DF9A
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 396 total output bytes = 396
sample count = 2 sample count = 3
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/hevc sampleMimeType = video/hevc
@ -29,4 +29,8 @@ track 256:
time = 933333 time = 933333
flags = 0 flags = 0
data = length 87, hash EEC4D98C data = length 87, hash EEC4D98C
sample 2:
time = 1000000
flags = 0
data = length 167, hash EAE2DF9A
tracksEnded = true tracksEnded = true

View File

@ -5,7 +5,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 19364 total output bytes = 19364
sample count = 29 sample count = 30
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/hevc sampleMimeType = video/hevc
@ -134,4 +134,8 @@ track 256:
time = 933333 time = 933333
flags = 0 flags = 0
data = length 87, hash EEC4D98C data = length 87, hash EEC4D98C
sample 29:
time = 1000000
flags = 0
data = length 167, hash EAE2DF9A
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 10004 total output bytes = 10004
sample count = 15 sample count = 16
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/hevc sampleMimeType = video/hevc
@ -81,4 +81,8 @@ track 256:
time = 1133333 time = 1133333
flags = 0 flags = 0
data = length 46, hash CE770A40 data = length 46, hash CE770A40
sample 15:
time = 1266666
flags = 0
data = length 99, hash CD8A8477
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 856 total output bytes = 856
sample count = 11 sample count = 12
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/hevc sampleMimeType = video/hevc
@ -65,4 +65,8 @@ track 256:
time = 1133333 time = 1133333
flags = 0 flags = 0
data = length 46, hash CE770A40 data = length 46, hash CE770A40
sample 11:
time = 1266666
flags = 0
data = length 99, hash CD8A8477
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 563 total output bytes = 563
sample count = 6 sample count = 7
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/hevc sampleMimeType = video/hevc
@ -45,4 +45,8 @@ track 256:
time = 1133333 time = 1133333
flags = 0 flags = 0
data = length 46, hash CE770A40 data = length 46, hash CE770A40
sample 6:
time = 1266666
flags = 0
data = length 99, hash CD8A8477
tracksEnded = true tracksEnded = true

View File

@ -8,7 +8,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 146 total output bytes = 146
sample count = 1 sample count = 2
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/hevc sampleMimeType = video/hevc
@ -25,4 +25,8 @@ track 256:
time = 1133333 time = 1133333
flags = 0 flags = 0
data = length 46, hash CE770A40 data = length 46, hash CE770A40
sample 1:
time = 1266666
flags = 0
data = length 99, hash CD8A8477
tracksEnded = true tracksEnded = true

View File

@ -5,7 +5,7 @@ seekMap:
numberOfTracks = 1 numberOfTracks = 1
track 256: track 256:
total output bytes = 10004 total output bytes = 10004
sample count = 15 sample count = 16
format 0: format 0:
id = 1/256 id = 1/256
sampleMimeType = video/hevc sampleMimeType = video/hevc
@ -78,4 +78,8 @@ track 256:
time = 1133333 time = 1133333
flags = 0 flags = 0
data = length 46, hash CE770A40 data = length 46, hash CE770A40
sample 15:
time = 1266666
flags = 0
data = length 99, hash CD8A8477
tracksEnded = true tracksEnded = true