java.lang.Object | |
↳ | android.media.MediaPlayer |
MediaPlayer class can be used to control playback of audio/video files and streams. An example on how to use the methods in this class can be found in VideoView. Please see Audio and Video for additional help using MediaPlayer.
Topics covered here are:
Playback control of audio/video files and streams is managed as a state machine. The following diagram shows the life cycle and the states of a MediaPlayer object driven by the supported playback control operations. The ovals represent the states a MediaPlayer object may reside in. The arcs represent the playback control operations that drive the object state transition. There are two types of arcs. The arcs with a single arrow head represent synchronous method calls, while those with a double arrow head represent asynchronous method calls.
From this state diagram, one can see that a MediaPlayer object has the following states:
new
or
after reset() is called, it is in the Idle state; and after
release() is called, it is in the End state. Between these
two states is the life cycle of the MediaPlayer object.
new
is in the
Idle state, while those created with one
of the overloaded convenient create
methods are NOT
in the Idle state. In fact, the objects are in the Prepared
state if the creation using create
method is successful.
setDataSource
methods in an invalid state. IllegalArgumentException
and IOException
that may be thrown from the overloaded
setDataSource
methods.Method Name | Valid Sates | Invalid States | Comments |
getCurrentPosition | {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} | {Error} | Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to the Error state. |
getDuration | {Prepared, Started, Paused, Stopped, PlaybackCompleted} | {Idle, Initialized, Error} | Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to the Error state. |
getVideoHeight | {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} | {Error} | Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to the Error state. |
getVideoWidth | {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} | {Error} | Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to the Error state. |
isPlaying | {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted} | {Error} | Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to the Error state. |
pause | {Started, Paused} | {Idle, Initialized, Prepared, Stopped, PlaybackCompleted, Error} | Successful invoke of this method in a valid state transfers the object to the Paused state. Calling this method in an invalid state transfers the object to the Error state. |
prepare | {Initialized, Stopped} | {Idle, Prepared, Started, Paused, PlaybackCompleted, Error} | Successful invoke of this method in a valid state transfers the object to the Prepared state. Calling this method in an invalid state throws an IllegalStateException. |
prepareAsync | {Initialized, Stopped} | {Idle, Prepared, Started, Paused, PlaybackCompleted, Error} | Successful invoke of this method in a valid state transfers the object to the Preparing state. Calling this method in an invalid state throws an IllegalStateException. |
release | any | {} | After release(), the object is no longer available. |
reset | {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error} | {} | After reset(), the object is like being just created. |
seekTo | {Prepared, Started, Paused, PlaybackCompleted} | {Idle, Initialized, Stopped, Error} | Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to the Error state. |
setAudioStreamType | {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted} | {Error} | Successful invoke of this method does not change the state. |
setDataSource | {Idle} | {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error} | Successful invoke of this method in a valid state transfers the object to the Initialized state. Calling this method in an invalid state throws an IllegalStateException. |
setDisplay | any | {} | This method can be called in any state and calling it does not change the object state. |
setLooping | {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted} | {Error} | Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to the Error state. |
isLooping | any | {} | This method can be called in any state and calling it does not change the object state. |
setOnBufferingUpdateListener | any | {} | This method can be called in any state and calling it does not change the object state. |
setOnCompletionListener | any | {} | This method can be called in any state and calling it does not change the object state. |
setOnErrorListener | any | {} | This method can be called in any state and calling it does not change the object state. |
setOnPreparedListener | any | {} | This method can be called in any state and calling it does not change the object state. |
setOnSeekCompleteListener | any | {} | This method can be called in any state and calling it does not change the object state. |
setScreenOnWhilePlaying> | any | {} | This method can be called in any state and calling it does not change the object state. |
setVolume | {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted} | {Error} | Successful invoke of this method does not change the state. |
setWakeMode | any | {} | This method can be called in any state and calling it does not change the object state. |
start | {Prepared, Started, Paused, PlaybackCompleted} | {Idle, Initialized, Stopped, Error} | Successful invoke of this method in a valid state transfers the object to the Started state. Calling this method in an invalid state transfers the object to the Error state. |
stop | {Prepared, Started, Stopped, Paused, PlaybackCompleted} | {Idle, Initialized, Error} | Successful invoke of this method in a valid state transfers the object to the Stopped state. Calling this method in an invalid state transfers the object to the Error state. |
One may need to declare a corresponding WAKE_LOCK permission <uses-permission> element.
Nested Classes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
MediaPlayer.OnBufferingUpdateListener | Interface definition of a callback to be invoked indicating buffering status of a media resource being streamed over the network. | ||||||||||
MediaPlayer.OnCompletionListener | Interface definition for a callback to be invoked when playback of a media source has completed. | ||||||||||
MediaPlayer.OnErrorListener | Interface definition of a callback to be invoked when there has been an error during an asynchronous operation (other errors will throw exceptions at method call time). | ||||||||||
MediaPlayer.OnInfoListener | Interface definition of a callback to be invoked to communicate some info and/or warning about the media or its playback. | ||||||||||
MediaPlayer.OnPreparedListener | Interface definition for a callback to be invoked when the media source is ready for playback. | ||||||||||
MediaPlayer.OnSeekCompleteListener | Interface definition of a callback to be invoked indicating the completion of a seek operation. | ||||||||||
MediaPlayer.OnVideoSizeChangedListener | Interface definition of a callback to be invoked when the video size is first known or updated |
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK | The video is streamed and its container is not valid for progressive playback i.e the video's index (e.g moov atom) is not at the start of the file. | |||||||||
int | MEDIA_ERROR_SERVER_DIED | Media server died. | |||||||||
int | MEDIA_ERROR_UNKNOWN | Unspecified media player error. | |||||||||
int | MEDIA_INFO_BAD_INTERLEAVING | Bad interleaving means that a media has been improperly interleaved or not interleaved at all, e.g has all the video samples first then all the audio ones. | |||||||||
int | MEDIA_INFO_NOT_SEEKABLE | The media cannot be seeked (e.g live stream) | |||||||||
int | MEDIA_INFO_UNKNOWN | Unspecified media player info. | |||||||||
int | MEDIA_INFO_VIDEO_TRACK_LAGGING | The video is too complex for the decoder: it can't decode frames fast enough. |
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Default constructor.
|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Convenience method to create a MediaPlayer for a given Uri.
| |||||||||||
Convenience method to create a MediaPlayer for a given resource id.
| |||||||||||
Convenience method to create a MediaPlayer for a given Uri.
| |||||||||||
Gets the current playback position.
| |||||||||||
Gets the duration of the file.
| |||||||||||
Returns the height of the video.
| |||||||||||
Returns the width of the video.
| |||||||||||
Checks whether the MediaPlayer is looping or non-looping.
| |||||||||||
Checks whether the MediaPlayer is playing.
| |||||||||||
Pauses playback.
| |||||||||||
Prepares the player for playback, synchronously.
| |||||||||||
Prepares the player for playback, asynchronously.
| |||||||||||
Releases resources associated with this MediaPlayer object.
| |||||||||||
Resets the MediaPlayer to its uninitialized state.
| |||||||||||
Seeks to specified time position.
| |||||||||||
Sets the audio stream type for this MediaPlayer.
| |||||||||||
Sets the data source (file-path or http/rtsp URL) to use.
| |||||||||||
Sets the data source (FileDescriptor) to use.
| |||||||||||
Sets the data source (FileDescriptor) to use.
| |||||||||||
Sets the data source as a content Uri.
| |||||||||||
Sets the SurfaceHolder to use for displaying the video portion of the media.
| |||||||||||
Sets the player to be looping or non-looping.
| |||||||||||
Register a callback to be invoked when the status of a network
stream's buffer has changed.
| |||||||||||
Register a callback to be invoked when the end of a media source
has been reached during playback.
| |||||||||||
Register a callback to be invoked when an error has happened
during an asynchronous operation.
| |||||||||||
Register a callback to be invoked when an info/warning is available.
| |||||||||||
Register a callback to be invoked when the media source is ready
for playback.
| |||||||||||
Register a callback to be invoked when a seek operation has been
completed.
| |||||||||||
Register a callback to be invoked when the video size is
known or updated.
| |||||||||||
Control whether we should use the attached SurfaceHolder to keep the
screen on while video playback is occurring.
| |||||||||||
Sets the volume on this player.
| |||||||||||
Set the low-level power management behavior for this MediaPlayer.
| |||||||||||
Starts or resumes playback.
| |||||||||||
Stops playback after playback has been stopped or paused.
|
Protected Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Is called before the object's memory is being reclaimed by the VM.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class java.lang.Object
|
The video is streamed and its container is not valid for progressive playback i.e the video's index (e.g moov atom) is not at the start of the file.
Media server died. In this case, the application must release the MediaPlayer object and instantiate a new one.
Bad interleaving means that a media has been improperly interleaved or not interleaved at all, e.g has all the video samples first then all the audio ones. Video is playing but a lot of disk seeks may be happening.
The media cannot be seeked (e.g live stream)
The video is too complex for the decoder: it can't decode frames fast enough. Possibly only the audio plays fine at this stage.
Default constructor. Consider using one of the create() methods for synchronously instantiating a MediaPlayer from a Uri or resource.
When done with the MediaPlayer, you should call release(), to free the resources. If not released, too many MediaPlayer instances may result in an exception.
Convenience method to create a MediaPlayer for a given Uri. On success, prepare() will already have been called and must not be called again.
When done with the MediaPlayer, you should call release(), to free the resources. If not released, too many MediaPlayer instances will result in an exception.
context | the Context to use |
---|---|
uri | the Uri from which to get the datasource |
Convenience method to create a MediaPlayer for a given resource id. On success, prepare() will already have been called and must not be called again.
When done with the MediaPlayer, you should call release(), to free the resources. If not released, too many MediaPlayer instances will result in an exception.
context | the Context to use |
---|---|
resid | the raw resource id (R.raw.<something>) for the resource to use as the datasource |
Convenience method to create a MediaPlayer for a given Uri. On success, prepare() will already have been called and must not be called again.
When done with the MediaPlayer, you should call release(), to free the resources. If not released, too many MediaPlayer instances will result in an exception.
context | the Context to use |
---|---|
uri | the Uri from which to get the datasource |
holder | the SurfaceHolder to use for displaying the video |
Gets the current playback position.
Gets the duration of the file.
Returns the height of the video.
Returns the width of the video.
Checks whether the MediaPlayer is looping or non-looping.
Checks whether the MediaPlayer is playing.
Pauses playback. Call start() to resume.
IllegalStateException | if the internal player engine has not been initialized. |
---|
Prepares the player for playback, synchronously. After setting the datasource and the display surface, you need to either call prepare() or prepareAsync(). For files, it is OK to call prepare(), which blocks until MediaPlayer is ready for playback.
IllegalStateException | if it is called in an invalid state |
---|---|
IOException |
Prepares the player for playback, asynchronously. After setting the datasource and the display surface, you need to either call prepare() or prepareAsync(). For streams, you should call prepareAsync(), which returns immediately, rather than blocking until enough data has been buffered.
IllegalStateException | if it is called in an invalid state |
---|
Releases resources associated with this MediaPlayer object. It is considered good practice to call this method when you're done using the MediaPlayer.
Resets the MediaPlayer to its uninitialized state. After calling this method, you will have to initialize it again by setting the data source and calling prepare().
Seeks to specified time position.
msec | the offset in milliseconds from the start to seek to |
---|
IllegalStateException | if the internal player engine has not been initialized |
---|
Sets the audio stream type for this MediaPlayer. See AudioManager for a list of stream types.
streamtype | the audio stream type |
---|
Sets the data source (file-path or http/rtsp URL) to use.
path | the path of the file, or the http/rtsp URL of the stream you want to play |
---|
IllegalStateException | if it is called in an invalid state |
---|---|
IOException | |
IllegalArgumentException |
Sets the data source (FileDescriptor) to use. It is the caller's responsibility to close the file descriptor. It is safe to do so as soon as this call returns.
fd | the FileDescriptor for the file you want to play |
---|---|
offset | the offset into the file where the data to be played starts, in bytes |
length | the length in bytes of the data to be played |
IllegalStateException | if it is called in an invalid state |
---|---|
IOException | |
IllegalArgumentException |
Sets the data source (FileDescriptor) to use. It is the caller's responsibility to close the file descriptor. It is safe to do so as soon as this call returns.
fd | the FileDescriptor for the file you want to play |
---|
IllegalStateException | if it is called in an invalid state |
---|---|
IOException | |
IllegalArgumentException |
Sets the data source as a content Uri.
context | the Context to use when resolving the Uri |
---|---|
uri | the Content URI of the data you want to play |
IllegalStateException | if it is called in an invalid state |
---|---|
IOException | |
IllegalArgumentException | |
SecurityException |
Sets the SurfaceHolder to use for displaying the video portion of the media. This call is optional. Not calling it when playing back a video will result in only the audio track being played.
sh | the SurfaceHolder to use for video display |
---|
Sets the player to be looping or non-looping.
looping | whether to loop or not |
---|
Register a callback to be invoked when the status of a network stream's buffer has changed.
listener | the callback that will be run. |
---|
Register a callback to be invoked when the end of a media source has been reached during playback.
listener | the callback that will be run |
---|
Register a callback to be invoked when an error has happened during an asynchronous operation.
listener | the callback that will be run |
---|
Register a callback to be invoked when an info/warning is available.
listener | the callback that will be run |
---|
Register a callback to be invoked when the media source is ready for playback.
listener | the callback that will be run |
---|
Register a callback to be invoked when a seek operation has been completed.
listener | the callback that will be run |
---|
Register a callback to be invoked when the video size is known or updated.
listener | the callback that will be run |
---|
Control whether we should use the attached SurfaceHolder to keep the screen on while video playback is occurring. This is the preferred method over setWakeMode(Context, int) where possible, since it doesn't require that the application have permission for low-level wake lock access.
screenOn | Supply true to keep the screen on, false to allow it to turn off. |
---|
Sets the volume on this player. This API is recommended for balancing the output of audio streams within an application. Unless you are writing an application to control user settings, this API should be used in preference to setStreamVolume(int, int, int) which sets the volume of ALL streams of a particular type. Note that the passed volume values are raw scalars. UI controls should be scaled logarithmically.
leftVolume | left volume scalar |
---|---|
rightVolume | right volume scalar |
Set the low-level power management behavior for this MediaPlayer. This can be used when the MediaPlayer is not playing through a SurfaceHolder set with setDisplay(SurfaceHolder) and thus can use the high-level setScreenOnWhilePlaying(boolean) feature.
This function has the MediaPlayer access the low-level power manager service to control the device's power usage while playing is occurring. The parameter is a combination of PowerManager wake flags. Use of this method requires WAKE_LOCK permission. By default, no attempt is made to keep the device awake during playback.
context | the Context to use |
---|---|
mode | the power/wake mode to set |
Starts or resumes playback. If playback had previously been paused, playback will continue from where it was paused. If playback had been stopped, or never started before, playback will start at the beginning.
IllegalStateException | if it is called in an invalid state |
---|
Stops playback after playback has been stopped or paused.
IllegalStateException | if the internal player engine has not been initialized. |
---|
Is called before the object's memory is being reclaimed by the VM. This can only happen once the VM has detected, during a run of the garbage collector, that the object is no longer reachable by any thread of the running application.
The method can be used to free system resources or perform other cleanup
before the object is garbage collected. The default implementation of the
method is empty, which is also expected by the VM, but subclasses can
override finalize()
as required. Uncaught exceptions which are
thrown during the execution of this method cause it to terminate
immediately but are otherwise ignored.
Note that the VM does guarantee that finalize()
is called at most
once for any object, but it doesn't guarantee when (if at all) finalize()
will be called. For example, object B's finalize()
can delay the execution of object A's finalize()
method and
therefore it can delay the reclamation of A's memory. To be safe, use a
ReferenceQueue, because it provides more control
over the way the VM deals with references during garbage collection.