public class FFmpegMediaMetadataRetriever
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
static Bitmap.Config |
IN_PREFERRED_CONFIG
User defined bitmap configuration.
|
static java.lang.String |
METADATA_CHAPTER_COUNT
The metadata key to retrieve the chapter count.
|
static java.lang.String |
METADATA_KEY_ALBUM
The metadata key to retrieve the name of the set this work belongs to.
|
static java.lang.String |
METADATA_KEY_ALBUM_ARTIST
The metadata key to retrieve the main creator of the set/album, if different
from artist.
|
static java.lang.String |
METADATA_KEY_ARTIST
The metadata key to retrieve the main creator of the work.
|
static java.lang.String |
METADATA_KEY_AUDIO_CODEC
The metadata key to retrieve the audio codec of the work.
|
static java.lang.String |
METADATA_KEY_CHAPTER_END_TIME
The metadata key to retrieve the chapter end time in milliseconds.
|
static java.lang.String |
METADATA_KEY_CHAPTER_START_TIME
The metadata key to retrieve the chapter start time in milliseconds.
|
static java.lang.String |
METADATA_KEY_COMMENT
The metadata key to retrieve the any additional description of the file.
|
static java.lang.String |
METADATA_KEY_COMPOSER
The metadata key to retrieve the who composed the work, if different from artist.
|
static java.lang.String |
METADATA_KEY_COPYRIGHT
The metadata key to retrieve the name of copyright holder.
|
static java.lang.String |
METADATA_KEY_CREATION_TIME
The metadata key to retrieve the date when the file was created, preferably in ISO 8601.
|
static java.lang.String |
METADATA_KEY_DATE
The metadata key to retrieve the date when the work was created, preferably in ISO 8601.
|
static java.lang.String |
METADATA_KEY_DISC
The metadata key to retrieve the number of a subset, e.g.
|
static java.lang.String |
METADATA_KEY_DURATION
The metadata key to retrieve the duration of the work in milliseconds.
|
static java.lang.String |
METADATA_KEY_ENCODED_BY
The metadata key to retrieve the person/group who created the file.
|
static java.lang.String |
METADATA_KEY_ENCODER
The metadata key to retrieve the name/settings of the software/hardware that produced the file.
|
static java.lang.String |
METADATA_KEY_FILENAME
The metadata key to retrieve the original name of the file.
|
static java.lang.String |
METADATA_KEY_FILESIZE
The metadata key to retrieve the file size in bytes.
|
static java.lang.String |
METADATA_KEY_FRAMERATE
This metadata key retrieves the average framerate (in frames/sec), if available.
|
static java.lang.String |
METADATA_KEY_GENRE
The metadata key to retrieve the genre of the work.
|
static java.lang.String |
METADATA_KEY_ICY_METADATA
The metadata key to retrieve the main creator of the work.
|
static java.lang.String |
METADATA_KEY_LANGUAGE
The metadata key to retrieve the main language in which the work is performed, preferably
in ISO 639-2 format.
|
static java.lang.String |
METADATA_KEY_PERFORMER
The metadata key to retrieve the artist who performed the work, if different from artist.
|
static java.lang.String |
METADATA_KEY_PUBLISHER
The metadata key to retrieve the name of the label/publisher.
|
static java.lang.String |
METADATA_KEY_SERVICE_NAME
The metadata key to retrieve the name of the service in broadcasting (channel name).
|
static java.lang.String |
METADATA_KEY_SERVICE_PROVIDER
The metadata key to retrieve the name of the service provider in broadcasting.
|
static java.lang.String |
METADATA_KEY_TITLE
The metadata key to retrieve the name of the work.
|
static java.lang.String |
METADATA_KEY_TRACK
The metadata key to retrieve the number of this work in the set, can be in form current/total.
|
static java.lang.String |
METADATA_KEY_VARIANT_BITRATE
The metadata key to retrieve the total bitrate of the bitrate variant that the current stream
is part of.
|
static java.lang.String |
METADATA_KEY_VIDEO_CODEC
The metadata key to retrieve the video codec of the work.
|
static java.lang.String |
METADATA_KEY_VIDEO_ROTATION
This key retrieves the video rotation angle in degrees, if available.
|
static int |
OPTION_CLOSEST
This option is used with
getFrameAtTime(long, int) to retrieve
a frame (not necessarily a key frame) associated with a data source that
is located closest to or at the given time. |
static int |
OPTION_CLOSEST_SYNC
This option is used with
getFrameAtTime(long, int) to retrieve
a sync (or key) frame associated with a data source that is located
closest to (in time) or at the given time. |
static int |
OPTION_NEXT_SYNC
This option is used with
getFrameAtTime(long, int) to retrieve
a sync (or key) frame associated with a data source that is located
right after or at the given time. |
static int |
OPTION_PREVIOUS_SYNC
This option is used with
getFrameAtTime(long, int) to retrieve
a sync (or key) frame associated with a data source that is located
right before or at the given time. |
Constructor and Description |
---|
FFmpegMediaMetadataRetriever() |
Modifier and Type | Method and Description |
---|---|
java.lang.String |
extractMetadata(java.lang.String key)
Call this method after setDataSource().
|
java.lang.String |
extractMetadataFromChapter(java.lang.String key,
int chapter)
Call this method after setDataSource().
|
protected void |
finalize() |
byte[] |
getEmbeddedPicture()
Call this method after setDataSource().
|
Bitmap |
getFrameAtTime()
Call this method after setDataSource().
|
Bitmap |
getFrameAtTime(long timeUs)
Call this method after setDataSource().
|
Bitmap |
getFrameAtTime(long timeUs,
int option)
Call this method after setDataSource().
|
Metadata |
getMetadata()
Gets the media metadata.
|
Bitmap |
getScaledFrameAtTime(long timeUs,
int width,
int height)
Call this method after setDataSource().
|
Bitmap |
getScaledFrameAtTime(long timeUs,
int option,
int width,
int height)
Call this method after setDataSource().
|
void |
release()
Call it when one is done with the object.
|
void |
setDataSource(Context context,
Uri uri)
Sets the data source as a content Uri.
|
void |
setDataSource(java.io.FileDescriptor fd)
Sets the data source (FileDescriptor) to use.
|
void |
setDataSource(java.io.FileDescriptor fd,
long offset,
long length)
Sets the data source (FileDescriptor) to use.
|
void |
setDataSource(java.lang.String path)
Sets the data source (file pathname) to use.
|
void |
setDataSource(java.lang.String uri,
java.util.Map<java.lang.String,java.lang.String> headers)
Sets the data source (URI) to use.
|
void |
setSurface(java.lang.Object surface)
Sets the
Surface to be used as the sink for the video portion of
the media. |
public static Bitmap.Config IN_PREFERRED_CONFIG
public static final int OPTION_PREVIOUS_SYNC
getFrameAtTime(long, int)
to retrieve
a sync (or key) frame associated with a data source that is located
right before or at the given time.public static final int OPTION_NEXT_SYNC
getFrameAtTime(long, int)
to retrieve
a sync (or key) frame associated with a data source that is located
right after or at the given time.public static final int OPTION_CLOSEST_SYNC
getFrameAtTime(long, int)
to retrieve
a sync (or key) frame associated with a data source that is located
closest to (in time) or at the given time.public static final int OPTION_CLOSEST
getFrameAtTime(long, int)
to retrieve
a frame (not necessarily a key frame) associated with a data source that
is located closest to or at the given time.public static final java.lang.String METADATA_KEY_ALBUM
public static final java.lang.String METADATA_KEY_ALBUM_ARTIST
public static final java.lang.String METADATA_KEY_ARTIST
public static final java.lang.String METADATA_KEY_COMMENT
public static final java.lang.String METADATA_KEY_COMPOSER
public static final java.lang.String METADATA_KEY_COPYRIGHT
public static final java.lang.String METADATA_KEY_CREATION_TIME
public static final java.lang.String METADATA_KEY_DATE
public static final java.lang.String METADATA_KEY_DISC
public static final java.lang.String METADATA_KEY_ENCODER
public static final java.lang.String METADATA_KEY_ENCODED_BY
public static final java.lang.String METADATA_KEY_FILENAME
public static final java.lang.String METADATA_KEY_GENRE
public static final java.lang.String METADATA_KEY_LANGUAGE
public static final java.lang.String METADATA_KEY_PERFORMER
public static final java.lang.String METADATA_KEY_PUBLISHER
public static final java.lang.String METADATA_KEY_SERVICE_NAME
public static final java.lang.String METADATA_KEY_SERVICE_PROVIDER
public static final java.lang.String METADATA_KEY_TITLE
public static final java.lang.String METADATA_KEY_TRACK
public static final java.lang.String METADATA_KEY_VARIANT_BITRATE
public static final java.lang.String METADATA_KEY_DURATION
public static final java.lang.String METADATA_KEY_AUDIO_CODEC
public static final java.lang.String METADATA_KEY_VIDEO_CODEC
public static final java.lang.String METADATA_KEY_VIDEO_ROTATION
public static final java.lang.String METADATA_KEY_ICY_METADATA
public static final java.lang.String METADATA_KEY_FRAMERATE
public static final java.lang.String METADATA_KEY_CHAPTER_START_TIME
public static final java.lang.String METADATA_KEY_CHAPTER_END_TIME
public static final java.lang.String METADATA_CHAPTER_COUNT
public static final java.lang.String METADATA_KEY_FILESIZE
public void setDataSource(java.lang.String path) throws java.lang.IllegalArgumentException
path
- The path of the input media file.java.lang.IllegalArgumentException
- If the path is invalid.public void setDataSource(java.lang.String uri, java.util.Map<java.lang.String,java.lang.String> headers) throws java.lang.IllegalArgumentException
uri
- The URI of the input media.headers
- the headers to be sent together with the request for the datajava.lang.IllegalArgumentException
- If the URI is invalid.public void setDataSource(java.io.FileDescriptor fd, long offset, long length) throws java.lang.IllegalArgumentException
fd
- the FileDescriptor for the file you want to playoffset
- the offset into the file where the data to be played starts,
in bytes. It must be non-negativelength
- the length in bytes of the data to be played. It must be
non-negative.java.lang.IllegalArgumentException
- if the arguments are invalidpublic void setDataSource(java.io.FileDescriptor fd) throws java.lang.IllegalArgumentException
fd
- the FileDescriptor for the file you want to playjava.lang.IllegalArgumentException
- if the FileDescriptor is invalidpublic void setDataSource(Context context, Uri uri) throws java.lang.IllegalArgumentException, java.lang.SecurityException
context
- the Context to use when resolving the Uriuri
- the Content URI of the data you want to playjava.lang.IllegalArgumentException
- if the Uri is invalidjava.lang.SecurityException
- if the Uri cannot be used due to lack of
permission.public java.lang.String extractMetadata(java.lang.String key)
keyCode
- One of the constants listed below at the end of the class.public java.lang.String extractMetadataFromChapter(java.lang.String key, int chapter)
keyCode
- One of the constants listed below at the end of the class.chapter
- The chapter from where the metadata will be retrieved.public Metadata getMetadata()
#METADATA_UPDATE_ONLY
and #METADATA_ALL
.
//*
//* @param apply_filter if true only metadata that matches the
//* filter is returned. See #APPLY_METADATA_FILTER
and #BYPASS_METADATA_FILTER
.
//*public Bitmap getFrameAtTime(long timeUs, int option)
timeUs
- The time position where the frame will be retrieved.
When retrieving the frame at the given time position, there is no
guarantee that the data source has a frame located at the position.
When this happens, a frame nearby will be returned. If timeUs is
negative, time position and option will ignored, and any frame
that the implementation considers as representative may be returned.option
- a hint on how the frame is found. Use
OPTION_PREVIOUS_SYNC
if one wants to retrieve a sync frame
that has a timestamp earlier than or the same as timeUs. Use
OPTION_NEXT_SYNC
if one wants to retrieve a sync frame
that has a timestamp later than or the same as timeUs. Use
OPTION_CLOSEST_SYNC
if one wants to retrieve a sync frame
that has a timestamp closest to or the same as timeUs. Use
OPTION_CLOSEST
if one wants to retrieve a frame that may
or may not be a sync frame but is closest to or the same as timeUs.
OPTION_CLOSEST
often has larger performance overhead compared
to the other options if there is no sync frame located at timeUs.public Bitmap getFrameAtTime(long timeUs)
getFrameAtTime(long, int)
.timeUs
- The time position where the frame will be retrieved.
When retrieving the frame at the given time position, there is no
guarentee that the data source has a frame located at the position.
When this happens, a frame nearby will be returned. If timeUs is
negative, time position and option will ignored, and any frame
that the implementation considers as representative may be returned.getFrameAtTime(long, int)
public Bitmap getFrameAtTime()
getFrameAtTime(long)
or getFrameAtTime(long, int)
getFrameAtTime(long)
,
getFrameAtTime(long, int)
public Bitmap getScaledFrameAtTime(long timeUs, int option, int width, int height)
timeUs
- The time position where the frame will be retrieved.
When retrieving the frame at the given time position, there is no
guarantee that the data source has a frame located at the position.
When this happens, a frame nearby will be returned. If timeUs is
negative, time position and option will ignored, and any frame
that the implementation considers as representative may be returned.option
- a hint on how the frame is found. Use
OPTION_PREVIOUS_SYNC
if one wants to retrieve a sync frame
that has a timestamp earlier than or the same as timeUs. Use
OPTION_NEXT_SYNC
if one wants to retrieve a sync frame
that has a timestamp later than or the same as timeUs. Use
OPTION_CLOSEST_SYNC
if one wants to retrieve a sync frame
that has a timestamp closest to or the same as timeUs. Use
OPTION_CLOSEST
if one wants to retrieve a frame that may
or may not be a sync frame but is closest to or the same as timeUs.
OPTION_CLOSEST
often has larger performance overhead compared
to the other options if there is no sync frame located at timeUs.public Bitmap getScaledFrameAtTime(long timeUs, int width, int height)
#getScaledFrameAtTime(long, int)
.timeUs
- The time position where the frame will be retrieved.
When retrieving the frame at the given time position, there is no
guarentee that the data source has a frame located at the position.
When this happens, a frame nearby will be returned. If timeUs is
negative, time position and option will ignored, and any frame
that the implementation considers as representative may be returned.#getScaledFrameAtTime(long, int)
public byte[] getEmbeddedPicture()
public void release()
protected void finalize() throws java.lang.Throwable
finalize
in class java.lang.Object
java.lang.Throwable
public void setSurface(java.lang.Object surface)
Surface
to be used as the sink for the video portion of
the media. This is similar to #setDisplay(SurfaceHolder)
, but
does not support #setScreenOnWhilePlaying(boolean)
. Setting a
Surface will un-set any Surface or SurfaceHolder that was previously set.
A null surface will result in only the audio track being played.
If the Surface sends frames to a SurfaceTexture
, the timestamps
returned from SurfaceTexture#getTimestamp()
will have an
unspecified zero point. These timestamps cannot be directly compared
between different media sources, different instances of the same media
source, or multiple runs of the same program. The timestamp is normally
monotonically increasing and is unaffected by time-of-day adjustments,
but it is reset when the position is set.surface
- The Surface
to be used for the video portion of
the media.