Package com.google.android.exoplayer2

## Class BasePlayer

- java.lang.Object
- - com.google.android.exoplayer2.BasePlayer

- All Implemented Interfaces:
    `Player`
  Direct Known Subclasses:
    `CastPlayer`, `SimpleBasePlayer`, `SimpleExoPlayer`, `StubPlayer`

      public abstract class BasePlayer
      extends Object
      implements Player

  Abstract base `Player` which implements common implementation independent methods.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface com.google.android.exoplayer2.Player

      `Player.Command, Player.Commands, Player.DiscontinuityReason, Player.Event, Player.Events, Player.Listener, Player.MediaItemTransitionReason, Player.PlaybackSuppressionReason, Player.PlayWhenReadyChangeReason, Player.PositionInfo, Player.RepeatMode, Player.State, Player.TimelineChangeReason`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected Timeline.Window` | `window` |

    - ### Fields inherited from interface com.google.android.exoplayer2.Player

      `COMMAND_ADJUST_DEVICE_VOLUME, COMMAND_CHANGE_MEDIA_ITEMS, COMMAND_GET_AUDIO_ATTRIBUTES, COMMAND_GET_CURRENT_MEDIA_ITEM, COMMAND_GET_DEVICE_VOLUME, COMMAND_GET_MEDIA_ITEMS_METADATA, COMMAND_GET_TEXT, COMMAND_GET_TIMELINE, COMMAND_GET_TRACKS, COMMAND_GET_VOLUME, COMMAND_INVALID, COMMAND_PLAY_PAUSE, COMMAND_PREPARE, COMMAND_SEEK_BACK, COMMAND_SEEK_FORWARD, COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM, COMMAND_SEEK_IN_CURRENT_WINDOW, COMMAND_SEEK_TO_DEFAULT_POSITION, COMMAND_SEEK_TO_MEDIA_ITEM, COMMAND_SEEK_TO_NEXT, COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, COMMAND_SEEK_TO_NEXT_WINDOW, COMMAND_SEEK_TO_PREVIOUS, COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, COMMAND_SEEK_TO_PREVIOUS_WINDOW, COMMAND_SEEK_TO_WINDOW, COMMAND_SET_DEVICE_VOLUME, COMMAND_SET_MEDIA_ITEM, COMMAND_SET_MEDIA_ITEMS_METADATA, COMMAND_SET_REPEAT_MODE, COMMAND_SET_SHUFFLE_MODE, COMMAND_SET_SPEED_AND_PITCH, COMMAND_SET_TRACK_SELECTION_PARAMETERS, COMMAND_SET_VIDEO_SURFACE, COMMAND_SET_VOLUME, COMMAND_STOP, DISCONTINUITY_REASON_AUTO_TRANSITION, DISCONTINUITY_REASON_INTERNAL, DISCONTINUITY_REASON_REMOVE, DISCONTINUITY_REASON_SEEK, DISCONTINUITY_REASON_SEEK_ADJUSTMENT, DISCONTINUITY_REASON_SKIP, EVENT_AUDIO_ATTRIBUTES_CHANGED, EVENT_AUDIO_SESSION_ID, EVENT_AVAILABLE_COMMANDS_CHANGED, EVENT_CUES, EVENT_DEVICE_INFO_CHANGED, EVENT_DEVICE_VOLUME_CHANGED, EVENT_IS_LOADING_CHANGED, EVENT_IS_PLAYING_CHANGED, EVENT_MAX_SEEK_TO_PREVIOUS_POSITION_CHANGED, EVENT_MEDIA_ITEM_TRANSITION, EVENT_MEDIA_METADATA_CHANGED, EVENT_METADATA, EVENT_PLAY_WHEN_READY_CHANGED, EVENT_PLAYBACK_PARAMETERS_CHANGED, EVENT_PLAYBACK_STATE_CHANGED, EVENT_PLAYBACK_SUPPRESSION_REASON_CHANGED, EVENT_PLAYER_ERROR, EVENT_PLAYLIST_METADATA_CHANGED, EVENT_POSITION_DISCONTINUITY, EVENT_RENDERED_FIRST_FRAME, EVENT_REPEAT_MODE_CHANGED, EVENT_SEEK_BACK_INCREMENT_CHANGED, EVENT_SEEK_FORWARD_INCREMENT_CHANGED, EVENT_SHUFFLE_MODE_ENABLED_CHANGED, EVENT_SKIP_SILENCE_ENABLED_CHANGED, EVENT_SURFACE_SIZE_CHANGED, EVENT_TIMELINE_CHANGED, EVENT_TRACK_SELECTION_PARAMETERS_CHANGED, EVENT_TRACKS_CHANGED, EVENT_VIDEO_SIZE_CHANGED, EVENT_VOLUME_CHANGED, MEDIA_ITEM_TRANSITION_REASON_AUTO, MEDIA_ITEM_TRANSITION_REASON_PLAYLIST_CHANGED, MEDIA_ITEM_TRANSITION_REASON_REPEAT, MEDIA_ITEM_TRANSITION_REASON_SEEK, PLAY_WHEN_READY_CHANGE_REASON_AUDIO_BECOMING_NOISY, PLAY_WHEN_READY_CHANGE_REASON_AUDIO_FOCUS_LOSS, PLAY_WHEN_READY_CHANGE_REASON_END_OF_MEDIA_ITEM, PLAY_WHEN_READY_CHANGE_REASON_REMOTE, PLAY_WHEN_READY_CHANGE_REASON_USER_REQUEST, PLAYBACK_SUPPRESSION_REASON_NONE, PLAYBACK_SUPPRESSION_REASON_TRANSIENT_AUDIO_FOCUS_LOSS, REPEAT_MODE_ALL, REPEAT_MODE_OFF, REPEAT_MODE_ONE, STATE_BUFFERING, STATE_ENDED, STATE_IDLE, STATE_READY, TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED, TIMELINE_CHANGE_REASON_SOURCE_UPDATE`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `BasePlayer()` |

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addMediaItem​(int index, MediaItem mediaItem)` | Adds a media item at the given index of the playlist.
    `void` | `addMediaItem​(MediaItem mediaItem)` | Adds a media item to the end of the playlist.
    `void` | `addMediaItems​(List<MediaItem> mediaItems)` | Adds a list of media items to the end of the playlist.
    `boolean` | `canAdvertiseSession()` | Returns whether the player can be used to advertise a media session.
    `void` | `clearMediaItems()` | Clears the playlist.
    `int` | `getBufferedPercentage()` | Returns an estimate of the percentage in the current content or ad up to which data is buffered, or 0 if no estimate is available.
    `long` | `getContentDuration()` | If `Player.isPlayingAd()` returns `true`, returns the duration of the current content in milliseconds, or `C.TIME_UNSET` if the duration is not known.
    `long` | `getCurrentLiveOffset()` | Returns the offset of the current playback position from the live edge in milliseconds, or `C.TIME_UNSET` if the current `MediaItem` `Player.isCurrentMediaItemLive()` isn't live} or the offset is unknown.
    `Object` | `getCurrentManifest()` | Returns the current manifest.
    `MediaItem` | `getCurrentMediaItem()` | Returns the currently playing `MediaItem`.
    `int` | `getCurrentWindowIndex()` | Deprecated. Use `Player.getCurrentMediaItemIndex()` instead.
    `MediaItem` | `getMediaItemAt​(int index)` | Returns the `MediaItem` at the given index.
    `int` | `getMediaItemCount()` | Returns the number of media items in the playlist.
    `int` | `getNextMediaItemIndex()` | Returns the index of the `MediaItem` that will be played if `Player.seekToNextMediaItem()` is called, which may depend on the current repeat mode and whether shuffle mode is enabled.
    `int` | `getNextWindowIndex()` | Deprecated. Use `getNextMediaItemIndex()` instead.
    `int` | `getPreviousMediaItemIndex()` | Returns the index of the `MediaItem` that will be played if `Player.seekToPreviousMediaItem()` is called, which may depend on the current repeat mode and whether shuffle mode is enabled.
    `int` | `getPreviousWindowIndex()` | Deprecated. Use `getPreviousMediaItemIndex()` instead.
    `boolean` | `hasNext()` | Deprecated. Use `hasNextMediaItem()` instead.
    `boolean` | `hasNextMediaItem()` | Returns whether a next `MediaItem` exists, which may depend on the current repeat mode and whether shuffle mode is enabled.
    `boolean` | `hasNextWindow()` | Deprecated. Use `hasNextMediaItem()` instead.
    `boolean` | `hasPrevious()` | Deprecated. Use `hasPreviousMediaItem()` instead.
    `boolean` | `hasPreviousMediaItem()` | Returns whether a previous media item exists, which may depend on the current repeat mode and whether shuffle mode is enabled.
    `boolean` | `hasPreviousWindow()` | Deprecated. Use `hasPreviousMediaItem()` instead.
    `boolean` | `isCommandAvailable​(@com.google.android.exoplayer2.Player.Command int command)` | Returns whether the provided `Player.Command` is available.
    `boolean` | `isCurrentMediaItemDynamic()` | Returns whether the current `MediaItem` is dynamic (may change when the `Timeline` is updated), or `false` if the `Timeline` is empty.
    `boolean` | `isCurrentMediaItemLive()` | Returns whether the current `MediaItem` is live, or `false` if the `Timeline` is empty.
    `boolean` | `isCurrentMediaItemSeekable()` | Returns whether the current `MediaItem` is seekable, or `false` if the `Timeline` is empty.
    `boolean` | `isCurrentWindowDynamic()` | Deprecated. Use `isCurrentMediaItemDynamic()` instead.
    `boolean` | `isCurrentWindowLive()` | Deprecated. Use `isCurrentMediaItemLive()` instead.
    `boolean` | `isCurrentWindowSeekable()` | Deprecated. Use `isCurrentMediaItemSeekable()` instead.
    `boolean` | `isPlaying()` | Returns whether the player is playing, i.e.
    `void` | `moveMediaItem​(int currentIndex, int newIndex)` | Moves the media item at the current index to the new index.
    `void` | `next()` | Deprecated. Use `seekToNextMediaItem()` instead.
    `void` | `pause()` | Pauses playback.
    `void` | `play()` | Resumes playback as soon as `Player.getPlaybackState()` == `Player.STATE_READY`.
    `void` | `previous()` | Deprecated. Use `seekToPreviousMediaItem()` instead.
    `void` | `removeMediaItem​(int index)` | Removes the media item at the given index of the playlist.
    `void` | `seekBack()` | Seeks back in the current `MediaItem` by `Player.getSeekBackIncrement()` milliseconds.
    `void` | `seekForward()` | Seeks forward in the current `MediaItem` by `Player.getSeekForwardIncrement()` milliseconds.
    `void` | `seekTo​(int mediaItemIndex, long positionMs)` | Seeks to a position specified in milliseconds in the specified `MediaItem`.
    `abstract void` | `seekTo​(int mediaItemIndex, long positionMs, @com.google.android.exoplayer2.Player.Command int seekCommand, boolean isRepeatingCurrentItem)` | Seeks to a position in the specified `MediaItem`.
    `void` | `seekTo​(long positionMs)` | Seeks to a position specified in milliseconds in the current `MediaItem`.
    `void` | `seekToDefaultPosition()` | Seeks to the default position associated with the current `MediaItem`.
    `void` | `seekToDefaultPosition​(int mediaItemIndex)` | Seeks to the default position associated with the specified `MediaItem`.
    `void` | `seekToNext()` | Seeks to a later position in the current or next `MediaItem` (if available).
    `void` | `seekToNextMediaItem()` | Seeks to the default position of the next `MediaItem`, which may depend on the current repeat mode and whether shuffle mode is enabled.
    `void` | `seekToNextWindow()` | Deprecated. Use `seekToNextMediaItem()` instead.
    `void` | `seekToPrevious()` | Seeks to an earlier position in the current or previous `MediaItem` (if available).
    `void` | `seekToPreviousMediaItem()` | Seeks to the default position of the previous `MediaItem`, which may depend on the current repeat mode and whether shuffle mode is enabled.
    `void` | `seekToPreviousWindow()` | Deprecated. Use `seekToPreviousMediaItem()` instead.
    `void` | `setMediaItem​(MediaItem mediaItem)` | Clears the playlist, adds the specified `MediaItem` and resets the position to the default position.
    `void` | `setMediaItem​(MediaItem mediaItem, boolean resetPosition)` | Clears the playlist and adds the specified `MediaItem`.
    `void` | `setMediaItem​(MediaItem mediaItem, long startPositionMs)` | Clears the playlist and adds the specified `MediaItem`.
    `void` | `setMediaItems​(List<MediaItem> mediaItems)` | Clears the playlist, adds the specified media items and resets the position to the default position.
    `void` | `setPlaybackSpeed​(float speed)` | Changes the rate at which playback occurs.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface com.google.android.exoplayer2.Player

      `addListener, addMediaItems, clearVideoSurface, clearVideoSurface, clearVideoSurfaceHolder, clearVideoSurfaceView, clearVideoTextureView, decreaseDeviceVolume, getApplicationLooper, getAudioAttributes, getAvailableCommands, getBufferedPosition, getContentBufferedPosition, getContentPosition, getCurrentAdGroupIndex, getCurrentAdIndexInAdGroup, getCurrentCues, getCurrentMediaItemIndex, getCurrentPeriodIndex, getCurrentPosition, getCurrentTimeline, getCurrentTracks, getDeviceInfo, getDeviceVolume, getDuration, getMaxSeekToPreviousPosition, getMediaMetadata, getPlaybackParameters, getPlaybackState, getPlaybackSuppressionReason, getPlayerError, getPlaylistMetadata, getPlayWhenReady, getRepeatMode, getSeekBackIncrement, getSeekForwardIncrement, getShuffleModeEnabled, getSurfaceSize, getTotalBufferedDuration, getTrackSelectionParameters, getVideoSize, getVolume, increaseDeviceVolume, isDeviceMuted, isLoading, isPlayingAd, moveMediaItems, prepare, release, removeListener, removeMediaItems, setDeviceMuted, setDeviceVolume, setMediaItems, setMediaItems, setPlaybackParameters, setPlaylistMetadata, setPlayWhenReady, setRepeatMode, setShuffleModeEnabled, setTrackSelectionParameters, setVideoSurface, setVideoSurfaceHolder, setVideoSurfaceView, setVideoTextureView, setVolume, stop, stop`

- - ### Field Detail

    - #### window

          protected final Timeline.Window window

  - ### Constructor Detail

    - #### BasePlayer

          protected BasePlayer()

  - ### Method Detail

    - #### setMediaItem

          public final void setMediaItem​(MediaItem mediaItem)

      Description copied from interface: `Player`
      Clears the playlist, adds the specified `MediaItem` and resets the position to the default position.

      This method must only be called if `Player.COMMAND_SET_MEDIA_ITEM` is available.

      Specified by:
        `setMediaItem` in interface `Player`
      Parameters:
        `mediaItem` - The new `MediaItem`.

    - #### setMediaItem

          public final void setMediaItem​(MediaItem mediaItem,
                                         long startPositionMs)

      Description copied from interface: `Player`
      Clears the playlist and adds the specified `MediaItem`.

      This method must only be called if `Player.COMMAND_SET_MEDIA_ITEM` is available.

      Specified by:
        `setMediaItem` in interface `Player`
      Parameters:
        `mediaItem` - The new `MediaItem`.
        `startPositionMs` - The position in milliseconds to start playback from.

    - #### setMediaItem

          public final void setMediaItem​(MediaItem mediaItem,
                                         boolean resetPosition)

      Description copied from interface: `Player`
      Clears the playlist and adds the specified `MediaItem`.

      This method must only be called if `Player.COMMAND_SET_MEDIA_ITEM` is available.

      Specified by:
        `setMediaItem` in interface `Player`
      Parameters:
        `mediaItem` - The new `MediaItem`.
        `resetPosition` - Whether the playback position should be reset to the default position. If false, playback will start from the position defined by `Player.getCurrentMediaItemIndex()` and `Player.getCurrentPosition()`.

    - #### setMediaItems

          public final void setMediaItems​(List<MediaItem> mediaItems)

      Description copied from interface: `Player`
      Clears the playlist, adds the specified media items and resets the position to the default position.

      This method must only be called if `Player.COMMAND_CHANGE_MEDIA_ITEMS` is available.

      Specified by:
        `setMediaItems` in interface `Player`
      Parameters:
        `mediaItems` - The new media items.

    - #### addMediaItem

          public final void addMediaItem​(int index,
                                         MediaItem mediaItem)

      Description copied from interface: `Player`
      Adds a media item at the given index of the playlist.

      This method must only be called if `Player.COMMAND_CHANGE_MEDIA_ITEMS` is available.

      Specified by:
        `addMediaItem` in interface `Player`
      Parameters:
        `index` - The index at which to add the media item. If the index is larger than the size of the playlist, the media item is added to the end of the playlist.
        `mediaItem` - The `MediaItem` to add.

    - #### addMediaItem

          public final void addMediaItem​(MediaItem mediaItem)

      Description copied from interface: `Player`
      Adds a media item to the end of the playlist.

      This method must only be called if `Player.COMMAND_CHANGE_MEDIA_ITEMS` is available.

      Specified by:
        `addMediaItem` in interface `Player`
      Parameters:
        `mediaItem` - The `MediaItem` to add.

    - #### addMediaItems

          public final void addMediaItems​(List<MediaItem> mediaItems)

      Description copied from interface: `Player`
      Adds a list of media items to the end of the playlist.

      This method must only be called if `Player.COMMAND_CHANGE_MEDIA_ITEMS` is available.

      Specified by:
        `addMediaItems` in interface `Player`
      Parameters:
        `mediaItems` - The media items to add.

    - #### moveMediaItem

          public final void moveMediaItem​(int currentIndex,
                                          int newIndex)

      Description copied from interface: `Player`
      Moves the media item at the current index to the new index.

      This method must only be called if `Player.COMMAND_CHANGE_MEDIA_ITEMS` is available.

      Specified by:
        `moveMediaItem` in interface `Player`
      Parameters:
        `currentIndex` - The current index of the media item to move. If the index is larger than the size of the playlist, the request is ignored.
        `newIndex` - The new index of the media item. If the new index is larger than the size of the playlist the item is moved to the end of the playlist.

    - #### removeMediaItem

          public final void removeMediaItem​(int index)

      Description copied from interface: `Player`
      Removes the media item at the given index of the playlist.

      This method must only be called if `Player.COMMAND_CHANGE_MEDIA_ITEMS` is available.

      Specified by:
        `removeMediaItem` in interface `Player`
      Parameters:
        `index` - The index at which to remove the media item. If the index is larger than the size of the playlist, the request is ignored.

    - #### clearMediaItems

          public final void clearMediaItems()

      Description copied from interface: `Player`
      Clears the playlist.

      This method must only be called if `Player.COMMAND_CHANGE_MEDIA_ITEMS` is available.

      Specified by:
        `clearMediaItems` in interface `Player`

    - #### isCommandAvailable

          public final boolean isCommandAvailable​(@Command
                                                  @com.google.android.exoplayer2.Player.Command int command)

      Description copied from interface: `Player`
      Returns whether the provided `Player.Command` is available.

      This method does not execute the command.

      Specified by:
        `isCommandAvailable` in interface `Player`
      Parameters:
        `command` - A `Player.Command`.
      Returns:
        Whether the `Player.Command` is available.
      See Also:
        `Player.Listener.onAvailableCommandsChanged(Commands)`

    - #### canAdvertiseSession

          public final boolean canAdvertiseSession()

      Returns whether the player can be used to advertise a media session.

      BasePlayer and its descendants will return `true`.

      Specified by:
        `canAdvertiseSession` in interface `Player`

    - #### play

          public final void play()

      Description copied from interface: `Player`
      Resumes playback as soon as `Player.getPlaybackState()` == `Player.STATE_READY`. Equivalent to `setPlayWhenReady(true)`.

      This method must only be called if `Player.COMMAND_PLAY_PAUSE` is available.

      Specified by:
        `play` in interface `Player`

    - #### pause

          public final void pause()

      Description copied from interface: `Player`
      Pauses playback. Equivalent to `setPlayWhenReady(false)`.

      This method must only be called if `Player.COMMAND_PLAY_PAUSE` is available.

      Specified by:
        `pause` in interface `Player`

    - #### isPlaying

          public final boolean isPlaying()

      Description copied from interface: `Player`
      Returns whether the player is playing, i.e. `Player.getCurrentPosition()` is advancing.

      If `false`, then at least one of the following is true:

      - The `playback state` is not `ready`.
      - There is no `intention to play`.
      - Playback is `suppressed for other reasons`.
      Specified by:
        `isPlaying` in interface `Player`
      Returns:
        Whether the player is playing.
      See Also:
        `Player.Listener.onIsPlayingChanged(boolean)`

    - #### seekToDefaultPosition

          public final void seekToDefaultPosition()

      Description copied from interface: `Player`
      Seeks to the default position associated with the current `MediaItem`. The position can depend on the type of media being played. For live streams it will typically be the live edge. For other streams it will typically be the start.

      This method must only be called if `Player.COMMAND_SEEK_TO_DEFAULT_POSITION` is available.

      Specified by:
        `seekToDefaultPosition` in interface `Player`

    - #### seekToDefaultPosition

          public final void seekToDefaultPosition​(int mediaItemIndex)

      Description copied from interface: `Player`
      Seeks to the default position associated with the specified `MediaItem`. The position can depend on the type of media being played. For live streams it will typically be the live edge. For other streams it will typically be the start.

      This method must only be called if `Player.COMMAND_SEEK_TO_MEDIA_ITEM` is available.

      Specified by:
        `seekToDefaultPosition` in interface `Player`
      Parameters:
        `mediaItemIndex` - The index of the `MediaItem` whose associated default position should be seeked to. If the index is larger than the size of the playlist, the request is ignored.

    - #### seekBack

          public final void seekBack()

      Description copied from interface: `Player`
      Seeks back in the current `MediaItem` by `Player.getSeekBackIncrement()` milliseconds.

      This method must only be called if `Player.COMMAND_SEEK_BACK` is available.

      Specified by:
        `seekBack` in interface `Player`

    - #### seekForward

          public final void seekForward()

      Description copied from interface: `Player`
      Seeks forward in the current `MediaItem` by `Player.getSeekForwardIncrement()` milliseconds.

      This method must only be called if `Player.COMMAND_SEEK_FORWARD` is available.

      Specified by:
        `seekForward` in interface `Player`

    - #### hasPrevious

          @Deprecated
          public final boolean hasPrevious()

      Deprecated.
      Use `hasPreviousMediaItem()` instead.
      Specified by:
        `hasPrevious` in interface `Player`

    - #### hasPreviousWindow

          @Deprecated
          public final boolean hasPreviousWindow()

      Deprecated.
      Use `hasPreviousMediaItem()` instead.
      Specified by:
        `hasPreviousWindow` in interface `Player`

    - #### hasPreviousMediaItem

          public final boolean hasPreviousMediaItem()

      Description copied from interface: `Player`
      Returns whether a previous media item exists, which may depend on the current repeat mode and whether shuffle mode is enabled.

      Note: When the repeat mode is `Player.REPEAT_MODE_ONE`, this method behaves the same as when the current repeat mode is `Player.REPEAT_MODE_OFF`. See `Player.REPEAT_MODE_ONE` for more details.

      This method must only be called if `Player.COMMAND_GET_TIMELINE` is available.

      Specified by:
        `hasPreviousMediaItem` in interface `Player`

    - #### previous

          @Deprecated
          public final void previous()

      Deprecated.
      Use `seekToPreviousMediaItem()` instead.
      Specified by:
        `previous` in interface `Player`

    - #### seekToPreviousWindow

          @Deprecated
          public final void seekToPreviousWindow()

      Deprecated.
      Use `seekToPreviousMediaItem()` instead.
      Specified by:
        `seekToPreviousWindow` in interface `Player`

    - #### seekToPreviousMediaItem

          public final void seekToPreviousMediaItem()

      Description copied from interface: `Player`
      Seeks to the default position of the previous `MediaItem`, which may depend on the current repeat mode and whether shuffle mode is enabled. Does nothing if `Player.hasPreviousMediaItem()` is `false`.

      Note: When the repeat mode is `Player.REPEAT_MODE_ONE`, this method behaves the same as when the current repeat mode is `Player.REPEAT_MODE_OFF`. See `Player.REPEAT_MODE_ONE` for more details.

      This method must only be called if `Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM` is available.

      Specified by:
        `seekToPreviousMediaItem` in interface `Player`

    - #### seekToPrevious

          public final void seekToPrevious()

      Description copied from interface: `Player`
      Seeks to an earlier position in the current or previous `MediaItem` (if available). More precisely:
      - If the timeline is empty or seeking is not possible, does nothing.
      - Otherwise, if the current `MediaItem` is `Player.isCurrentMediaItemLive()` live} and `unseekable`, then:
        - If `a previous media item exists`, seeks to the default position of the previous media item.
        - Otherwise, does nothing.
      - Otherwise, if `a previous media item exists` and the `current position` is less than `Player.getMaxSeekToPreviousPosition()`, seeks to the default position of the previous `MediaItem`.
      - Otherwise, seeks to 0 in the current `MediaItem`.

      This method must only be called if `Player.COMMAND_SEEK_TO_PREVIOUS` is available.

      Specified by:
        `seekToPrevious` in interface `Player`

    - #### hasNext

          @Deprecated
          public final boolean hasNext()

      Deprecated.
      Use `hasNextMediaItem()` instead.
      Specified by:
        `hasNext` in interface `Player`

    - #### hasNextWindow

          @Deprecated
          public final boolean hasNextWindow()

      Deprecated.
      Use `hasNextMediaItem()` instead.
      Specified by:
        `hasNextWindow` in interface `Player`

    - #### hasNextMediaItem

          public final boolean hasNextMediaItem()

      Description copied from interface: `Player`
      Returns whether a next `MediaItem` exists, which may depend on the current repeat mode and whether shuffle mode is enabled.

      Note: When the repeat mode is `Player.REPEAT_MODE_ONE`, this method behaves the same as when the current repeat mode is `Player.REPEAT_MODE_OFF`. See `Player.REPEAT_MODE_ONE` for more details.

      This method must only be called if `Player.COMMAND_GET_TIMELINE` is available.

      Specified by:
        `hasNextMediaItem` in interface `Player`

    - #### next

          @Deprecated
          public final void next()

      Deprecated.
      Use `seekToNextMediaItem()` instead.
      Specified by:
        `next` in interface `Player`

    - #### seekToNextWindow

          @Deprecated
          public final void seekToNextWindow()

      Deprecated.
      Use `seekToNextMediaItem()` instead.
      Specified by:
        `seekToNextWindow` in interface `Player`

    - #### seekToNextMediaItem

          public final void seekToNextMediaItem()

      Description copied from interface: `Player`
      Seeks to the default position of the next `MediaItem`, which may depend on the current repeat mode and whether shuffle mode is enabled. Does nothing if `Player.hasNextMediaItem()` is `false`.

      Note: When the repeat mode is `Player.REPEAT_MODE_ONE`, this method behaves the same as when the current repeat mode is `Player.REPEAT_MODE_OFF`. See `Player.REPEAT_MODE_ONE` for more details.

      This method must only be called if `Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM` is available.

      Specified by:
        `seekToNextMediaItem` in interface `Player`

    - #### seekToNext

          public final void seekToNext()

      Description copied from interface: `Player`
      Seeks to a later position in the current or next `MediaItem` (if available). More precisely:
      - If the timeline is empty or seeking is not possible, does nothing.
      - Otherwise, if `a next media item exists`, seeks to the default position of the next `MediaItem`.
      - Otherwise, if the current `MediaItem` is `live` and has not ended, seeks to the live edge of the current `MediaItem`.
      - Otherwise, does nothing.

      This method must only be called if `Player.COMMAND_SEEK_TO_NEXT` is available.

      Specified by:
        `seekToNext` in interface `Player`

    - #### seekTo

          public final void seekTo​(long positionMs)

      Description copied from interface: `Player`
      Seeks to a position specified in milliseconds in the current `MediaItem`.

      This method must only be called if `Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM` is available.

      Specified by:
        `seekTo` in interface `Player`
      Parameters:
        `positionMs` - The seek position in the current `MediaItem`, or `C.TIME_UNSET` to seek to the media item's default position.

    - #### seekTo

          public final void seekTo​(int mediaItemIndex,
                                   long positionMs)

      Description copied from interface: `Player`
      Seeks to a position specified in milliseconds in the specified `MediaItem`.

      This method must only be called if `Player.COMMAND_SEEK_TO_MEDIA_ITEM` is available.

      Specified by:
        `seekTo` in interface `Player`
      Parameters:
        `mediaItemIndex` - The index of the `MediaItem`. If the index is larger than the size of the playlist, the request is ignored.
        `positionMs` - The seek position in the specified `MediaItem`, or `C.TIME_UNSET` to seek to the media item's default position.

    - #### seekTo

          public abstract void seekTo​(int mediaItemIndex,
                                      long positionMs,
                                      @Command
                                      @com.google.android.exoplayer2.Player.Command int seekCommand,
                                      boolean isRepeatingCurrentItem)

      Seeks to a position in the specified `MediaItem`.
      Parameters:
        `mediaItemIndex` - The index of the `MediaItem`.
        `positionMs` - The seek position in the specified `MediaItem` in milliseconds, or `C.TIME_UNSET` to seek to the media item's default position.
        `seekCommand` - The `Player.Command` used to trigger the seek.
        `isRepeatingCurrentItem` - Whether this seeks repeats the current item.

    - #### setPlaybackSpeed

          public final void setPlaybackSpeed​(float speed)

      Description copied from interface: `Player`
      Changes the rate at which playback occurs. The pitch is not changed.

      This is equivalent to `setPlaybackParameters(getPlaybackParameters().withSpeed(speed))`.

      This method must only be called if `Player.COMMAND_SET_SPEED_AND_PITCH` is available.

      Specified by:
        `setPlaybackSpeed` in interface `Player`
      Parameters:
        `speed` - The linear factor by which playback will be sped up. Must be higher than 0. 1 is normal speed, 2 is twice as fast, 0.5 is half normal speed.

    - #### getCurrentWindowIndex

          @Deprecated
          public final int getCurrentWindowIndex()

      Deprecated.
      Use `Player.getCurrentMediaItemIndex()` instead.
      Specified by:
        `getCurrentWindowIndex` in interface `Player`

    - #### getNextWindowIndex

          @Deprecated
          public final int getNextWindowIndex()

      Deprecated.
      Use `getNextMediaItemIndex()` instead.
      Specified by:
        `getNextWindowIndex` in interface `Player`

    - #### getNextMediaItemIndex

          public final int getNextMediaItemIndex()

      Description copied from interface: `Player`
      Returns the index of the `MediaItem` that will be played if `Player.seekToNextMediaItem()` is called, which may depend on the current repeat mode and whether shuffle mode is enabled. Returns `C.INDEX_UNSET` if `Player.hasNextMediaItem()` is `false`.

      Note: When the repeat mode is `Player.REPEAT_MODE_ONE`, this method behaves the same as when the current repeat mode is `Player.REPEAT_MODE_OFF`. See `Player.REPEAT_MODE_ONE` for more details.

      This method must only be called if `Player.COMMAND_GET_TIMELINE` is available.

      Specified by:
        `getNextMediaItemIndex` in interface `Player`

    - #### getPreviousWindowIndex

          @Deprecated
          public final int getPreviousWindowIndex()

      Deprecated.
      Use `getPreviousMediaItemIndex()` instead.
      Specified by:
        `getPreviousWindowIndex` in interface `Player`

    - #### getPreviousMediaItemIndex

          public final int getPreviousMediaItemIndex()

      Description copied from interface: `Player`
      Returns the index of the `MediaItem` that will be played if `Player.seekToPreviousMediaItem()` is called, which may depend on the current repeat mode and whether shuffle mode is enabled. Returns `C.INDEX_UNSET` if `Player.hasPreviousMediaItem()` is `false`.

      Note: When the repeat mode is `Player.REPEAT_MODE_ONE`, this method behaves the same as when the current repeat mode is `Player.REPEAT_MODE_OFF`. See `Player.REPEAT_MODE_ONE` for more details.

      This method must only be called if `Player.COMMAND_GET_TIMELINE` is available.

      Specified by:
        `getPreviousMediaItemIndex` in interface `Player`

    - #### getCurrentMediaItem

          @Nullable
          public final MediaItem getCurrentMediaItem()

      Description copied from interface: `Player`
      Returns the currently playing `MediaItem`. May be null if the timeline is empty.

      This method must only be called if `Player.COMMAND_GET_CURRENT_MEDIA_ITEM` is available.

      Specified by:
        `getCurrentMediaItem` in interface `Player`
      See Also:
        `Player.Listener.onMediaItemTransition(MediaItem, int)`

    - #### getMediaItemCount

          public final int getMediaItemCount()

      Description copied from interface: `Player`
      Returns the number of media items in the playlist.

      This method must only be called if `Player.COMMAND_GET_TIMELINE` is available.

      Specified by:
        `getMediaItemCount` in interface `Player`

    - #### getMediaItemAt

          public final MediaItem getMediaItemAt​(int index)

      Description copied from interface: `Player`
      Returns the `MediaItem` at the given index.

      This method must only be called if `Player.COMMAND_GET_TIMELINE` is available.

      Specified by:
        `getMediaItemAt` in interface `Player`

    - #### getCurrentManifest

          @Nullable
          public final Object getCurrentManifest()

      Description copied from interface: `Player`
      Returns the current manifest. The type depends on the type of media being played. May be null.
      Specified by:
        `getCurrentManifest` in interface `Player`

    - #### getBufferedPercentage

          public final int getBufferedPercentage()

      Description copied from interface: `Player`
      Returns an estimate of the percentage in the current content or ad up to which data is buffered, or 0 if no estimate is available.
      Specified by:
        `getBufferedPercentage` in interface `Player`

    - #### isCurrentWindowDynamic

          @Deprecated
          public final boolean isCurrentWindowDynamic()

      Deprecated.
      Use `isCurrentMediaItemDynamic()` instead.
      Specified by:
        `isCurrentWindowDynamic` in interface `Player`

    - #### isCurrentMediaItemDynamic

          public final boolean isCurrentMediaItemDynamic()

      Description copied from interface: `Player`
      Returns whether the current `MediaItem` is dynamic (may change when the `Timeline` is updated), or `false` if the `Timeline` is empty.

      This method must only be called if `Player.COMMAND_GET_CURRENT_MEDIA_ITEM` is available.

      Specified by:
        `isCurrentMediaItemDynamic` in interface `Player`
      See Also:
        `Timeline.Window.isDynamic`

    - #### isCurrentWindowLive

          @Deprecated
          public final boolean isCurrentWindowLive()

      Deprecated.
      Use `isCurrentMediaItemLive()` instead.
      Specified by:
        `isCurrentWindowLive` in interface `Player`

    - #### isCurrentMediaItemLive

          public final boolean isCurrentMediaItemLive()

      Description copied from interface: `Player`
      Returns whether the current `MediaItem` is live, or `false` if the `Timeline` is empty.

      This method must only be called if `Player.COMMAND_GET_CURRENT_MEDIA_ITEM` is available.

      Specified by:
        `isCurrentMediaItemLive` in interface `Player`
      See Also:
        `Timeline.Window.isLive()`

    - #### getCurrentLiveOffset

          public final long getCurrentLiveOffset()

      Description copied from interface: `Player`
      Returns the offset of the current playback position from the live edge in milliseconds, or `C.TIME_UNSET` if the current `MediaItem` `Player.isCurrentMediaItemLive()` isn't live} or the offset is unknown.

      The offset is calculated as `currentTime - playbackPosition`, so should usually be positive.

      Note that this offset may rely on an accurate local time, so this method may return an incorrect value if the difference between system clock and server clock is unknown.

      This method must only be called if `Player.COMMAND_GET_CURRENT_MEDIA_ITEM` is available.

      Specified by:
        `getCurrentLiveOffset` in interface `Player`

    - #### isCurrentWindowSeekable

          @Deprecated
          public final boolean isCurrentWindowSeekable()

      Deprecated.
      Use `isCurrentMediaItemSeekable()` instead.
      Specified by:
        `isCurrentWindowSeekable` in interface `Player`

    - #### isCurrentMediaItemSeekable

          public final boolean isCurrentMediaItemSeekable()

      Description copied from interface: `Player`
      Returns whether the current `MediaItem` is seekable, or `false` if the `Timeline` is empty.

      This method must only be called if `Player.COMMAND_GET_CURRENT_MEDIA_ITEM` is available.

      Specified by:
        `isCurrentMediaItemSeekable` in interface `Player`
      See Also:
        `Timeline.Window.isSeekable`

    - #### getContentDuration

          public final long getContentDuration()

      Description copied from interface: `Player`
      If `Player.isPlayingAd()` returns `true`, returns the duration of the current content in milliseconds, or `C.TIME_UNSET` if the duration is not known. If there is no ad playing, the returned duration is the same as that returned by `Player.getDuration()`.

      This method must only be called if `Player.COMMAND_GET_CURRENT_MEDIA_ITEM` is available.

      Specified by:
        `getContentDuration` in interface `Player`