FragmentedMp4Muxer


@UnstableApi
public final class FragmentedMp4Muxer implements Muxer


A muxer for creating a fragmented MP4 file.

The muxer supports writing H264, H265 and AV1 video, AAC audio and metadata.

All the operations are performed on the caller thread.

To create a fragmented MP4 file, the caller must:

Some key points:

  • All tracks must be added before writing any samples.
  • The caller is responsible for ensuring that samples of different track types are well interleaved by calling writeSampleData in an order that interleaves samples from different tracks.

Summary

Nested types

public final class FragmentedMp4Muxer.Builder

A builder for FragmentedMp4Muxer instances.

Constants

static final long

The default fragment duration.

Public methods

void

Adds metadata about the output file.

Muxer.TrackToken
addTrack(Format format)

Adds a track of the given media format.

void

Closes the file.

void
writeSampleData(
    Muxer.TrackToken trackToken,
    ByteBuffer byteBuffer,
    MediaCodec.BufferInfo bufferInfo
)

Writes encoded sample data.

Constants

DEFAULT_FRAGMENT_DURATION_MS

public static final long DEFAULT_FRAGMENT_DURATION_MS = 2000

The default fragment duration.

Public methods

addMetadataEntry

public void addMetadataEntry(Metadata.Entry metadataEntry)

Adds metadata about the output file.

List of supported metadata entries:

Parameters
Metadata.Entry metadataEntry

The metadata. An is thrown if the metadata is not supported.

addTrack

public Muxer.TrackToken addTrack(Format format)

Adds a track of the given media format.

Parameters
Format format

The Format of the track.

Returns
Muxer.TrackToken

The TrackToken for this track, which should be passed to writeSampleData.

Throws
androidx.media3.muxer.Muxer.MuxerException

If the muxer encounters a problem while adding the track.

close

public void close()

Closes the file.

The muxer cannot be used anymore once this method returns.

Throws
androidx.media3.muxer.Muxer.MuxerException

If the muxer fails to finish writing the output.

writeSampleData

public void writeSampleData(
    Muxer.TrackToken trackToken,
    ByteBuffer byteBuffer,
    MediaCodec.BufferInfo bufferInfo
)

Writes encoded sample data.

Samples are written to the disk in batches. If sample copying is disabled, the byteBuffer and the bufferInfo must not be modified after calling this method. Otherwise, they are copied and it is safe to modify them after this method returns.

Note: Out of order B-frames are currently not supported.

Parameters
Muxer.TrackToken trackToken

The TrackToken for which this sample is being written.

ByteBuffer byteBuffer

The encoded sample. The muxer takes ownership of the buffer if sample copying is disabled. Otherwise, the position of the buffer is updated but the caller retains ownership.

MediaCodec.BufferInfo bufferInfo

The BufferInfo related to this sample.

Throws
androidx.media3.muxer.Muxer.MuxerException

If there is any error while writing data to the disk.