| 
 | Copyright 2002 Sun Microsystems, Inc.; Nokia Corporation. See the Copyright Notice and Specification License for more details. | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
Player controls the rendering of time based media data.
 It provides the methods to manage the Player's life
 cycle, controls the playback progress, obtains the presentation
 components, controls and provides the means to synchronize
 with other Players.
 
 
APlayercan be created from one of theManager'screatePlayermethods. After thePlayeris created, callingstartwill start the playback as soon as possible. The method will return when the playback is started. The playback will continue in the background and will stop automatically when the end of media is reached.Simple playback example illustrates this.
APlayerhas five states: UNREALIZED, REALIZED, PREFETCHED, STARTED, CLOSED.The purpose of these life-cycle states is to provide programmatic control over potentially time-consuming operations. For example, when a
Playeris first constructed, it's in the UNREALIZED state. Transitioned from UNREALIZED to REALIZED, thePlayerperforms the communication necessary to locate all of the resources it needs to function (such as communicating with a server or a file system). Therealizemethod allows an application to initiate this potentially time-consuming process at an appropriate time.Typically, a
Playermoves from the UNREALIZED state to the REALIZED state, then to the PREFETCHED state, and finally on to the STARTED state.A
Playerstops when it reaches the end of media; when its stop time is reached; or when thestopmethod is invoked. When that happens, thePlayermoves from the STARTED state back to the PREFETCHED state. It is then ready to repeat the cycle.To use a
Player, you must set up parameters to manage its movement through these life-cycle states and then move it through the states using thePlayer's state transition methods.
This section describes the semantics of each of thePlayerstates.UNREALIZED State
APlayerstarts in the UNREALIZED state. An unrealizedPlayerdoes not have enough information to acquire all the resources it needs to function.The following methods must not be used when the
Playeris in the UNREALIZED state.An
getContentType
setTimeBase
getTimeBase
setMediaTime
getControls
getControlIllegalStateExceptionwill be thrown.The
realizemethod transitions thePlayerfrom the UNREALIZED state to the REALIZED state.REALIZED State
APlayeris in the REALIZED state when it has obtained the information required to acquire the media resources. Realizing aPlayercan be a resource and time consuming process. ThePlayermay have to communicate with a server, read a file, or interact with a set of objects.Although a realized
Playerdoes not have to acquire any resources, it is likely to have acquired all of the resources it needs except those that imply exclusive use of a scarce system resource, such as an audio device.Normally, a
Playermoves from the UNREALIZED state to the REALIZED state. Afterrealizehas been invoked on aPlayer, the only way it can return to the UNREALIZED state is ifdeallocateis invoked beforerealizeis completed. Once aPlayerreaches the REALIZED state, it never returns to the UNREALIZED state. It remains in one of four states: REALIZED, PREFETCHED, STARTED or CLOSED.PREFETCHED State
Once realized, aPlayermay still need to perform a number of time-consuming tasks before it is ready to be started. For example, it may need to acquire scarce or exclusive resources, fill buffers with media data, or perform other start-up processing. Callingprefetchon thePlayercarries out these tasks.Once a
Playeris in the PREFETCHED state, it may be started. Prefetching reduces the startup latency of aPlayerto the minimum possible value.When a started
Playerstops, it returns to the PREFETCHED state.STARTED State
Once prefetched, aPlayercan enter the STARTED state by calling thestartmethod. A STARTEDPlayermeans thePlayeris running and processing data. APlayerreturns to the PREFETCHED state when it stops, because thestopmethod was invoked, it has reached the end of the media, or its stop time.When the
Playermoves from the PREFETCHED to the STARTED state, it posts aSTARTEDevent. When it moves from the STARTED state to the PREFETCHED state, it posts aSTOPPED,END_OF_MEDIAorSTOPPED_AT_TIMEevent depending on the reason it stopped.The following methods must not be used when the
Playeris in the STARTED state:An
setTimeBase
setLoopCountIllegalStateExceptionwill be thrown.CLOSED state
CallingThecloseon thePlayerputs it in the CLOSED state. In the CLOSED state, thePlayerhas released most of its resources and must not be used again.Player's five states and the state transition methods are summarized in the following diagram:

Playerevents asynchronously deliver information about thePlayer's state changes and other relevant information from thePlayer'sControls.To receive events, an object must implement the
PlayerListenerinterface and use theaddPlayerListenermethod to register its interest in aPlayer's events. AllPlayerevents are posted to each registered listener.The events are guaranteed to be delivered in the order that the actions representing the events occur. For example, if a
Playerstops shortly after it starts because it is playing back a very short media file, theSTARTEDevent must always preceed theEND_OF_MEDIAevent.An
ERRORevent may be sent any time an irrecoverable error has occured. When that happens, thePlayeris in the CLOSED state.The
Playerevent mechanism is extensible and somePlayersdefine events other than the ones described here. For a list of pre-defined player events, check thePlayerListenerinterface.
Theprefetchmethod is used to acquire scarce or exclusive resources such as the audio device. Conversely, thedeallocatemethod is used to release the scarce or exclusive resources. By using these two methods, an application can programmatically manage thePlayer's resources.For example, in an implementation with an exclusive audio device, to alternate the audio playback of multiple
Players, an application can selectively deallocate and prefetch individualPlayers.
TheTimeBaseof aPlayerprovides the basic measure of time for thePlayerto synchronize its media playback. EachPlayermust provide one defaultTimeBase. ThegetTimeBasemethod can be used to retrieve that.Setting a different
TimeBaseon aPlayerinstructs thePlayerto synchronize its playback rate according to the givenTimeBase.Two
Players can be synchronized by getting theTimeBasefrom onePlayerand setting that on the secondPlayer.However, not all
Players support using a differentTimeBaseother than its own. In such cases, aMediaExceptionwill be thrown whensetTimeBaseis called.
PlayerimplementsControllablewhich provides extra controls via some type-specificControlinterfaces.getControlandgetControlscannot be called when thePlayeris in the UNREALIZED or CLOSED state. AnIllegalStateExceptionwill be thrown.
 
 try {
     Player p = Manager.createPlayer("http://abc.mpg");
     p.realize();
     VideoControl vc;
     if ((vc = (VideoControl)p.getControl("VideoControl")) != null)
         add((Component)vc.initDisplayMode(vc.USE_GUI_PRIMITIVE, null));
     p.start();
 } catch (MediaException pe) {
 } catch (IOException ioe) {
 }
 
 
| Field Summary | |
| static int | CLOSEDThe state of the Playerindicating that thePlayeris closed. | 
| static int | PREFETCHEDThe state of the Playerindicating that it has
 acquired all the resources to begin playing. | 
| static int | REALIZEDThe state of the Playerindicating that it has
 acquired the required information but not the resources to function. | 
| static int | STARTEDThe state of the Playerindicating that thePlayerhas already started. | 
| static long | TIME_UNKNOWNThe returned value indicating that the requested time is unknown. | 
| static int | UNREALIZEDThe state of the Playerindicating that it has
 not acquired the required information and resources to function. | 
| Method Summary | |
|  void | addPlayerListener(PlayerListener playerListener)Add a player listener for this player. | 
|  void | close()Close the Playerand release its resources. | 
|  void | deallocate()Release the scarce or exclusive resources like the audio device acquired by the Player. | 
|  java.lang.String | getContentType()Get the content type of the media that's being played back by this Player. | 
|  long | getDuration()Get the duration of the media. | 
|  long | getMediaTime()Gets this Player's current media time. | 
|  int | getState()Gets the current state of this Player. | 
|  TimeBase | getTimeBase()Gets the TimeBasethat thisPlayeris using. | 
|  void | prefetch()Acquires the scarce and exclusive resources and processes as much data as necessary to reduce the start latency. | 
|  void | realize()Constructs portions of the Playerwithout
 acquiring the scarce and exclusive resources. | 
|  void | removePlayerListener(PlayerListener playerListener)Remove a player listener for this player. | 
|  void | setLoopCount(int count)Set the number of times the Playerwill loop
 and play the content. | 
|  long | setMediaTime(long now)Sets the Player's media time. | 
|  void | setTimeBase(TimeBase master)Sets the TimeBasefor thisPlayer. | 
|  void | start()Starts the Playeras soon as possible. | 
|  void | stop()Stops the Player. | 
| Methods inherited from interface javax.microedition.media.Controllable | 
| getControl, getControls | 
| Field Detail | 
public static final int UNREALIZED
Player indicating that it has
 not acquired the required information and resources to function.
 
 Value 100 is assigned to UNREALIZED.
public static final int REALIZED
Player indicating that it has
 acquired the required information but not the resources to function.
 
 Value 200 is assigned to REALIZED.
public static final int PREFETCHED
Player indicating that it has
 acquired all the resources to begin playing.
 
 Value 300 is assigned to PREFETCHED.
public static final int STARTED
Player indicating that the
 Player has already started.
 
 Value 400 is assigned to STARTED.
public static final int CLOSED
Player indicating that the
 Player is closed.
 
 Value 0 is assigned to CLOSED.
public static final long TIME_UNKNOWN
 Value -1 is assigned to TIME_UNKNOWN.
| Method Detail | 
public void realize()
             throws MediaException
Player without
 acquiring the scarce and exclusive resources.
 This may include examining media data and may
 take some time to complete.
 
 When realize completes successfully, 
 the Player is in the
 REALIZED state.
 
 If realize is called when the Player is in
 the REALIZED, PREFETCHTED or STARTED state,
 the request will be ignored.
IllegalStateException - Thrown if the Player
 is in the CLOSED state.MediaException - Thrown if the Player cannot
 be realized.SecurityException - Thrown if the caller does not
 have security permission to realize the Player.
public void prefetch()
              throws MediaException
 When prefetch completes successfully, 
 the Player is in
 the PREFETCHED state.
 
 If prefetch is called when the Player
 is in the UNREALIZED state,
 it will implicitly call realize.
 
 If prefetch is called when the Player 
 is already in the PREFETCHED state, the Player
 may still process data necessary to reduce the start
 latency.  This is to guarantee that start latency can
 be maintained at a minimum. 
 
 If prefetch is called when the Player 
 is in the STARTED state,
 the request will be ignored.
 
 If the Player cannot obtain all 
 of the resources it needs, it throws a MediaException.
 When that happens, the Player will not be able to
 start.  However, prefetch may be called again when
 the needed resource is later released perhaps by another
 Player or application.
IllegalStateException - Thrown if the Player
 is in the CLOSED state.MediaException - Thrown if the Player cannot
 be prefetched.SecurityException - Thrown if the caller does not
 have security permission to prefetch the Player.
public void start()
           throws MediaException
Player as soon as possible.
 If the Player was previously stopped
 by calling stop or reaching a preset
 stop time, it will resume playback
 from where it was previously stopped.  If the 
 Player has reached the end of media,
 calling start will automatically
 start the playback from the start of the media.
 
 When start returns successfully, 
 the Player must have been started and 
 a STARTED event will 
 be delivered to the registered PlayerListeners.
 However, the Player is not guaranteed to be in
 the STARTED state.  The Player may have
 already stopped (in the PREFETCHED state) because 
 the media has 0 or a very short duration.
 
 If start is called when the Player
 is in the UNREALIZED or REALIZED state,
 it will implicitly call prefetch.
 
 If start is called when the Player
 is in the STARTED state, 
 the request will be ignored.
IllegalStateException - Thrown if the Player
 is in the CLOSED state.MediaException - Thrown if the Player cannot
 be started.SecurityException - Thrown if the caller does not
 have security permission to start the Player.
public void stop()
          throws MediaException
Player.  It will pause the playback at
 the current media time.
 
 When stop returns, the Player is in the 
 PREFETCHED state.
 A STOPPED event will be delivered to the registered
 PlayerListeners.
 
 If stop is called on
 a stopped Player, the request is ignored.
IllegalStateException - Thrown if the Player
 is in the CLOSED state.MediaException - Thrown if the Player
 cannot be stopped.public void deallocate()
Player.
 
 When deallocate returns, the Player
 is in the UNREALIZED or REALIZED state.
 
 If the Player is blocked at
 the realize call while realizing, calling
 deallocate unblocks the realize call and
 returns the Player to the UNREALIZED state.
 Otherwise, calling deallocate returns the
 Player to  the REALIZED state.
 
 If deallocate is called when the Player
 is in the UNREALIZED or REALIZED
 state, the request is ignored.
 
 If the Player is STARTED
 when deallocate is called, deallocate
 will implicitly call stop on the Player.
IllegalStateException - Thrown if the Player
 is in the CLOSED state.public void close()
Player and release its resources.
 
 When the method returns, the Player is in the
 CLOSED state and can no longer be used.
 A CLOSED event will be delivered to the registered
 PlayerListeners.
 
 If close is called on a closed Player
 the request is ignored.
public void setTimeBase(TimeBase master)
                 throws MediaException
TimeBase for this Player.
 
 A Player has a default TimeBase that
 is determined by the implementation. 
 To reset a Player to its default 
 TimeBase, call setTimeBase(null).
master - The new TimeBase or 
 null to reset the Player
 to its default TimeBase.IllegalStateException - Thrown if the Player
 is in the UNREALIZED, STARTED or CLOSED state.MediaException - Thrown if
 the specified TimeBase cannot be set on the 
 Player.getTimeBase()public TimeBase getTimeBase()
TimeBase that this Player is using.TimeBase that this Player is using.IllegalStateException - Thrown if the Player
 is in the UNREALIZED or CLOSED state.setTimeBase(javax.microedition.media.TimeBase)
public long setMediaTime(long now)
                  throws MediaException
Player's media time.
 For some media types, setting the media time may not be very accurate. The returned value will indicate the actual media time set.
Setting the media time to negative values will effectively set the media time to zero. Setting the media time to beyond the duration of the media will set the time to the end of media.
 There are some media types that cannot support the setting
 of media time.  Calling setMediaTime will throw
 a MediaException in those cases.
now - The new media time in microseconds.IllegalStateException - Thrown if the Player
 is in the UNREALIZED or CLOSED state.MediaException - Thrown if the media time
 cannot be set.getMediaTime()public long getMediaTime()
Player's current media time.
 If the media time cannot be determined, 
 getMediaTime returns TIME_UNKNOWN.TIME_UNKNOWN.IllegalStateException - Thrown if the Player
 is in the CLOSED state.setMediaTime(long)public int getState()
Player.
 The possible states are: UNREALIZED,
 REALIZED, PREFETCHED, STARTED, CLOSED.Player's current state.public long getDuration()
Player is presenting live
 media)  getDuration returns TIME_UNKNOWN.TIME_UNKNOWN.IllegalStateException - Thrown if the Player
 is in the CLOSED state.public java.lang.String getContentType()
Player.
 See content type for the syntax of the content type returned.
Player.IllegalStateException - Thrown if the Player
 is in the UNREALIZED or CLOSED state.public void setLoopCount(int count)
Player will loop
 and play the content.
 
 By default, the loop count is one.  That is, once started,
 the Player will start playing from the current
 media time to the end of media once.
 
 If the loop count is set to N where N is bigger than one,
 starting the Player will start playing the
 content from the current media time to the end of media.
 It will then loop back to the beginning of the content 
 (media time zero) and play till the end of the media.
 The number of times it will loop to the beginning and 
 play to the end of media will be N-1.
 
 Setting the loop count to 0 is invalid.  An 
 IllegalArgumentException will be thrown.
 
Setting the loop count to -1 will loop and play the content indefinitely.
 If the Player is stopped before the preset loop
 count is reached either because stop is called or
 a preset stop time (set with the StopTimeControl) 
 is reached, calling start again will
 resume the looping playback from where it was stopped until it
 fully reaches the preset loop count. 
 
 
 An END_OF_MEDIA event will be posted 
 every time the Player reaches the end of media.
 If the Player loops back to the beginning and
 starts playing again because it has not completed the loop
 count, a STARTED event will be posted.
count - indicates the number of times the content will be
 played.  1 is the default.  0 is invalid.  -1 indicates looping 
 indefintely.IllegalArgumentException - Thrown if the given
 count is invalid.IllegalStateException - Thrown if the 
 Player is in the STARTED 
 or CLOSED state.public void addPlayerListener(PlayerListener playerListener)
playerListener - the listener to add.
 If null is used, the request will be ignored.IllegalStateException - Thrown if the Player
 is in the CLOSED state.removePlayerListener(javax.microedition.media.PlayerListener)public void removePlayerListener(PlayerListener playerListener)
playerListener - the listener to remove.
 If null is used or the given 
 playerListener is not a listener for this
 Player, the request will be ignored.IllegalStateException - Thrown if the Player
 is in the CLOSED state.addPlayerListener(javax.microedition.media.PlayerListener)| 
 | Copyright 2002 Sun Microsystems, Inc.; Nokia Corporation. See the Copyright Notice and Specification License for more details. | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||