Class MediaPlayer

  • public final class MediaPlayer
    extends Object
    The MediaPlayer class provides the controls for playing media. It is used in combination with the Media and MediaView classes to display and control media playback. MediaPlayer does not contain any visual elements so must be used with the MediaView class to view any video track which may be present.

    MediaPlayer provides the pause(), play(), stop() and seek() controls as well as the rate and autoPlay properties which apply to all types of media. It also provides the balance, mute, and volume properties which control audio playback characteristics. Further control over audio quality may be attained via the AudioEqualizer associated with the player. Frequency descriptors of audio playback may be observed by registering an AudioSpectrumListener. Information about playback position, rate, and buffering may be obtained from the currentTime, currentRate, and bufferProgressTime properties, respectively. Media marker notifications are received by an event handler registered as the onMarker property.

    For finite duration media, playback may be positioned at any point in time between 0.0 and the duration of the media. MediaPlayer refines this definition by adding the startTime and stopTime properties which in effect define a virtual media source with time position constrained to [startTime,stopTime]. Media playback commences at startTime and continues to stopTime. The interval defined by these two endpoints is termed a cycle with duration being the difference of the stop and start times. This cycle may be set to repeat a specific or indefinite number of times. The total duration of media playback is then the product of the cycle duration and the number of times the cycle is played. If the stop time of the cycle is reached and the cycle is to be played again, the event handler registered with the onRepeat property is invoked. If the stop time is reached and the cycle is not to be repeated, then the event handler registered with the onEndOfMedia property is invoked. A zero-relative index of which cycle is presently being played is maintained by currentCount.

    The operation of a MediaPlayer is inherently asynchronous. A player is not prepared to respond to commands quasi-immediately until its status has transitioned to MediaPlayer.Status.READY, which in effect generally occurs when media pre-roll completes. Some requests made of a player prior to its status being READY will however take effect when that status is entered. These include invoking play() without an intervening invocation of pause() or stop() before the READY transition, as well as setting any of the autoPlay, balance, mute, rate, startTime, stopTime, and volume properties.

    The status property may be monitored to make the application aware of player status changes, and callback functions may be registered via properties such as onReady if an action should be taken when a particular status is entered. There are also error and onError properties which respectively enable monitoring when an error occurs and taking a specified action in response thereto.

    The same MediaPlayer object may be shared among multiple MediaViews. This will not affect the player itself. In particular, the property settings of the view will not have any effect on media playback.

    JavaFX 2.0
    See Also:
    Media, MediaView
    • Field Detail


        public static final int INDEFINITE
        A value representing an effectively infinite number of playback cycles. When cycleCount is set to this value, the player will replay the Media until stopped or paused.
        See Also:
        Constant Field Values
    • Constructor Detail

      • MediaPlayer

        public MediaPlayer​(Media media)
        Create a player for a specific media. This is the only way to associate a Media object with a MediaPlayer: once the player is created it cannot be changed. Errors which occur synchronously within the constructor will cause exceptions to be thrown. Errors which occur asynchronously will cause the error property to be set and consequently any onError callback to be invoked.

        When created, the status of the player will be MediaPlayer.Status.UNKNOWN. Once the status has transitioned to MediaPlayer.Status.READY the player will be in a usable condition. The amount of time between player creation and its entering READY status may vary depending, for example, on whether the media is being read over a network connection or from a local file system.

        media - The media to play.
        NullPointerException - if media is null.
        MediaException - if any synchronous errors occur within the constructor.
    • Method Detail

      • getAudioEqualizer

        public final AudioEqualizer getAudioEqualizer()
        Retrieve the AudioEqualizer associated with this player.
        the AudioEqualizer or null if player is disposed.
      • getError

        public final MediaException getError()
        Retrieve the value of the error property or null if there is no error.
        a MediaException or null.
      • setOnError

        public final void setOnError​(Runnable value)
        Sets the event handler to be called when an error occurs.
        value - the event handler or null.
      • getOnError

        public final Runnable getOnError()
        Retrieves the event handler for errors.
        the event handler.
      • getMedia

        public final Media getMedia()
        Retrieves the Media instance being played.
        the Media object.
      • setAutoPlay

        public final void setAutoPlay​(boolean value)
        Sets the autoPlay property value.
        value - whether to enable auto-playback
      • isAutoPlay

        public final boolean isAutoPlay()
        Retrieves the autoPlay property value.
        the value.
      • autoPlayProperty

        public BooleanProperty autoPlayProperty()
        Whether playing should start as soon as possible. For a new player this will occur once the player has reached the READY state. The default value is false.
        See Also:
        isAutoPlay(), setAutoPlay(boolean)
      • play

        public void play()
        Starts playing the media. If previously paused, then playback resumes where it was paused. If playback was stopped, playback starts from the startTime. When playing actually starts the status will be set to MediaPlayer.Status.PLAYING.
      • setRate

        public final void setRate​(double value)
        Sets the playback rate to the supplied value. Its effect will be clamped to the range [0.0, 8.0]. Invoking this method will have no effect if media duration is Duration.INDEFINITE.
        value - the playback rate
      • getRate

        public final double getRate()
        Retrieves the playback rate.
        the playback rate
      • rateProperty

        public DoubleProperty rateProperty()
        The rate at which the media should be played. For example, a rate of 1.0 plays the media at its normal (encoded) playback rate, 2.0 plays back at twice the normal rate, etc. The currently supported range of rates is [0.0, 8.0]. The default value is 1.0.
        See Also:
        getRate(), setRate(double)
      • getCurrentRate

        public final double getCurrentRate()
        Retrieves the current playback rate.
        the current rate
      • currentRateProperty

        public ReadOnlyDoubleProperty currentRateProperty()
        The current rate of playback regardless of settings. For example, if rate is set to 1.0 and the player is paused or stalled, then currentRate will be zero.
        See Also:
      • setVolume

        public final void setVolume​(double value)
        Sets the audio playback volume. Its effect will be clamped to the range [0.0, 1.0].
        value - the volume
      • getVolume

        public final double getVolume()
        Retrieves the audio playback volume. The default value is 1.0.
        the audio volume
      • volumeProperty

        public DoubleProperty volumeProperty()
        The volume at which the media should be played. The range of effective values is [0.0 1.0] where 0.0 is inaudible and 1.0 is full volume, which is the default.
        See Also:
        getVolume(), setVolume(double)
      • setBalance

        public final void setBalance​(double value)
        Sets the audio balance. Its effect will be clamped to the range [-1.0, 1.0].
        value - the balance
      • getBalance

        public final double getBalance()
        Retrieves the audio balance.
        the audio balance
      • balanceProperty

        public DoubleProperty balanceProperty()
        The balance, or left-right setting, of the audio output. The range of effective values is [-1.0, 1.0] with -1.0 being full left, 0.0 center, and 1.0 full right. The default value is 0.0.
        See Also:
        getBalance(), setBalance(double)
      • setStartTime

        public final void setStartTime​(Duration value)
        Sets the start time. Its effect will be clamped to the range [Duration.ZEROstopTime). Invoking this method will have no effect if media duration is Duration.INDEFINITE.
        value - the start time
      • getStartTime

        public final Duration getStartTime()
        Retrieves the start time. The default value is Duration.ZERO.
        the start time
      • startTimeProperty

        public ObjectProperty<Duration> startTimeProperty()
        The time offset where media should start playing, or restart from when repeating. When playback is stopped, the current time is reset to this value. If this value is positive, then the first time the media is played there might be a delay before playing begins unless the play position can be set to an arbitrary time within the media. This could occur for example for a video which does not contain a lookup table of the offsets of intra-frames in the video stream. In such a case the video frames would need to be skipped over until the position of the first intra-frame before the start time was reached. The default value is Duration.ZERO.

        Constraints: 0 ≤ startTime < stopTime

        See Also:
        getStartTime(), setStartTime(Duration)
      • setStopTime

        public final void setStopTime​(Duration value)
        Sets the stop time. Its effect will be clamped to the range (startTimeMedia.duration]. Invoking this method will have no effect if media duration is Duration.INDEFINITE.
        value - the stop time
      • getStopTime

        public final Duration getStopTime()
        Retrieves the stop time. The default value is getMedia().getDuration(). Note that Media.duration may have the value Duration.UNKNOWN if media initialization is not complete.
        the stop time
      • getCycleDuration

        public final Duration getCycleDuration()
        Retrieves the cycle duration in seconds.
        the cycle duration
      • getTotalDuration

        public final Duration getTotalDuration()
        Retrieves the total playback duration including all cycles (repetitions).
        the total playback duration
      • totalDurationProperty

        public ReadOnlyObjectProperty<Duration> totalDurationProperty()
        The total amount of play time if allowed to play until finished. If cycleCount is set to INDEFINITE then this will also be INDEFINITE. If the Media duration is UNKNOWN, then this will likewise be UNKNOWN. Otherwise, total duration will be the product of cycleDuration and cycleCount.
        See Also:
      • getCurrentTime

        public final Duration getCurrentTime()
        Retrieves the current media time.
        the current media time
      • seek

        public void seek​(Duration seekTime)
        Seeks the player to a new playback time. Invoking this method will have no effect while the player status is MediaPlayer.Status.STOPPED or media duration is Duration.INDEFINITE.

        The behavior of seek() is constrained as follows where start time and stop time indicate the effective lower and upper bounds, respectively, of media playback:

        MediaPlayer Seek Table
        seekTimeseek position
        nullno change
        Duration.UNKNOWNno change
        Duration.INDEFINITEstop time
        seekTime < start timestart time
        seekTime > stop timestop time
        start time ≤ seekTime ≤ stop timeseekTime
        seekTime - the requested playback time
      • getStatus

        public final MediaPlayer.Status getStatus()
        Retrieves the current player status.
        the playback status
      • getBufferProgressTime

        public final Duration getBufferProgressTime()
        Retrieves the bufferProgressTime value.
        the buffer progress time
      • bufferProgressTimeProperty

        public ReadOnlyObjectProperty<Duration> bufferProgressTimeProperty()
        The current buffer position indicating how much media can be played without stalling the MediaPlayer. This is applicable to buffered streams such as those reading from network connections as opposed for example to local files.

        Seeking to a position beyond bufferProgressTime might cause a slight pause in playback until an amount of data sufficient to permit playback resumption has been buffered.

        See Also:
      • setCycleCount

        public final void setCycleCount​(int value)
        Sets the cycle count. Its effect will be constrained to [1,Integer.MAX_VALUE]. Invoking this method will have no effect if media duration is Duration.INDEFINITE.
        value - the cycle count
      • getCycleCount

        public final int getCycleCount()
        Retrieves the cycle count.
        the cycle count.
      • cycleCountProperty

        public IntegerProperty cycleCountProperty()
        The number of times the media will be played. By default, cycleCount is set to 1 meaning the media will only be played once. Setting cycleCount to a value greater than 1 will cause the media to play the given number of times or until stopped. If set to INDEFINITE, playback will repeat until stop() or pause() is called.

        constraints: cycleCount ≥ 1

        See Also:
        getCycleCount(), setCycleCount(int)
      • getCurrentCount

        public final int getCurrentCount()
        Retrieves the index of the current cycle.
        the current cycle index
      • currentCountProperty

        public ReadOnlyIntegerProperty currentCountProperty()
        The number of completed playback cycles. On the first pass, the value should be 0. On the second pass, the value should be 1 and so on. It is incremented at the end of each cycle just prior to seeking back to startTime, i.e., when stopTime or the end of media has been reached.
        See Also:
      • setMute

        public final void setMute​(boolean value)
        Sets the value of muteProperty().
        value - the mute setting
      • isMute

        public final boolean isMute()
        Retrieves the muteProperty() value.
        the mute setting
      • muteProperty

        public BooleanProperty muteProperty()
        Whether the player audio is muted. A value of true indicates that audio is not being produced. The value of this property has no effect on volume, i.e., if the audio is muted and then un-muted, audio playback will resume at the same audible level provided of course that the volume property has not been modified meanwhile. The default value is false.
        See Also:
        isMute(), setMute(boolean)
      • setOnMarker

        public final void setOnMarker​(EventHandler<MediaMarkerEvent> onMarker)
        Sets the marker event handler.
        onMarker - the marker event handler.
      • getOnMarker

        public final EventHandler<MediaMarkerEvent> getOnMarker()
        Retrieves the marker event handler.
        the marker event handler.
      • setOnEndOfMedia

        public final void setOnEndOfMedia​(Runnable value)
        Sets the end of media event handler.
        value - the event handler or null.
      • getOnEndOfMedia

        public final Runnable getOnEndOfMedia()
        Retrieves the end of media event handler.
        the event handler or null.
      • setOnRepeat

        public final void setOnRepeat​(Runnable value)
        Sets the repeat event handler.
        value - the event handler or null.
      • getOnRepeat

        public final Runnable getOnRepeat()
        Retrieves the repeat event handler.
        the event handler or null.
      • setAudioSpectrumNumBands

        public final void setAudioSpectrumNumBands​(int value)
        Sets the number of bands in the audio spectrum.
        value - the number of spectral bands; valuemust be ≥ 2
      • getAudioSpectrumNumBands

        public final int getAudioSpectrumNumBands()
        Retrieves the number of bands in the audio spectrum.
        the number of spectral bands.
      • audioSpectrumNumBandsProperty

        public IntegerProperty audioSpectrumNumBandsProperty()
        The number of bands in the audio spectrum. The default value is 128; minimum is 2. The frequency range of the audio signal will be divided into the specified number of frequency bins. For example, a typical digital music signal has a frequency range of [0.0, 22050] Hz. If the number of spectral bands were in this case set to 10, the width of each frequency bin in the spectrum would be 2205 Hz with the lower bound of the lowest frequency bin equal to 0.0.
        See Also:
        getAudioSpectrumNumBands(), setAudioSpectrumNumBands(int)
      • setAudioSpectrumInterval

        public final void setAudioSpectrumInterval​(double value)
        Sets the value of the audio spectrum notification interval in seconds.
        value - a positive value specifying the spectral update interval
      • getAudioSpectrumInterval

        public final double getAudioSpectrumInterval()
        Retrieves the value of the audio spectrum notification interval in seconds.
        the spectral update interval
      • setAudioSpectrumThreshold

        public final void setAudioSpectrumThreshold​(int value)
        Sets the audio spectrum threshold in decibels.
        value - the spectral threshold in dB; must be ≤ 0.
      • getAudioSpectrumThreshold

        public final int getAudioSpectrumThreshold()
        Retrieves the audio spectrum threshold in decibels.
        the spectral threshold in dB
      • audioSpectrumThresholdProperty

        public IntegerProperty audioSpectrumThresholdProperty()
        The sensitivity threshold in decibels; must be non-positive. Values below this threshold with respect to the peak frequency in the given spectral band will be set to the value of the threshold. The default value is -60 dB.
        See Also:
        getAudioSpectrumThreshold(), setAudioSpectrumThreshold(int)
      • setAudioSpectrumListener

        public final void setAudioSpectrumListener​(AudioSpectrumListener listener)
        Sets the listener of the audio spectrum.
        listener - the spectral listener or null.
      • getAudioSpectrumListener

        public final AudioSpectrumListener getAudioSpectrumListener()
        Retrieves the listener of the audio spectrum.
        the spectral listener or null
      • audioSpectrumListenerProperty

        public ObjectProperty<AudioSpectrumListener> audioSpectrumListenerProperty()
        A listener for audio spectrum updates. When the listener is registered, audio spectrum computation is enabled; upon removing the listener, computation is disabled. Only a single listener may be registered, so if multiple observers are required, events must be forwarded.

        An AudioSpectrumListener may be useful for example to plot the frequency spectrum of the audio being played or to generate waveforms for a music visualizer.

        See Also:
        getAudioSpectrumListener(), setAudioSpectrumListener(AudioSpectrumListener)
      • dispose

        public void dispose()
        Free all resources associated with player. Player SHOULD NOT be used after this function is called. Player will transition to MediaPlayer.Status.DISPOSED after this method is done. This method can be called anytime regardless of current player status.
        JavaFX 8.0