diff --git a/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndNonParameterizedAndroidTest.java b/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndNonParameterizedAndroidTest.java index 66dd862383..a6261c99c4 100644 --- a/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndNonParameterizedAndroidTest.java +++ b/libraries/muxer/src/androidTest/java/androidx/media3/muxer/Mp4MuxerEndToEndNonParameterizedAndroidTest.java @@ -70,7 +70,7 @@ public class Mp4MuxerEndToEndNonParameterizedAndroidTest { // Muxer not closed. // Audio sample written = 192 out of 195. - // Video sample written = 94 out of 127. + // Video sample written = 125 out of 127. // Output is still a valid MP4 file. FakeExtractorOutput fakeExtractorOutput = TestUtil.extractAllSamplesFromFilePath(new Mp4Extractor(), checkNotNull(outputPath)); diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java index 9b40e5c4f2..bf1df7419d 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java @@ -95,6 +95,7 @@ public final class Mp4Muxer implements Muxer { private @LastFrameDurationBehavior int lastFrameDurationBehavior; @Nullable private AnnexBToAvccConverter annexBToAvccConverter; private boolean sampleCopyEnabled; + private boolean attemptStreamableOutputEnabled; /** * Creates a {@link Builder} instance with default values. @@ -105,6 +106,7 @@ public final class Mp4Muxer implements Muxer { this.fileOutputStream = checkNotNull(fileOutputStream); lastFrameDurationBehavior = LAST_FRAME_DURATION_BEHAVIOR_INSERT_SHORT_FRAME; sampleCopyEnabled = true; + attemptStreamableOutputEnabled = true; } /** @@ -148,6 +150,21 @@ public final class Mp4Muxer implements Muxer { return this; } + /** + * Sets whether to attempt to write a file where the metadata is stored at the start, which can + * make the file more efficient to read sequentially. + * + *

Setting to {@code true} does not guarantee a streamable MP4 output. + * + *

The default value is {@code true}. + */ + @CanIgnoreReturnValue + public Mp4Muxer.Builder setAttemptStreamableOutputEnabled( + boolean attemptStreamableOutputEnabled) { + this.attemptStreamableOutputEnabled = attemptStreamableOutputEnabled; + return this; + } + /** Builds an {@link Mp4Muxer} instance. */ public Mp4Muxer build() { MetadataCollector metadataCollector = new MetadataCollector(); @@ -158,7 +175,8 @@ public final class Mp4Muxer implements Muxer { fileOutputStream, moovStructure, annexBToAvccConverter == null ? AnnexBToAvccConverter.DEFAULT : annexBToAvccConverter, - sampleCopyEnabled); + sampleCopyEnabled, + attemptStreamableOutputEnabled); return new Mp4Muxer(mp4Writer, metadataCollector); } diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java index 6225c36be3..15b20b6376 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java @@ -40,6 +40,8 @@ import java.util.concurrent.atomic.AtomicBoolean; /** Writes all media samples into a single mdat box. */ /* package */ final class Mp4Writer { private static final long INTERLEAVE_DURATION_US = 1_000_000L; + private static final int DEFAULT_MOOV_BOX_SIZE_BYTES = 400_000; + private static final String FREE_BOX_TYPE = "free"; private final FileOutputStream outputStream; private final FileChannel output; @@ -49,6 +51,11 @@ import java.util.concurrent.atomic.AtomicBoolean; private final AtomicBoolean hasWrittenSamples; private final boolean sampleCopyEnabled; + // Stores location of the space reserved for the moov box at the beginning of the file (after ftyp + // box) + private long reservedMoovSpaceStart; + private long reservedMoovSpaceEnd; + private boolean canWriteMoovAtStart; private long mdatStart; private long mdatEnd; private long mdatDataEnd; // Always <= mdatEnd @@ -65,17 +72,20 @@ import java.util.concurrent.atomic.AtomicBoolean; * H.265 NAL units from the Annex-B format (using start codes to delineate NAL units) to the * AVCC format (which uses length prefixes). * @param sampleCopyEnabled Whether sample copying is enabled. + * @param attemptStreamableOutputEnabled Whether to attempt to write a streamable output. */ public Mp4Writer( FileOutputStream outputStream, Mp4MoovStructure moovGenerator, AnnexBToAvccConverter annexBToAvccConverter, - boolean sampleCopyEnabled) { + boolean sampleCopyEnabled, + boolean attemptStreamableOutputEnabled) { this.outputStream = outputStream; this.output = outputStream.getChannel(); this.moovGenerator = moovGenerator; this.annexBToAvccConverter = annexBToAvccConverter; this.sampleCopyEnabled = sampleCopyEnabled; + canWriteMoovAtStart = attemptStreamableOutputEnabled; tracks = new ArrayList<>(); hasWrittenSamples = new AtomicBoolean(false); lastMoovWritten = Range.closed(0L, 0L); @@ -115,9 +125,16 @@ import java.util.concurrent.atomic.AtomicBoolean; output.position(0L); output.write(Boxes.ftyp()); + if (canWriteMoovAtStart) { + // Reserve some space for moov box by adding a free box. + reservedMoovSpaceStart = output.position(); + output.write( + BoxUtils.wrapIntoBox(FREE_BOX_TYPE, ByteBuffer.allocate(DEFAULT_MOOV_BOX_SIZE_BYTES))); + reservedMoovSpaceEnd = output.position(); + } + // Start with an empty mdat box. mdatStart = output.position(); - ByteBuffer header = ByteBuffer.allocate(4 + 4 + 8); header.putInt(1); // 4 bytes, indicating a 64-bit length field header.put(Util.getUtf8Bytes("mdat")); // 4 bytes @@ -127,7 +144,7 @@ import java.util.concurrent.atomic.AtomicBoolean; // The box includes only its type and length. mdatDataEnd = mdatStart + 16; - mdatEnd = mdatDataEnd; + mdatEnd = canWriteMoovAtStart ? Long.MAX_VALUE : mdatDataEnd; } private ByteBuffer assembleCurrentMoovData() { @@ -174,7 +191,7 @@ import java.util.concurrent.atomic.AtomicBoolean; // Write a free box to the end of the file, with the new moov box wrapped into it. output.position(newMoovBoxPosition); - output.write(BoxUtils.wrapIntoBox("free", newMoovBoxData.duplicate())); + output.write(BoxUtils.wrapIntoBox(FREE_BOX_TYPE, newMoovBoxData.duplicate())); // The current state is: // | ftyp | mdat .. .. .. | previous moov | free (new moov)| @@ -188,6 +205,35 @@ import java.util.concurrent.atomic.AtomicBoolean; Range.closed(newMoovBoxPosition, newMoovBoxPosition + newMoovBoxData.remaining()); } + /** + * Attempts to write moov box at the start (after the ftyp box). If this is not possible, the moov + * box is written at the end of the file (after the mdat box). + */ + private void maybeWriteMoovAtStart() throws IOException { + ByteBuffer moovBox = assembleCurrentMoovData(); + int moovBoxSize = moovBox.remaining(); + // Keep some space for free box to fill the remaining space. + if (moovBox.remaining() + BOX_HEADER_SIZE <= reservedMoovSpaceEnd - reservedMoovSpaceStart) { + output.position(reservedMoovSpaceStart); + output.write(moovBox); + // Write free box in the remaining space. + int freeSpace = (int) (reservedMoovSpaceEnd - output.position() - BOX_HEADER_SIZE); + output.write(BoxUtils.wrapIntoBox(FREE_BOX_TYPE, ByteBuffer.allocate(freeSpace))); + } else { + // Write moov at the end (after mdat). + canWriteMoovAtStart = false; + mdatEnd = mdatDataEnd; + output.position(mdatEnd); + output.write(moovBox); + lastMoovWritten = Range.closed(mdatEnd, mdatEnd + moovBoxSize); + // Replace previously written moov box (after ftyp box) with a free box. + int freeSpace = (int) (reservedMoovSpaceEnd - reservedMoovSpaceStart - BOX_HEADER_SIZE); + ByteBuffer freeBox = BoxUtils.wrapIntoBox(FREE_BOX_TYPE, ByteBuffer.allocate(freeSpace)); + output.write(freeBox, reservedMoovSpaceStart); + } + updateMdatSize(mdatDataEnd - mdatStart); + } + /** * Writes the final moov box and trims extra space from the mdat box. * @@ -196,6 +242,11 @@ import java.util.concurrent.atomic.AtomicBoolean; * @throws IOException If there is any error while writing data to the disk. */ private void writeMoovAndTrim() throws IOException { + if (canWriteMoovAtStart) { + maybeWriteMoovAtStart(); + return; + } + // The current state is: // | ftyp | mdat .. .. .. (00 00 00) | moov | @@ -229,10 +280,7 @@ import java.util.concurrent.atomic.AtomicBoolean; ByteBuffer freeHeader = ByteBuffer.allocate(4 + 4); freeHeader.putInt((int) remainingLength); - freeHeader.put((byte) 'f'); - freeHeader.put((byte) 'r'); - freeHeader.put((byte) 'e'); - freeHeader.put((byte) 'e'); + freeHeader.put(Util.getUtf8Bytes(FREE_BOX_TYPE)); freeHeader.flip(); output.write(freeHeader); @@ -307,11 +355,14 @@ import java.util.concurrent.atomic.AtomicBoolean; mdatDataEnd += output.write(currentSampleByteBuffer, mdatDataEnd); track.writtenSamples.add(currentSampleBufferInfo); } while (!track.pendingSamplesBufferInfo.isEmpty()); - checkState(mdatDataEnd <= mdatEnd); } private void maybeExtendMdatAndRewriteMoov(long additionalBytesNeeded) throws IOException { + // The mdat box can be written till the end of the file. + if (canWriteMoovAtStart) { + return; + } // If the required number of bytes doesn't fit in the gap between the actual data and the moov // box, extend the file and write out the moov box to the end again. if (mdatDataEnd + additionalBytesNeeded >= mdatEnd) { @@ -332,6 +383,7 @@ import java.util.concurrent.atomic.AtomicBoolean; } private void doInterleave() throws IOException { + boolean newSamplesWritten = false; for (int i = 0; i < tracks.size(); i++) { Track track = tracks.get(i); // TODO: b/270583563 - Check if we need to consider the global timestamp instead. @@ -341,10 +393,14 @@ import java.util.concurrent.atomic.AtomicBoolean; if (lastSampleInfo.presentationTimeUs - firstSampleInfo.presentationTimeUs > INTERLEAVE_DURATION_US) { + newSamplesWritten = true; flushPending(track); } } } + if (newSamplesWritten && canWriteMoovAtStart) { + maybeWriteMoovAtStart(); + } } /** diff --git a/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java b/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java index de8988083e..6b49cdd839 100644 --- a/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java +++ b/libraries/muxer/src/test/java/androidx/media3/muxer/Mp4MuxerEndToEndTest.java @@ -300,4 +300,64 @@ public class Mp4MuxerEndToEndTest { DumpFileAsserts.assertOutput( context, dumpableBox, MuxerTestUtil.getExpectedDumpFilePath("mp4_without_empty_track.mp4")); } + + @Test + public void writeMp4File_withLargeNumberOfSamples_writesMoovBoxAtTheEndAndFreeBoxAtStart() + throws Exception { + String outputFilePath = temporaryFolder.newFile().getPath(); + Mp4Muxer muxer = new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)).build(); + try { + muxer.addMetadataEntry( + new Mp4TimestampData( + /* creationTimestampSeconds= */ 1_000_000L, + /* modificationTimestampSeconds= */ 5_000_000L)); + TrackToken token = muxer.addTrack(FAKE_VIDEO_FORMAT); + for (int i = 0; i < 50_000; i++) { + Pair sampleAndSampleInfo = + getFakeSampleAndSampleInfo(/* presentationTimeUs= */ i); + muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); + } + } finally { + muxer.close(); + } + + DumpableMp4Box dumpableBox = + new DumpableMp4Box(ByteBuffer.wrap(TestUtil.getByteArrayFromFilePath(outputFilePath))); + DumpFileAsserts.assertOutput( + context, + dumpableBox, + MuxerTestUtil.getExpectedDumpFilePath( + "mp4_with_moov_at_the_end_and_free_box_at_start.mp4")); + } + + @Test + public void writeMp4File_withAttemptStreamableMp4SetToFalse_writesMoovBoxAtTheEndAndNoFreeBox() + throws Exception { + String outputFilePath = temporaryFolder.newFile().getPath(); + Mp4Muxer muxer = + new Mp4Muxer.Builder(new FileOutputStream(outputFilePath)) + .setAttemptStreamableOutputEnabled(false) + .build(); + try { + muxer.addMetadataEntry( + new Mp4TimestampData( + /* creationTimestampSeconds= */ 1_000_000L, + /* modificationTimestampSeconds= */ 5_000_000L)); + TrackToken token = muxer.addTrack(FAKE_VIDEO_FORMAT); + for (int i = 0; i < 1_000; i++) { + Pair sampleAndSampleInfo = + getFakeSampleAndSampleInfo(/* presentationTimeUs= */ i); + muxer.writeSampleData(token, sampleAndSampleInfo.first, sampleAndSampleInfo.second); + } + } finally { + muxer.close(); + } + + DumpableMp4Box dumpableBox = + new DumpableMp4Box(ByteBuffer.wrap(TestUtil.getByteArrayFromFilePath(outputFilePath))); + DumpFileAsserts.assertOutput( + context, + dumpableBox, + MuxerTestUtil.getExpectedDumpFilePath("mp4_with_moov_at_the_end_and_no_free_box.mp4")); + } } diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_non_reference_3b.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_non_reference_3b.mp4.dump index de881800cf..d452da1c65 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_non_reference_3b.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_non_reference_3b.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 3966600 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=1000000, position=152546]] - getPosition(1983300) = [[timeUs=1000000, position=152546], [timeUs=2000000, position=238309]] - getPosition(3966600) = [[timeUs=3000000, position=353603]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=1000000, position=552554]] + getPosition(1983300) = [[timeUs=1000000, position=552554], [timeUs=2000000, position=638317]] + getPosition(3966600) = [[timeUs=3000000, position=753611]] numberOfTracks = 1 track 0: total output bytes = 416333 diff --git a/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_pyramid_3b.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_pyramid_3b.mp4.dump index 735c55c741..2ffbb4a1eb 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_pyramid_3b.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/bbb_800x640_768kbps_30fps_avc_pyramid_3b.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 3966600 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=1000000, position=147439]] - getPosition(1983300) = [[timeUs=1000000, position=147439], [timeUs=2000000, position=231666]] - getPosition(3966600) = [[timeUs=3000000, position=343992]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=1000000, position=547447]] + getPosition(1983300) = [[timeUs=1000000, position=547447], [timeUs=2000000, position=631674]] + getPosition(3966600) = [[timeUs=3000000, position=744000]] numberOfTracks = 1 track 0: total output bytes = 406132 diff --git a/libraries/test_data/src/test/assets/muxerdumps/h265_with_metadata_track.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/h265_with_metadata_track.mp4.dump index f5e9dad6cb..e51c271d43 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/h265_with_metadata_track.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/h265_with_metadata_track.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 66700 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(33350) = [[timeUs=0, position=44]] - getPosition(66700) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(33350) = [[timeUs=0, position=400052]] + getPosition(66700) = [[timeUs=0, position=400052]] numberOfTracks = 3 track 0: total output bytes = 387 diff --git a/libraries/test_data/src/test/assets/muxerdumps/hdr10-720p.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/hdr10-720p.mp4.dump index 66166ea2ff..29f8d1e1c7 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/hdr10-720p.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/hdr10-720p.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 4203200 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=1002944, position=1883462]] - getPosition(2101600) = [[timeUs=2003555, position=3784641], [timeUs=3003433, position=4026908]] - getPosition(4203200) = [[timeUs=4003266, position=6038533]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=1002944, position=2283470]] + getPosition(2101600) = [[timeUs=2003555, position=4184649], [timeUs=3003433, position=4426916]] + getPosition(4203200) = [[timeUs=4003266, position=6438541]] numberOfTracks = 2 track 0: total output bytes = 7944083 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_0_orientation.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_0_orientation.mp4.dump index 79fe4a79ba..d6e3f123ac 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_0_orientation.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_0_orientation.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_180_orientation.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_180_orientation.mp4.dump index 4091c61c0e..df8155d6b8 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_180_orientation.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_180_orientation.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_270_orientation.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_270_orientation.mp4.dump index ee484540a7..661abe051b 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_270_orientation.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_270_orientation.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_90_orientation.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_90_orientation.mp4.dump index 07ba6abadd..777c936c6d 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_90_orientation.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_90_orientation.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame.mp4.dump index 9816ec8587..55a53a82f9 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 3000 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=3000, position=100]] - getPosition(1500) = [[timeUs=0, position=44], [timeUs=3000, position=100]] - getPosition(3000) = [[timeUs=3000, position=100]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=3000, position=400108]] + getPosition(1500) = [[timeUs=0, position=400052], [timeUs=3000, position=400108]] + getPosition(3000) = [[timeUs=3000, position=400108]] numberOfTracks = 1 track 0: total output bytes = 224 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame_large_pts.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame_large_pts.mp4.dump index df157d8eb0..97e13a1a04 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame_large_pts.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_b_frame_large_pts.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 273900 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=273900, position=100]] - getPosition(136950) = [[timeUs=0, position=44], [timeUs=273900, position=100]] - getPosition(273900) = [[timeUs=273900, position=100]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=273900, position=400108]] + getPosition(136950) = [[timeUs=0, position=400052], [timeUs=273900, position=400108]] + getPosition(273900) = [[timeUs=273900, position=400108]] numberOfTracks = 1 track 0: total output bytes = 224 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_different_tracks_offset.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_different_tracks_offset.mp4.dump index b04d934074..0fd2192dc3 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_different_tracks_offset.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_different_tracks_offset.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 200 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=100, position=100]] - getPosition(100) = [[timeUs=100, position=100]] - getPosition(200) = [[timeUs=100, position=100]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=100, position=400108]] + getPosition(100) = [[timeUs=100, position=400108]] + getPosition(200) = [[timeUs=100, position=400108]] numberOfTracks = 2 track 0: total output bytes = 112 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_float_metadata.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_float_metadata.mp4.dump index 17ab052466..162d30cd41 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_float_metadata.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_float_metadata.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_frame_rate.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_frame_rate.mp4.dump index 37e58250f3..0927f7cec6 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_frame_rate.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_frame_rate.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_location.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_location.mp4.dump index 336942ce19..bb70e4d748 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_location.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_location.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_free_box_at_start.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_free_box_at_start.mp4.dump new file mode 100644 index 0000000000..7e1be4a7fe --- /dev/null +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_free_box_at_start.mp4.dump @@ -0,0 +1,35 @@ +ftyp (28 bytes): + Data = length 20, hash EF896440 +free (400008 bytes): + Data = length 400000, hash BBC7B001 +mdat (2800016 bytes): + Data = length 2800000, hash 7A1CC21 +moov (472634 bytes): + mvhd (108 bytes): + Data = length 100, hash CAE9466E + trak (472518 bytes): + tkhd (92 bytes): + Data = length 84, hash 59BEBEA1 + mdia (472418 bytes): + mdhd (32 bytes): + Data = length 24, hash 58568E23 + hdlr (44 bytes): + Data = length 36, hash A0852FF2 + minf (472334 bytes): + vmhd (20 bytes): + Data = length 12, hash EE830681 + dinf (36 bytes): + Data = length 28, hash D535436B + stbl (472270 bytes): + stsd (166 bytes): + Data = length 158, hash 11532063 + stts (72008 bytes): + Data = length 72000, hash FA47C748 + stsz (200020 bytes): + Data = length 200012, hash 719AE8EE + stsc (28 bytes): + Data = length 20, hash 2BB02571 + co64 (24 bytes): + Data = length 16, hash E4EE6662 + stss (200016 bytes): + Data = length 200008, hash 8ABF61C3 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_no_free_box.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_no_free_box.mp4.dump new file mode 100644 index 0000000000..d0ed07b796 --- /dev/null +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_moov_at_the_end_and_no_free_box.mp4.dump @@ -0,0 +1,33 @@ +ftyp (28 bytes): + Data = length 20, hash EF896440 +mdat (56016 bytes): + Data = length 56000, hash F535891 +moov (10074 bytes): + mvhd (108 bytes): + Data = length 100, hash E6A54065 + trak (9958 bytes): + tkhd (92 bytes): + Data = length 84, hash CB9C1A18 + mdia (9858 bytes): + mdhd (32 bytes): + Data = length 24, hash 463A595A + hdlr (44 bytes): + Data = length 36, hash A0852FF2 + minf (9774 bytes): + vmhd (20 bytes): + Data = length 12, hash EE830681 + dinf (36 bytes): + Data = length 28, hash D535436B + stbl (9710 bytes): + stsd (166 bytes): + Data = length 158, hash 11532063 + stts (1448 bytes): + Data = length 1440, hash 4C9792F5 + stsz (4020 bytes): + Data = length 4012, hash 537BD986 + stsc (28 bytes): + Data = length 20, hash 932CC0C9 + co64 (24 bytes): + Data = length 16, hash E4EE4D2E + stss (4016 bytes): + Data = length 4008, hash 729103FF diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_null_location.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_null_location.mp4.dump index 79fe4a79ba..d6e3f123ac 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_null_location.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_null_location.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_same_tracks_offset.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_same_tracks_offset.mp4.dump index b04d934074..0fd2192dc3 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_same_tracks_offset.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_same_tracks_offset.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 200 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=100, position=100]] - getPosition(100) = [[timeUs=100, position=100]] - getPosition(200) = [[timeUs=100, position=100]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=100, position=400108]] + getPosition(100) = [[timeUs=100, position=400108]] + getPosition(200) = [[timeUs=100, position=400108]] numberOfTracks = 2 track 0: total output bytes = 112 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_samples_and_metadata.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_samples_and_metadata.mp4.dump index 3dbc845250..5d4fd1ad51 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_samples_and_metadata.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_samples_and_metadata.mp4.dump @@ -1,7 +1,5 @@ ftyp (28 bytes): Data = length 20, hash EF896440 -mdat (72 bytes): - Data = length 56, hash DB5662FB moov (873 bytes): mvhd (108 bytes): Data = length 100, hash 2613A5C @@ -37,8 +35,12 @@ moov (873 bytes): stsc (28 bytes): Data = length 20, hash 8F6E8285 co64 (24 bytes): - Data = length 16, hash E4EE4D2E + Data = length 16, hash E4EE6662 stss (20 bytes): Data = length 12, hash EE911E03 uuid (2853 bytes): Data = length 2845, hash 52AF0F9D +free (396282 bytes): + Data = length 396274, hash 946025C1 +mdat (72 bytes): + Data = length 56, hash DB5662FB diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_string_metadata.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_string_metadata.mp4.dump index 67ca0d5f00..7302d44094 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_string_metadata.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_string_metadata.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 0 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] - getPosition(0) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(0) = [[timeUs=0, position=400052]] numberOfTracks = 1 track 0: total output bytes = 56 diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_xmp.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_xmp.mp4.dump index d34937de98..d53f3030be 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_with_xmp.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_with_xmp.mp4.dump @@ -1,7 +1,5 @@ ftyp (28 bytes): Data = length 20, hash EF896440 -mdat (72 bytes): - Data = length 56, hash DB5662FB moov (658 bytes): mvhd (108 bytes): Data = length 100, hash 2613A5C @@ -28,8 +26,12 @@ moov (658 bytes): stsc (28 bytes): Data = length 20, hash 8F6E8285 co64 (24 bytes): - Data = length 16, hash E4EE4D2E + Data = length 16, hash E4EE6662 stss (20 bytes): Data = length 12, hash EE911E03 uuid (2853 bytes): Data = length 2845, hash 52AF0F9D +free (396497 bytes): + Data = length 396489, hash 429891F +mdat (72 bytes): + Data = length 56, hash DB5662FB diff --git a/libraries/test_data/src/test/assets/muxerdumps/mp4_without_empty_track.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/mp4_without_empty_track.mp4.dump index 29077ca72e..0a6174d56b 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/mp4_without_empty_track.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/mp4_without_empty_track.mp4.dump @@ -1,7 +1,5 @@ ftyp (28 bytes): Data = length 20, hash EF896440 -mdat (128 bytes): - Data = length 112, hash 1AAF8FF5 moov (674 bytes): mvhd (108 bytes): Data = length 100, hash 105FA889 @@ -28,6 +26,10 @@ moov (674 bytes): stsc (28 bytes): Data = length 20, hash 8F7C9A06 co64 (24 bytes): - Data = length 16, hash E4EE4D2E + Data = length 16, hash E4EE6662 stss (24 bytes): Data = length 16, hash 7940D386 +free (399334 bytes): + Data = length 399326, hash 3C185041 +mdat (128 bytes): + Data = length 112, hash 1AAF8FF5 diff --git a/libraries/test_data/src/test/assets/muxerdumps/partial_hdr10-720p.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/partial_hdr10-720p.mp4.dump index 0fca9a4300..991d4b778e 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/partial_hdr10-720p.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/partial_hdr10-720p.mp4.dump @@ -1,14 +1,14 @@ seekMap: isSeekable = true - duration = 4117500 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=1002944, position=1883462]] - getPosition(2058750) = [[timeUs=2003555, position=3784641], [timeUs=3003433, position=4026908]] - getPosition(4117500) = [[timeUs=3003433, position=4026908]] + duration = 4137400 + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=1002944, position=2283470]] + getPosition(2068700) = [[timeUs=2003555, position=4184649], [timeUs=3003433, position=4426916]] + getPosition(4137400) = [[timeUs=4003266, position=6438541]] numberOfTracks = 2 track 0: - total output bytes = 5911788 - sample count = 94 + total output bytes = 7822354 + sample count = 125 format 0: id = 1 sampleMimeType = video/hevc @@ -17,7 +17,7 @@ track 0: maxNumReorderSamples = 0 width = 1280 height = 720 - frameRate = 30.28936 + frameRate = 30.21221 colorInfo: colorSpace = 6 colorRange = 2 @@ -401,8 +401,132 @@ track 0: data = length 54110, hash 7B27C656 sample 93: time = 3103411 - flags = 536870912 + flags = 0 data = length 68308, hash C7F4AE80 + sample 94: + time = 3136744 + flags = 0 + data = length 67629, hash 48E625B6 + sample 95: + time = 3170100 + flags = 0 + data = length 66968, hash D46F0E01 + sample 96: + time = 3203400 + flags = 0 + data = length 53022, hash 91852F32 + sample 97: + time = 3236722 + flags = 0 + data = length 66729, hash 12CA7617 + sample 98: + time = 3270055 + flags = 0 + data = length 53556, hash 904B00CF + sample 99: + time = 3303377 + flags = 0 + data = length 63459, hash AB813676 + sample 100: + time = 3336711 + flags = 0 + data = length 63637, hash 8B0750F6 + sample 101: + time = 3370033 + flags = 0 + data = length 64700, hash 8922E5BE + sample 102: + time = 3403366 + flags = 0 + data = length 54680, hash 4F49EB3D + sample 103: + time = 3436700 + flags = 0 + data = length 62600, hash 9DF2F9F5 + sample 104: + time = 3470022 + flags = 0 + data = length 69506, hash DB702311 + sample 105: + time = 3503355 + flags = 0 + data = length 50277, hash 1034F0A6 + sample 106: + time = 3536711 + flags = 0 + data = length 52100, hash 33745B51 + sample 107: + time = 3570000 + flags = 0 + data = length 65067, hash F73FE2C7 + sample 108: + time = 3603333 + flags = 0 + data = length 68940, hash 4331DA16 + sample 109: + time = 3636666 + flags = 0 + data = length 55215, hash 68087A40 + sample 110: + time = 3670000 + flags = 0 + data = length 56090, hash 2F483911 + sample 111: + time = 3703322 + flags = 0 + data = length 58356, hash D7D190C6 + sample 112: + time = 3736644 + flags = 0 + data = length 57368, hash 2F6B7918 + sample 113: + time = 3769977 + flags = 0 + data = length 56591, hash 19B696D2 + sample 114: + time = 3803300 + flags = 0 + data = length 54748, hash 7E0CE70E + sample 115: + time = 3836622 + flags = 0 + data = length 73133, hash CFA46EE4 + sample 116: + time = 3869955 + flags = 0 + data = length 52577, hash 5E174B5 + sample 117: + time = 3903300 + flags = 0 + data = length 74756, hash 5A571060 + sample 118: + time = 3936611 + flags = 0 + data = length 67171, hash 6F13FB2C + sample 119: + time = 3969933 + flags = 0 + data = length 42130, hash DAE94DB2 + sample 120: + time = 4003266 + flags = 1 + data = length 120199, hash 32DEA792 + sample 121: + time = 4036600 + flags = 0 + data = length 51028, hash FC7AF64F + sample 122: + time = 4069911 + flags = 0 + data = length 51879, hash 74852E0E + sample 123: + time = 4103244 + flags = 0 + data = length 51443, hash B735512A + sample 124: + time = 4137444 + flags = 536870912 + data = length 65012, hash DB29A2CD track 1: total output bytes = 131233 sample count = 192 diff --git a/libraries/test_data/src/test/assets/muxerdumps/sample_av1.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/sample_av1.mp4.dump index df405fb466..5e5fc87e26 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/sample_av1.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/sample_av1.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 1064600 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(532300) = [[timeUs=0, position=44]] - getPosition(1064600) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(532300) = [[timeUs=0, position=400052]] + getPosition(1064600) = [[timeUs=0, position=400052]] numberOfTracks = 2 track 0: total output bytes = 69084 diff --git a/libraries/test_data/src/test/assets/muxerdumps/sample_no_bframes.mp4.dump b/libraries/test_data/src/test/assets/muxerdumps/sample_no_bframes.mp4.dump index e67cdbc2ce..fb97007c12 100644 --- a/libraries/test_data/src/test/assets/muxerdumps/sample_no_bframes.mp4.dump +++ b/libraries/test_data/src/test/assets/muxerdumps/sample_no_bframes.mp4.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 1065600 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(532800) = [[timeUs=0, position=44]] - getPosition(1065600) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(532800) = [[timeUs=0, position=400052]] + getPosition(1065600) = [[timeUs=0, position=400052]] numberOfTracks = 2 track 0: total output bytes = 9529 diff --git a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_no_bframes.mp4/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_no_bframes.mp4/transmuxed_with_inappmuxer.dump index 2827128174..ef05d8fe75 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_no_bframes.mp4/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/mp4/sample_no_bframes.mp4/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 1065600 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44]] - getPosition(532800) = [[timeUs=0, position=44]] - getPosition(1065600) = [[timeUs=0, position=44]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052]] + getPosition(532800) = [[timeUs=0, position=400052]] + getPosition(1065600) = [[timeUs=0, position=400052]] numberOfTracks = 2 track 0: total output bytes = 301222 diff --git a/libraries/test_data/src/test/assets/transformerdumps/ts/sample_h264.ts/transmuxed_with_inappmuxer.dump b/libraries/test_data/src/test/assets/transformerdumps/ts/sample_h264.ts/transmuxed_with_inappmuxer.dump index 03ac9e6c82..de83c1ee6b 100644 --- a/libraries/test_data/src/test/assets/transformerdumps/ts/sample_h264.ts/transmuxed_with_inappmuxer.dump +++ b/libraries/test_data/src/test/assets/transformerdumps/ts/sample_h264.ts/transmuxed_with_inappmuxer.dump @@ -1,10 +1,10 @@ seekMap: isSeekable = true duration = 966600 - getPosition(0) = [[timeUs=0, position=44]] - getPosition(1) = [[timeUs=0, position=44], [timeUs=333333, position=16035]] - getPosition(483300) = [[timeUs=333333, position=16035], [timeUs=666666, position=28785]] - getPosition(966600) = [[timeUs=666666, position=28785]] + getPosition(0) = [[timeUs=0, position=400052]] + getPosition(1) = [[timeUs=0, position=400052], [timeUs=333333, position=416043]] + getPosition(483300) = [[timeUs=333333, position=416043], [timeUs=666666, position=428793]] + getPosition(966600) = [[timeUs=666666, position=428793]] numberOfTracks = 1 track 0: total output bytes = 41647