diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/BasicMp4Writer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/BasicMp4Writer.java index 895934e9e4..47c12fa0cd 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/BasicMp4Writer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/BasicMp4Writer.java @@ -25,7 +25,7 @@ import static java.lang.Math.min; import android.media.MediaCodec.BufferInfo; import androidx.media3.common.Format; import androidx.media3.common.util.Util; -import androidx.media3.muxer.Mp4Muxer.TrackToken; +import androidx.media3.muxer.Muxer.TrackToken; import com.google.common.collect.Range; import java.io.FileOutputStream; import java.io.IOException; diff --git a/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Writer.java b/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Writer.java index 26de72528f..36c9bd8fb2 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Writer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/FragmentedMp4Writer.java @@ -32,7 +32,7 @@ import android.media.MediaCodec.BufferInfo; import androidx.media3.common.Format; import androidx.media3.common.MimeTypes; import androidx.media3.common.util.Util; -import androidx.media3.muxer.Mp4Muxer.TrackToken; +import androidx.media3.muxer.Muxer.TrackToken; import com.google.common.collect.ImmutableList; import java.io.FileOutputStream; import java.io.IOException; 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 f9e0ca3db0..76d3d893a4 100644 --- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java +++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Muxer.java @@ -70,9 +70,7 @@ import java.nio.ByteBuffer; * */ @UnstableApi -public final class Mp4Muxer { - /** A token representing an added track. */ - public interface TrackToken {} +public final class Mp4Muxer implements Muxer { /** Behavior for the last sample duration. */ @Documented @@ -223,6 +221,22 @@ public final class Mp4Muxer { || metadata instanceof XmpData; } + /** + * {@inheritDoc} + * + *
Tracks can be added at any point before the muxer is closed, even after writing samples to + * other tracks. + * + *
The order of tracks remains same in which they are added. + * + * @param format The {@link Format} for the track. + * @return A unique {@link TrackToken}. It should be used in {@link #writeSampleData}. + */ + @Override + public TrackToken addTrack(Format format) { + return addTrack(/* sortKey= */ 1, format); + } + /** * Adds a track of the given media format. * @@ -242,7 +256,7 @@ public final class Mp4Muxer { } /** - * Writes encoded sample data. + * {@inheritDoc} * *
The samples are cached and are written in batches so the caller must not change/release the * {@link ByteBuffer} and the {@link BufferInfo} after calling this method. @@ -254,13 +268,14 @@ public final class Mp4Muxer { * @param bufferInfo The {@link BufferInfo} related to this sample. * @throws IOException If there is any error while writing data to the disk. */ + @Override public void writeSampleData(TrackToken trackToken, ByteBuffer byteBuffer, BufferInfo bufferInfo) throws IOException { mp4Writer.writeSampleData(trackToken, byteBuffer, bufferInfo); } /** - * Adds metadata for the output file. + * {@inheritDoc} * *
List of supported {@linkplain Metadata.Entry metadata entries}:
*
@@ -277,12 +292,13 @@ public final class Mp4Muxer {
* @param metadata The {@linkplain Metadata.Entry metadata}. An {@link IllegalArgumentException}
* is throw if the {@linkplain Metadata.Entry metadata} is not supported.
*/
+ @Override
public void addMetadata(Metadata.Entry metadata) {
checkArgument(isMetadataSupported(metadata), "Unsupported metadata");
metadataCollector.addMetadata(metadata);
}
- /** Closes the MP4 file. */
+ @Override
public void close() throws IOException {
mp4Writer.close();
}
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 e20eef2c7a..9b0c1091cd 100644
--- a/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java
+++ b/libraries/muxer/src/main/java/androidx/media3/muxer/Mp4Writer.java
@@ -22,7 +22,7 @@ import android.media.MediaCodec.BufferInfo;
import androidx.media3.common.C;
import androidx.media3.common.Format;
import androidx.media3.common.MimeTypes;
-import androidx.media3.muxer.Mp4Muxer.TrackToken;
+import androidx.media3.muxer.Muxer.TrackToken;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.nio.ByteBuffer;
@@ -41,7 +41,7 @@ import java.util.List;
void close() throws IOException;
- class Track implements Mp4Muxer.TrackToken, Mp4MoovStructure.TrackMetadataProvider {
+ class Track implements TrackToken, Mp4MoovStructure.TrackMetadataProvider {
public final Format format;
public final int sortKey;
public final List