FileDocCategorySizeDatePackage
MediaFormat.javaAPI DocAndroid 5.1 API30003Thu Mar 12 22:22:30 GMT 2015android.media

MediaFormat

public final class MediaFormat extends Object
Encapsulates the information describing the format of media data, be it audio or video. The format of the media data is specified as string/value pairs. Keys common to all audio/video formats, all keys not marked optional are mandatory:
NameValue TypeDescription
{@link #KEY_MIME}StringThe type of the format.
{@link #KEY_MAX_INPUT_SIZE}Integeroptional, maximum size of a buffer of input data
{@link #KEY_BIT_RATE}Integerencoder-only, desired bitrate in bits/second
Video formats have the following keys:
NameValue TypeDescription
{@link #KEY_WIDTH}Integer
{@link #KEY_HEIGHT}Integer
{@link #KEY_COLOR_FORMAT}Integerset by the user for encoders, readable in the output format of decoders
{@link #KEY_FRAME_RATE}Integer or Floatencoder-only
{@link #KEY_CAPTURE_RATE}Integer
{@link #KEY_I_FRAME_INTERVAL}Integerencoder-only
{@link #KEY_MAX_WIDTH}Integerdecoder-only, optional, max-resolution width
{@link #KEY_MAX_HEIGHT}Integerdecoder-only, optional, max-resolution height
{@link #KEY_REPEAT_PREVIOUS_FRAME_AFTER}Longvideo encoder in surface-mode only
{@link #KEY_PUSH_BLANK_BUFFERS_ON_STOP}Integer(1)video decoder rendering to a surface only
Specify both {@link #KEY_MAX_WIDTH} and {@link #KEY_MAX_HEIGHT} to enable adaptive playback (seamless resolution change) for a video decoder that supports it ({@link MediaCodecInfo.CodecCapabilities#FEATURE_AdaptivePlayback}). The values are used as hints for the codec: they are the maximum expected resolution to prepare for. Depending on codec support, preparing for larger maximum resolution may require more memory even if that resolution is never reached. These fields have no effect for codecs that do not support adaptive playback.

Audio formats have the following keys:
NameValue TypeDescription
{@link #KEY_CHANNEL_COUNT}Integer
{@link #KEY_SAMPLE_RATE}Integer
{@link #KEY_IS_ADTS}Integeroptional, if decoding AAC audio content, setting this key to 1 indicates that each audio frame is prefixed by the ADTS header.
{@link #KEY_AAC_PROFILE}Integerencoder-only, optional, if content is AAC audio, specifies the desired profile.
{@link #KEY_AAC_SBR_MODE}Integerencoder-only, optional, if content is AAC audio, specifies the desired SBR mode.
{@link #KEY_AAC_DRC_TARGET_REFERENCE_LEVEL}Integerdecoder-only, optional, if content is AAC audio, specifies the target reference level.
{@link #KEY_AAC_ENCODED_TARGET_LEVEL}Integerdecoder-only, optional, if content is AAC audio, specifies the target reference level used at encoder.
{@link #KEY_AAC_DRC_BOOST_FACTOR}Integerdecoder-only, optional, if content is AAC audio, specifies the DRC boost factor.
{@link #KEY_AAC_DRC_ATTENUATION_FACTOR}Integerdecoder-only, optional, if content is AAC audio, specifies the DRC attenuation factor.
{@link #KEY_AAC_DRC_HEAVY_COMPRESSION}Integerdecoder-only, optional, if content is AAC audio, specifies whether to use heavy compression.
{@link #KEY_AAC_MAX_OUTPUT_CHANNEL_COUNT}Integerdecoder-only, optional, if content is AAC audio, specifies the maximum number of channels the decoder outputs.
{@link #KEY_CHANNEL_MASK}Integeroptional, a mask of audio channel assignments
{@link #KEY_FLAC_COMPRESSION_LEVEL}Integerencoder-only, optional, if content is FLAC audio, specifies the desired compression level.
Subtitle formats have the following keys:
{@link #KEY_MIME}StringThe type of the format.
{@link #KEY_LANGUAGE}StringThe language of the content.

Fields Summary
public static final String
MIMETYPE_VIDEO_VP8
public static final String
MIMETYPE_VIDEO_VP9
public static final String
MIMETYPE_VIDEO_AVC
public static final String
MIMETYPE_VIDEO_HEVC
public static final String
MIMETYPE_VIDEO_MPEG4
public static final String
MIMETYPE_VIDEO_H263
public static final String
MIMETYPE_VIDEO_MPEG2
public static final String
MIMETYPE_VIDEO_RAW
public static final String
MIMETYPE_AUDIO_AMR_NB
public static final String
MIMETYPE_AUDIO_AMR_WB
public static final String
MIMETYPE_AUDIO_MPEG
public static final String
MIMETYPE_AUDIO_AAC
public static final String
MIMETYPE_AUDIO_QCELP
public static final String
MIMETYPE_AUDIO_VORBIS
public static final String
MIMETYPE_AUDIO_OPUS
public static final String
MIMETYPE_AUDIO_G711_ALAW
public static final String
MIMETYPE_AUDIO_G711_MLAW
public static final String
MIMETYPE_AUDIO_RAW
public static final String
MIMETYPE_AUDIO_FLAC
public static final String
MIMETYPE_AUDIO_MSGSM
public static final String
MIMETYPE_AUDIO_AC3
public static final String
MIMETYPE_AUDIO_EAC3
public static final String
MIMETYPE_TEXT_VTT
MIME type for WebVTT subtitle data.
public static final String
MIMETYPE_TEXT_CEA_608
MIME type for CEA-608 closed caption data.
private Map
mMap
public static final String
KEY_MIME
A key describing the mime type of the MediaFormat. The associated value is a string.
public static final String
KEY_LANGUAGE
A key describing the language of the content, using either ISO 639-1 or 639-2/T codes. The associated value is a string.
public static final String
KEY_SAMPLE_RATE
A key describing the sample rate of an audio format. The associated value is an integer
public static final String
KEY_CHANNEL_COUNT
A key describing the number of channels in an audio format. The associated value is an integer
public static final String
KEY_WIDTH
A key describing the width of the content in a video format. The associated value is an integer
public static final String
KEY_HEIGHT
A key describing the height of the content in a video format. The associated value is an integer
public static final String
KEY_MAX_WIDTH
A key describing the maximum expected width of the content in a video decoder format, in case there are resolution changes in the video content. The associated value is an integer
public static final String
KEY_MAX_HEIGHT
A key describing the maximum expected height of the content in a video decoder format, in case there are resolution changes in the video content. The associated value is an integer
public static final String
KEY_MAX_INPUT_SIZE
A key describing the maximum size in bytes of a buffer of data described by this MediaFormat. The associated value is an integer
public static final String
KEY_BIT_RATE
A key describing the bitrate in bits/sec. The associated value is an integer
public static final String
KEY_COLOR_FORMAT
A key describing the color format of the content in a video format. Constants are declared in {@link android.media.MediaCodecInfo.CodecCapabilities}.
public static final String
KEY_FRAME_RATE
A key describing the frame rate of a video format in frames/sec. The associated value is an integer or a float.
public static final String
KEY_CAPTURE_RATE
A key describing the capture rate of a video format in frames/sec.

When capture rate is different than the frame rate, it means that the video is acquired at a different rate than the playback, which produces slow motion or timelapse effect during playback. Application can use the value of this key to tell the relative speed ratio between capture and playback rates when the video was recorded.

The associated value is an integer or a float.

public static final String
KEY_I_FRAME_INTERVAL
A key describing the frequency of I frames expressed in secs between I frames. The associated value is an integer.
public static final String
KEY_TEMPORAL_LAYERING
A key describing the temporal layering schema. This is an optional parameter that applies only to video encoders. Use {@link MediaCodec#getInputFormat} after {@link MediaCodec#configure configure} to query if the encoder supports the desired schema. Supported values are {@code webrtc.vp8.1-layer}, {@code webrtc.vp8.2-layer}, {@code webrtc.vp8.3-layer}, and {@code none}. If the encoder does not support temporal layering, the input format will not have an entry with this key. The associated value is a string.
public static final String
KEY_STRIDE
public static final String
KEY_SLICE_HEIGHT
public static final String
KEY_REPEAT_PREVIOUS_FRAME_AFTER
Applies only when configuring a video encoder in "surface-input" mode. The associated value is a long and gives the time in microseconds after which the frame previously submitted to the encoder will be repeated (once) if no new frame became available since.
public static final String
KEY_PUSH_BLANK_BUFFERS_ON_STOP
If specified when configuring a video decoder rendering to a surface, causes the decoder to output "blank", i.e. black frames to the surface when stopped to clear out any previously displayed contents. The associated value is an integer of value 1.
public static final String
KEY_DURATION
A key describing the duration (in microseconds) of the content. The associated value is a long.
public static final String
KEY_IS_ADTS
A key mapping to a value of 1 if the content is AAC audio and audio frames are prefixed with an ADTS header. The associated value is an integer (0 or 1). This key is only supported when _decoding_ content, it cannot be used to configure an encoder to emit ADTS output.
public static final String
KEY_CHANNEL_MASK
A key describing the channel composition of audio content. This mask is composed of bits drawn from channel mask definitions in {@link android.media.AudioFormat}. The associated value is an integer.
public static final String
KEY_AAC_PROFILE
A key describing the AAC profile to be used (AAC audio formats only). Constants are declared in {@link android.media.MediaCodecInfo.CodecProfileLevel}.
public static final String
KEY_AAC_SBR_MODE
A key describing the AAC SBR mode to be used (AAC audio formats only). The associated value is an integer and can be set to following values:
  • 0 - no SBR should be applied
  • 1 - single rate SBR
  • 2 - double rate SBR
Note: If this key is not defined the default SRB mode for the desired AAC profile will be used.

This key is only used during encoding.

public static final String
KEY_AAC_MAX_OUTPUT_CHANNEL_COUNT
A key describing the maximum number of channels that can be output by the AAC decoder. By default, the decoder will output the same number of channels as present in the encoded stream, if supported. Set this value to limit the number of output channels, and use the downmix information in the stream, if available.

Values larger than the number of channels in the content to decode are ignored.

This key is only used during decoding.

public static final String
KEY_AAC_DRC_TARGET_REFERENCE_LEVEL
A key describing a gain to be applied so that the output loudness matches the Target Reference Level. This is typically used to normalize loudness across program items. The gain is derived as the difference between the Target Reference Level and the Program Reference Level. The latter can be given in the bitstream and indicates the actual loudness value of the program item.

The value is given as an integer value between 0 and 127, and is calculated as -0.25 * Target Reference Level in dBFS. Therefore, it represents the range of Full Scale (0 dBFS) to -31.75 dBFS.

This key is only used during decoding.

public static final String
KEY_AAC_ENCODED_TARGET_LEVEL
A key describing the target reference level that was assumed at the encoder for calculation of attenuation gains for clipping prevention. This information can be provided if it is known, otherwise a worst-case assumption is used.

The value is given as an integer value between 0 and 127, and is calculated as -0.25 * Target Reference Level in dBFS. Therefore, it represents the range of Full Scale (0 dBFS) to -31.75 dBFS. The default value is the worst-case assumption of 127.

The value is ignored when heavy compression is used (see {@link #KEY_AAC_DRC_HEAVY_COMPRESSION}).

This key is only used during decoding.

public static final String
KEY_AAC_DRC_BOOST_FACTOR
A key describing the boost factor allowing to adapt the dynamics of the output to the actual listening requirements. This relies on DRC gain sequences that can be transmitted in the encoded bitstream to be able to reduce the dynamics of the output signal upon request. This factor enables the user to select how much of the gains are applied.

Positive gains (boost) and negative gains (attenuation, see {@link #KEY_AAC_DRC_ATTENUATION_FACTOR}) can be controlled separately for a better match to different use-cases.

Typically, attenuation gains are sent for loud signal segments, and boost gains are sent for soft signal segments. If the output is listened to in a noisy environment, for example, the boost factor is used to enable the positive gains, i.e. to amplify soft signal segments beyond the noise floor. But for listening late at night, the attenuation factor is used to enable the negative gains, to prevent loud signal from surprising the listener. In applications which generally need a low dynamic range, both the boost factor and the attenuation factor are used in order to enable all DRC gains.

In order to prevent clipping, it is also recommended to apply the attenuation factors in case of a downmix and/or loudness normalization to high target reference levels.

Both the boost and the attenuation factor parameters are given as integer values between 0 and 127, representing the range of the factor of 0 (i.e. don't apply) to 1 (i.e. fully apply boost/attenuation factors respectively).

This key is only used during decoding.

public static final String
KEY_AAC_DRC_ATTENUATION_FACTOR
A key describing the attenuation factor allowing to adapt the dynamics of the output to the actual listening requirements. See {@link #KEY_AAC_DRC_BOOST_FACTOR} for a description of the role of this attenuation factor and the value range.

This key is only used during decoding.

public static final String
KEY_AAC_DRC_HEAVY_COMPRESSION
A key describing the selection of the heavy compression profile for DRC. Two separate DRC gain sequences can be transmitted in one bitstream: MPEG-4 DRC light compression, and DVB-specific heavy compression. When selecting the application of the heavy compression, one of the sequences is selected:
  • 0 enables light compression,
  • 1 enables heavy compression instead.
Note that only light compression offers the features of scaling of DRC gains (see {@link #KEY_AAC_DRC_BOOST_FACTOR} and {@link #KEY_AAC_DRC_ATTENUATION_FACTOR} for the boost and attenuation factors, and frequency-selective (multiband) DRC. Light compression usually contains clipping prevention for stereo downmixing while heavy compression, if additionally provided in the bitstream, is usually stronger, and contains clipping prevention for stereo and mono downmixing.

The default is light compression.

This key is only used during decoding.

public static final String
KEY_FLAC_COMPRESSION_LEVEL
A key describing the FLAC compression level to be used (FLAC audio format only). The associated value is an integer ranging from 0 (fastest, least compression) to 8 (slowest, most compression).
public static final String
KEY_COMPLEXITY
A key describing the encoding complexity. The associated value is an integer. These values are device and codec specific, but lower values generally result in faster and/or less power-hungry encoding.
public static final String
KEY_QUALITY
A key describing the desired encoding quality. The associated value is an integer. This key is only supported for encoders that are configured in constant-quality mode. These values are device and codec specific, but lower values generally result in more efficient (smaller-sized) encoding.
public static final String
KEY_PROFILE
A key describing the desired profile to be used by an encoder. Constants are declared in {@link MediaCodecInfo.CodecProfileLevel}. This key is only supported for codecs that specify a profile.
public static final String
KEY_BITRATE_MODE
A key describing the desired bitrate mode to be used by an encoder. Constants are declared in {@link MediaCodecInfo.CodecCapabilities}.
public static final String
KEY_AUDIO_SESSION_ID
A key describing the audio session ID of the AudioTrack associated to a tunneled video codec. The associated value is an integer.
public static final String
KEY_IS_AUTOSELECT
A key for boolean AUTOSELECT behavior for the track. Tracks with AUTOSELECT=true are considered when automatically selecting a track without specific user choice, based on the current locale. This is currently only used for subtitle tracks, when the user selected 'Default' for the captioning locale. The associated value is an integer, where non-0 means TRUE. This is an optional field; if not specified, AUTOSELECT defaults to TRUE.
public static final String
KEY_IS_DEFAULT
A key for boolean DEFAULT behavior for the track. The track with DEFAULT=true is selected in the absence of a specific user choice. This is currently only used for subtitle tracks, when the user selected 'Default' for the captioning locale. The associated value is an integer, where non-0 means TRUE. This is an optional field; if not specified, DEFAULT is considered to be FALSE.
public static final String
KEY_IS_FORCED_SUBTITLE
A key for the FORCED field for subtitle tracks. True if it is a forced subtitle track. Forced subtitle tracks are essential for the content and are shown even when the user turns off Captions. They are used for example to translate foreign/alien dialogs or signs. The associated value is an integer, where non-0 means TRUE. This is an optional field; if not specified, FORCED defaults to FALSE.
public static final String
KEY_IS_TIMED_TEXT
public static final String
KEY_FEATURE_
A key prefix used together with a {@link MediaCodecInfo.CodecCapabilities} feature name describing a required or optional feature for a codec capabilities query. The associated value is an integer, where non-0 value means the feature is requested to be present, while 0 value means the feature is requested to be not present.
Constructors Summary
MediaFormat(Map map)


    /* package private */    
        mMap = map;
    
public MediaFormat()
Creates an empty MediaFormat

        mMap = new HashMap();
    
Methods Summary
public final booleancontainsKey(java.lang.String name)
Returns true iff a key of the given name exists in the format.

        return mMap.containsKey(name);
    
public static final android.media.MediaFormatcreateAudioFormat(java.lang.String mime, int sampleRate, int channelCount)
Creates a minimal audio format.

param
mime The mime type of the content.
param
sampleRate The sampling rate of the content.
param
channelCount The number of audio channels in the content.

        MediaFormat format = new MediaFormat();
        format.setString(KEY_MIME, mime);
        format.setInteger(KEY_SAMPLE_RATE, sampleRate);
        format.setInteger(KEY_CHANNEL_COUNT, channelCount);

        return format;
    
public static final android.media.MediaFormatcreateSubtitleFormat(java.lang.String mime, java.lang.String language)
Creates a minimal subtitle format.

param
mime The mime type of the content.
param
language The language of the content, using either ISO 639-1 or 639-2/T codes. Specify null or "und" if language information is only included in the content. (This will also work if there are multiple language tracks in the content.)

        MediaFormat format = new MediaFormat();
        format.setString(KEY_MIME, mime);
        format.setString(KEY_LANGUAGE, language);

        return format;
    
public static final android.media.MediaFormatcreateVideoFormat(java.lang.String mime, int width, int height)
Creates a minimal video format.

param
mime The mime type of the content.
param
width The width of the content (in pixels)
param
height The height of the content (in pixels)

        MediaFormat format = new MediaFormat();
        format.setString(KEY_MIME, mime);
        format.setInteger(KEY_WIDTH, width);
        format.setInteger(KEY_HEIGHT, height);

        return format;
    
public final java.nio.ByteBuffergetByteBuffer(java.lang.String name)
Returns the value of a ByteBuffer key.

        return (ByteBuffer)mMap.get(name);
    
public booleangetFeatureEnabled(java.lang.String feature)
Returns whether a feature is to be enabled ({@code true}) or disabled ({@code false}).

param
feature the name of a {@link MediaCodecInfo.CodecCapabilities} feature.
throws
IllegalArgumentException if the feature was neither set to be enabled nor to be disabled.

        Integer enabled = (Integer)mMap.get(KEY_FEATURE_ + feature);
        if (enabled == null) {
            throw new IllegalArgumentException("feature is not specified");
        }
        return enabled != 0;
    
public final floatgetFloat(java.lang.String name)
Returns the value of a float key.

        return ((Float)mMap.get(name)).floatValue();
    
public final intgetInteger(java.lang.String name)
Returns the value of an integer key.


                
         
        return ((Integer)mMap.get(name)).intValue();
    
public final intgetInteger(java.lang.String name, int defaultValue)
Returns the value of an integer key, or the default value if the key is missing or is for another type value.

hide

        try {
            return getInteger(name);
        }
        catch (NullPointerException  e) { /* no such field */ }
        catch (ClassCastException e) { /* field of different type */ }
        return defaultValue;
    
public final longgetLong(java.lang.String name)
Returns the value of a long key.

        return ((Long)mMap.get(name)).longValue();
    
java.util.MapgetMap()

        return mMap;
    
public final java.lang.StringgetString(java.lang.String name)
Returns the value of a string key.

        return (String)mMap.get(name);
    
public final voidsetByteBuffer(java.lang.String name, java.nio.ByteBuffer bytes)
Sets the value of a ByteBuffer key.

        mMap.put(name, bytes);
    
public voidsetFeatureEnabled(java.lang.String feature, boolean enabled)
Sets whether a feature is to be enabled ({@code true}) or disabled ({@code false}). If {@code enabled} is {@code true}, the feature is requested to be present. Otherwise, the feature is requested to be not present.

param
feature the name of a {@link MediaCodecInfo.CodecCapabilities} feature.
see
MediaCodecList#findDecoderForFormat
see
MediaCodecList#findEncoderForFormat
see
MediaCodecInfo.CodecCapabilities#isFormatSupported

        setInteger(KEY_FEATURE_ + feature, enabled ? 1 : 0);
    
public final voidsetFloat(java.lang.String name, float value)
Sets the value of a float key.

        mMap.put(name, new Float(value));
    
public final voidsetInteger(java.lang.String name, int value)
Sets the value of an integer key.

        mMap.put(name, new Integer(value));
    
public final voidsetLong(java.lang.String name, long value)
Sets the value of a long key.

        mMap.put(name, new Long(value));
    
public final voidsetString(java.lang.String name, java.lang.String value)
Sets the value of a string key.

        mMap.put(name, value);
    
public java.lang.StringtoString()

        return mMap.toString();