FragmentedMp4Muxer


@UnstableApi
class FragmentedMp4Muxer : AutoCloseable


A muxer for creating a fragmented MP4 file.

Muxer supports muxing of:

  • Video Codecs:
    • AV1
    • MPEG-4
    • H.263
    • H.264 (AVC)
    • H.265 (HEVC)
    • VP9
    • APV
  • Audio Codecs:
    • AAC
    • AMR-NB (Narrowband AMR)
    • AMR-WB (Wideband AMR)
    • Opus
    • Vorbis
  • Metadata

All the operations are performed on the caller thread.

To create a fragmented MP4 file, the caller must:

  • Add tracks using addTrack which will return a track id.
  • Use the associated track id when writing samples for that track.
  • close the muxer when all data has been written.

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

A builder for FragmentedMp4Muxer instances.

Constants

const Long

The default fragment duration.

const ImmutableList<String!>!

A list of supported audio sample MIME types.

const ImmutableList<String!>!

A list of supported video sample MIME types.

Public functions

Unit

Adds metadata about the output file.

Int
addTrack(format: Format!)

Adds a track of the given media format.

Unit

Closes the file.

Unit
writeSampleData(
    trackId: Int,
    byteBuffer: ByteBuffer!,
    bufferInfo: MediaCodec.BufferInfo!
)

Writes encoded sample data.

Constants

DEFAULT_FRAGMENT_DURATION_MS

const val DEFAULT_FRAGMENT_DURATION_MS = 2000: Long

The default fragment duration.

SUPPORTED_AUDIO_SAMPLE_MIME_TYPES

const val SUPPORTED_AUDIO_SAMPLE_MIME_TYPESImmutableList<String!>!

A list of supported audio sample MIME types.

SUPPORTED_VIDEO_SAMPLE_MIME_TYPES

const val SUPPORTED_VIDEO_SAMPLE_MIME_TYPESImmutableList<String!>!

A list of supported video sample MIME types.

Public functions

addMetadataEntry

fun addMetadataEntry(metadataEntry: Metadata.Entry!): Unit

Adds metadata about the output file.

List of supported metadata entries:

Parameters
metadataEntry: Metadata.Entry!

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

addTrack

fun addTrack(format: Format!): Int

Adds a track of the given media format.

All tracks must be added before writing any samples.

Parameters
format: Format!

The Format of the track.

Returns
Int

A track id for this track, which should be passed to writeSampleData.

close

fun close(): Unit

Closes the file.

The muxer cannot be used anymore once this method returns.

Throws
androidx.media3.muxer.MuxerException

If the muxer fails to finish writing the output.

writeSampleData

fun writeSampleData(
    trackId: Int,
    byteBuffer: ByteBuffer!,
    bufferInfo: MediaCodec.BufferInfo!
): Unit

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
trackId: Int

The track id 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.

bufferInfo: MediaCodec.BufferInfo!

The BufferInfo related to this sample.

Throws
androidx.media3.muxer.MuxerException

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