MediaParser  |  API reference  |  Android Developers

Parses media container formats and extracts contained media samples and metadata.

This class provides access to a battery of low-level media container parsers. Each instance of this class is associated to a specific media parser implementation which is suitable for extraction from a specific media container format. The media parser implementation assignment depends on the factory method (see create(OutputConsumer, String) and createByName(String, OutputConsumer)) used to create the instance.

Users must implement the following to use this class.

The following code snippet provides a rudimentary OutputConsumer sample implementation which extracts and publishes all video samples:

Nested classes

interface MediaParser.InputReader

Provides input data to MediaParser

interface MediaParser.OutputConsumer

Receives extracted media sample data and metadata from MediaParser

class MediaParser.ParsingException

Thrown when an error occurs while parsing a media stream. 

class MediaParser.SeekMap

Maps seek positions to SeekPoints in the stream. 

class MediaParser.SeekPoint

Defines a seek point in a media stream. 

interface MediaParser.SeekableInputReader

InputReader that allows setting the read position. 

class MediaParser.TrackData

Holds information associated with a track. 

class MediaParser.UnrecognizedInputFormatException

Thrown if all parser implementations provided to MediaParser.create(OutputConsumer, String) failed to sniff the input content. 

Constants

String PARAMETER_ADTS_ENABLE_CBR_SEEKING

Sets whether constant bitrate seeking should be enabled for ADTS parsing.

String PARAMETER_AMR_ENABLE_CBR_SEEKING

Sets whether constant bitrate seeking should be enabled for AMR.

String PARAMETER_FLAC_DISABLE_ID3

Sets whether the ID3 track should be disabled for FLAC.

String PARAMETER_MATROSKA_DISABLE_CUES_SEEKING

Sets whether Matroska parsing should avoid seeking to the cues element.

String PARAMETER_MP3_DISABLE_ID3

Sets whether the ID3 track should be disabled for MP3.

String PARAMETER_MP3_ENABLE_CBR_SEEKING

Sets whether constant bitrate seeking should be enabled for MP3.

String PARAMETER_MP3_ENABLE_INDEX_SEEKING

Sets whether MP3 parsing should generate a time-to-byte mapping.

String PARAMETER_MP4_IGNORE_EDIT_LISTS

Sets whether MP4 parsing should ignore edit lists.

String PARAMETER_MP4_IGNORE_TFDT_BOX

Sets whether MP4 parsing should ignore the tfdt box.

String PARAMETER_MP4_TREAT_VIDEO_FRAMES_AS_KEYFRAMES

Sets whether MP4 parsing should treat all video frames as key frames.

String PARAMETER_TS_ALLOW_NON_IDR_AVC_KEYFRAMES

Sets whether TS should treat samples consisting of non-IDR I slices as synchronization samples (key-frames).

String PARAMETER_TS_DETECT_ACCESS_UNITS

Sets whether TS parsing should split AVC stream into access units based on slice headers.

String PARAMETER_TS_ENABLE_HDMV_DTS_AUDIO_STREAMS

Sets whether TS parsing should handle HDMV DTS audio streams.

String PARAMETER_TS_IGNORE_AAC_STREAM

Sets whether TS parsing should ignore AAC elementary streams.

String PARAMETER_TS_IGNORE_AVC_STREAM

Sets whether TS parsing should ignore AVC elementary streams.

String PARAMETER_TS_IGNORE_SPLICE_INFO_STREAM

Sets whether TS parsing should ignore splice information streams.

String PARAMETER_TS_MODE

Sets the operation mode for TS parsing.

String PARSER_NAME_AC3

Parser for the AC-3 container format, as defined in Digital Audio Compression Standard (AC-3).

String PARSER_NAME_AC4

Parser for the AC-4 container format, as defined by Dolby AC-4: Audio delivery for Next-Generation Entertainment Services.

String PARSER_NAME_ADTS

Parser for the ADTS container format, as defined in ISO/IEC 13818-7.

String PARSER_NAME_AMR

Parser for the AMR container format, as defined in RFC 4867.

String PARSER_NAME_FLAC

Parser for the FLAC container format, as defined in the spec.

String PARSER_NAME_FLV

Parser for the FLV container format, as defined in Adobe Flash Video File Format Specification.

String PARSER_NAME_FMP4

Parser for fragmented files using the MP4 container format, as defined in ISO/IEC 14496-12.

String PARSER_NAME_MATROSKA

Parser for the Matroska container format, as defined in the spec.

String PARSER_NAME_MP3

Parser for the MP3 container format, as defined in ISO/IEC 11172-3.

String PARSER_NAME_MP4

Parser for non-fragmented files using the MP4 container format, as defined in ISO/IEC 14496-12.

String PARSER_NAME_OGG

Parser for the OGG container format, as defined in RFC 3533.

String PARSER_NAME_PS

Parser for the PS container format, as defined in ISO/IEC 11172-1.

String PARSER_NAME_TS

Parser for the TS container format, as defined in ISO/IEC 13818-1.

String PARSER_NAME_UNKNOWN

Parser name returned by getParserName() when no parser has been selected yet.

String PARSER_NAME_WAV

Parser for the WAV container format, as defined in Multimedia Programming Interface and Data Specifications.

int SAMPLE_FLAG_DECODE_ONLY

Indicates that the sample should be decoded but not rendered.

int SAMPLE_FLAG_ENCRYPTED

Indicates that the sample is (at least partially) encrypted.

int SAMPLE_FLAG_HAS_SUPPLEMENTAL_DATA

Indicates that the sample has supplemental data.

int SAMPLE_FLAG_KEY_FRAME

Indicates that the sample holds a synchronization sample.

int SAMPLE_FLAG_LAST_SAMPLE

Indicates that the sample is known to contain the last media sample of the stream.

Public methods

boolean advance(MediaParser.SeekableInputReader seekableInputReader)

Makes progress in the extraction of the input media stream, unless the end of the input has been reached.

static MediaParser create(MediaParser.OutputConsumer outputConsumer, String... parserNames)

Creates an instance whose backing parser will be selected by sniffing the content during the first advance(SeekableInputReader) call.

static MediaParser createByName(String name, MediaParser.OutputConsumer outputConsumer)

Creates an instance backed by the parser with the given name.

LogSessionId getLogSessionId()
String getParserName()

Returns the name of the backing parser implementation.

static List<String> getParserNames(MediaFormat mediaFormat)

Returns an immutable list with the names of the parsers that are suitable for container formats with the given MediaFormat.

void release()

Releases any acquired resources.

void seek(MediaParser.SeekPoint seekPoint)

Seeks within the media container being extracted.

void setLogSessionId(LogSessionId logSessionId)
MediaParser setParameter(String parameterName, Object value)

Sets parser-specific parameters which allow customizing behavior.

boolean supportsParameter(String parameterName)

Returns whether the given parameterName is supported by this parser.

Inherited methods

From class java.lang.Object

Object clone()

Creates and returns a copy of this object.

boolean equals(Object obj)

Indicates whether some other object is "equal to" this one.

void finalize()

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.

final Class<?> getClass()

Returns the runtime class of this Object.

int hashCode()

Returns a hash code value for the object.

final void notify()

Wakes up a single thread that is waiting on this object's monitor.

final void notifyAll()

Wakes up all threads that are waiting on this object's monitor.

String toString()

Returns a string representation of the object.

final void wait(long timeoutMillis, int nanos)

Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

final void wait(long timeoutMillis)

Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

final void wait()

Causes the current thread to wait until it is awakened, typically by being notified or interrupted.

Constants

PARAMETER_ADTS_ENABLE_CBR_SEEKING

public static final String PARAMETER_ADTS_ENABLE_CBR_SEEKING

Sets whether constant bitrate seeking should be enabled for ADTS parsing. boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.adts.enableCbrSeeking"

PARAMETER_AMR_ENABLE_CBR_SEEKING

public static final String PARAMETER_AMR_ENABLE_CBR_SEEKING

Sets whether constant bitrate seeking should be enabled for AMR. boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.amr.enableCbrSeeking"

PARAMETER_FLAC_DISABLE_ID3

public static final String PARAMETER_FLAC_DISABLE_ID3

Sets whether the ID3 track should be disabled for FLAC. boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.flac.disableId3"

PARAMETER_MATROSKA_DISABLE_CUES_SEEKING

public static final String PARAMETER_MATROSKA_DISABLE_CUES_SEEKING

Sets whether Matroska parsing should avoid seeking to the cues element. boolean expected. Default value is false.

If this flag is enabled and the cues element occurs after the first cluster, then the media is treated as unseekable.

Constant Value: "android.media.mediaparser.matroska.disableCuesSeeking"

PARAMETER_MP3_DISABLE_ID3

public static final String PARAMETER_MP3_DISABLE_ID3

Sets whether the ID3 track should be disabled for MP3. boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.mp3.disableId3"

PARAMETER_MP3_ENABLE_CBR_SEEKING

public static final String PARAMETER_MP3_ENABLE_CBR_SEEKING

Sets whether constant bitrate seeking should be enabled for MP3. boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.mp3.enableCbrSeeking"

PARAMETER_MP3_ENABLE_INDEX_SEEKING

public static final String PARAMETER_MP3_ENABLE_INDEX_SEEKING

Sets whether MP3 parsing should generate a time-to-byte mapping. boolean expected. Default value is false.

Enabling this flag may require to scan a significant portion of the file to compute a seek point. Therefore, it should only be used if:

  • the file is small, or
  • the bitrate is variable (or the type of bitrate is unknown) and the seeking metadata provided in the file is not precise enough (or is not present).

Constant Value: "android.media.mediaparser.mp3.enableIndexSeeking"

PARAMETER_MP4_IGNORE_EDIT_LISTS

public static final String PARAMETER_MP4_IGNORE_EDIT_LISTS

Sets whether MP4 parsing should ignore edit lists. boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.mp4.ignoreEditLists"

PARAMETER_MP4_IGNORE_TFDT_BOX

public static final String PARAMETER_MP4_IGNORE_TFDT_BOX

Sets whether MP4 parsing should ignore the tfdt box. boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.mp4.ignoreTfdtBox"

PARAMETER_MP4_TREAT_VIDEO_FRAMES_AS_KEYFRAMES

public static final String PARAMETER_MP4_TREAT_VIDEO_FRAMES_AS_KEYFRAMES

Sets whether MP4 parsing should treat all video frames as key frames. boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.mp4.treatVideoFramesAsKeyframes"

PARAMETER_TS_ALLOW_NON_IDR_AVC_KEYFRAMES

public static final String PARAMETER_TS_ALLOW_NON_IDR_AVC_KEYFRAMES

Sets whether TS should treat samples consisting of non-IDR I slices as synchronization samples (key-frames). boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.ts.allowNonIdrAvcKeyframes"

PARAMETER_TS_DETECT_ACCESS_UNITS

public static final String PARAMETER_TS_DETECT_ACCESS_UNITS

Sets whether TS parsing should split AVC stream into access units based on slice headers. boolean expected. Default value is false.

This flag should be left disabled if the stream contains access units delimiters in order to avoid unnecessary computational costs.

Constant Value: "android.media.mediaparser.ts.ignoreDetectAccessUnits"

PARAMETER_TS_ENABLE_HDMV_DTS_AUDIO_STREAMS

public static final String PARAMETER_TS_ENABLE_HDMV_DTS_AUDIO_STREAMS

Sets whether TS parsing should handle HDMV DTS audio streams. boolean expected. Default value is false.

Enabling this flag will disable the detection of SCTE subtitles.

Constant Value: "android.media.mediaparser.ts.enableHdmvDtsAudioStreams"

PARAMETER_TS_IGNORE_AAC_STREAM

public static final String PARAMETER_TS_IGNORE_AAC_STREAM

Sets whether TS parsing should ignore AAC elementary streams. boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.ts.ignoreAacStream"

PARAMETER_TS_IGNORE_AVC_STREAM

public static final String PARAMETER_TS_IGNORE_AVC_STREAM

Sets whether TS parsing should ignore AVC elementary streams. boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.ts.ignoreAvcStream"

PARAMETER_TS_IGNORE_SPLICE_INFO_STREAM

public static final String PARAMETER_TS_IGNORE_SPLICE_INFO_STREAM

Sets whether TS parsing should ignore splice information streams. boolean expected. Default value is false.

Constant Value: "android.media.mediaparser.ts.ignoreSpliceInfoStream"

PARAMETER_TS_MODE

public static final String PARAMETER_TS_MODE

Sets the operation mode for TS parsing. String expected. Valid values are "single_pmt", "multi_pmt", and "hls". Default value is "single_pmt".

The operation modes alter the way TS behaves so that it can handle certain kinds of commonly-occurring malformed media.

  • "single_pmt": Only the first found PMT is parsed. Others are ignored, even if more PMTs are declared in the PAT.
  • "multi_pmt": Behave as described in ISO/IEC 13818-1.
  • "hls": Enable "single_pmt" mode, and ignore continuity counters.

Constant Value: "android.media.mediaparser.ts.mode"

PARSER_NAME_AC3

public static final String PARSER_NAME_AC3

Parser for the AC-3 container format, as defined in Digital Audio Compression Standard (AC-3).

Constant Value: "android.media.mediaparser.Ac3Parser"

PARSER_NAME_AC4

public static final String PARSER_NAME_AC4

Parser for the AC-4 container format, as defined by Dolby AC-4: Audio delivery for Next-Generation Entertainment Services.

Constant Value: "android.media.mediaparser.Ac4Parser"

PARSER_NAME_ADTS

public static final String PARSER_NAME_ADTS

Parser for the ADTS container format, as defined in ISO/IEC 13818-7.

Constant Value: "android.media.mediaparser.AdtsParser"

PARSER_NAME_AMR

public static final String PARSER_NAME_AMR

Parser for the AMR container format, as defined in RFC 4867.

Constant Value: "android.media.mediaparser.AmrParser"

PARSER_NAME_FLAC

public static final String PARSER_NAME_FLAC

Parser for the FLAC container format, as defined in the spec.

Constant Value: "android.media.mediaparser.FlacParser"

PARSER_NAME_FLV

public static final String PARSER_NAME_FLV

Parser for the FLV container format, as defined in Adobe Flash Video File Format Specification.

Constant Value: "android.media.mediaparser.FlvParser"

PARSER_NAME_FMP4

public static final String PARSER_NAME_FMP4

Parser for fragmented files using the MP4 container format, as defined in ISO/IEC 14496-12.

Constant Value: "android.media.mediaparser.FragmentedMp4Parser"

PARSER_NAME_MATROSKA

public static final String PARSER_NAME_MATROSKA

Parser for the Matroska container format, as defined in the spec.

Constant Value: "android.media.mediaparser.MatroskaParser"

PARSER_NAME_MP3

public static final String PARSER_NAME_MP3

Parser for the MP3 container format, as defined in ISO/IEC 11172-3.

Constant Value: "android.media.mediaparser.Mp3Parser"

PARSER_NAME_MP4

public static final String PARSER_NAME_MP4

Parser for non-fragmented files using the MP4 container format, as defined in ISO/IEC 14496-12.

Constant Value: "android.media.mediaparser.Mp4Parser"

PARSER_NAME_OGG

public static final String PARSER_NAME_OGG

Parser for the OGG container format, as defined in RFC 3533.

Constant Value: "android.media.mediaparser.OggParser"

PARSER_NAME_PS

public static final String PARSER_NAME_PS

Parser for the PS container format, as defined in ISO/IEC 11172-1.

Constant Value: "android.media.mediaparser.PsParser"

PARSER_NAME_TS

public static final String PARSER_NAME_TS

Parser for the TS container format, as defined in ISO/IEC 13818-1.

Constant Value: "android.media.mediaparser.TsParser"

PARSER_NAME_UNKNOWN

public static final String PARSER_NAME_UNKNOWN

Parser name returned by getParserName() when no parser has been selected yet.

Constant Value: "android.media.mediaparser.UNKNOWN"

PARSER_NAME_WAV

public static final String PARSER_NAME_WAV

Parser for the WAV container format, as defined in Multimedia Programming Interface and Data Specifications.

Constant Value: "android.media.mediaparser.WavParser"

SAMPLE_FLAG_DECODE_ONLY

public static final int SAMPLE_FLAG_DECODE_ONLY

Indicates that the sample should be decoded but not rendered.

Constant Value: -2147483648 (0x80000000)

SAMPLE_FLAG_ENCRYPTED

public static final int SAMPLE_FLAG_ENCRYPTED

Indicates that the sample is (at least partially) encrypted.

Constant Value: 1073741824 (0x40000000)

SAMPLE_FLAG_HAS_SUPPLEMENTAL_DATA

public static final int SAMPLE_FLAG_HAS_SUPPLEMENTAL_DATA

Indicates that the sample has supplemental data.

Samples will not have this flag set unless the "android.media.mediaparser.includeSupplementalData" parameter is set to true via setParameter(String, Object).

Samples with supplemental data have the following sample data format:

  • If the "android.media.mediaparser.inBandCryptoInfo" parameter is set, all encryption information.
  • (4 bytes) sample_data_size: The size of the actual sample data, not including supplemental data or encryption information.
  • (sample_data_size bytes): The media sample data.
  • (remaining bytes) The supplemental data.

Constant Value: 268435456 (0x10000000)

SAMPLE_FLAG_KEY_FRAME

public static final int SAMPLE_FLAG_KEY_FRAME

Indicates that the sample holds a synchronization sample.

Constant Value: 1 (0x00000001)

SAMPLE_FLAG_LAST_SAMPLE

public static final int SAMPLE_FLAG_LAST_SAMPLE

Indicates that the sample is known to contain the last media sample of the stream.

Constant Value: 536870912 (0x20000000)

Public methods

advance

public boolean advance (MediaParser.SeekableInputReader seekableInputReader)

Makes progress in the extraction of the input media stream, unless the end of the input has been reached.

This method will block until some progress has been made.

If this instance was created using create(OutputConsumer, String), the first call to this method will sniff the content using the selected parser implementations.

Parameters
seekableInputReader MediaParser.SeekableInputReader: The SeekableInputReader from which to obtain the media container data.
This value cannot be null.
Returns
boolean Whether there is any data left to extract. Returns false if the end of input has been reached.
Throws
MediaParser.UnrecognizedInputFormatException If the format cannot be recognized by any of the underlying parser implementations.
IOException If an error occurs while reading from the SeekableInputReader.

release

public void release ()

Releases any acquired resources.

After calling this method, this instance becomes unusable and no other methods should be invoked.

setLogSessionId

public void setLogSessionId (LogSessionId logSessionId)
Parameters
logSessionId LogSessionId: This value cannot be null.