Package com.google.android.exoplayer2

## Class SimpleExoPlayer.Builder

- java.lang.Object
- - com.google.android.exoplayer2.SimpleExoPlayer.Builder

- Enclosing class:
    SimpleExoPlayer

      public static final class SimpleExoPlayer.Builder
      extends Object

  A builder for `SimpleExoPlayer` instances.

  See `Builder(Context)` for the list of default values.

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `Builder​(Context context)` | Creates a builder.
    `Builder​(Context context, ExtractorsFactory extractorsFactory)` | Creates a builder with a custom `ExtractorsFactory`.
    `Builder​(Context context, RenderersFactory renderersFactory)` | Creates a builder with a custom `RenderersFactory`.
    `Builder​(Context context, RenderersFactory renderersFactory, ExtractorsFactory extractorsFactory)` | Creates a builder with a custom `RenderersFactory` and `ExtractorsFactory`.
    `Builder​(Context context, RenderersFactory renderersFactory, TrackSelector trackSelector, MediaSourceFactory mediaSourceFactory, LoadControl loadControl, BandwidthMeter bandwidthMeter, AnalyticsCollector analyticsCollector)` | Creates a builder with the specified custom components.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `SimpleExoPlayer` | `build()` | Builds a `SimpleExoPlayer` instance.
    `SimpleExoPlayer.Builder` | `experimentalSetForegroundModeTimeoutMs​(long timeoutMs)` | Set a limit on the time a call to `SimpleExoPlayer.setForegroundMode(boolean)` can spend.
    `SimpleExoPlayer.Builder` | `setAnalyticsCollector​(AnalyticsCollector analyticsCollector)` | Sets the `AnalyticsCollector` that will collect and forward all player events.
    `SimpleExoPlayer.Builder` | `setAudioAttributes​(AudioAttributes audioAttributes, boolean handleAudioFocus)` | Sets `AudioAttributes` that will be used by the player and whether to handle audio focus.
    `SimpleExoPlayer.Builder` | `setBandwidthMeter​(BandwidthMeter bandwidthMeter)` | Sets the `BandwidthMeter` that will be used by the player.
    `SimpleExoPlayer.Builder` | `setClock​(Clock clock)` | Sets the `Clock` that will be used by the player.
    `SimpleExoPlayer.Builder` | `setDetachSurfaceTimeoutMs​(long detachSurfaceTimeoutMs)` | Sets a timeout for detaching a surface from the player.
    `SimpleExoPlayer.Builder` | `setHandleAudioBecomingNoisy​(boolean handleAudioBecomingNoisy)` | Sets whether the player should pause automatically when audio is rerouted from a headset to device speakers.
    `SimpleExoPlayer.Builder` | `setLivePlaybackSpeedControl​(LivePlaybackSpeedControl livePlaybackSpeedControl)` | Sets the `LivePlaybackSpeedControl` that will control the playback speed when playing live streams, in order to maintain a steady target offset from the live stream edge.
    `SimpleExoPlayer.Builder` | `setLoadControl​(LoadControl loadControl)` | Sets the `LoadControl` that will be used by the player.
    `SimpleExoPlayer.Builder` | `setLooper​(Looper looper)` | Sets the `Looper` that must be used for all calls to the player and that is used to call listeners on.
    `SimpleExoPlayer.Builder` | `setMediaSourceFactory​(MediaSourceFactory mediaSourceFactory)` | Sets the `MediaSourceFactory` that will be used by the player.
    `SimpleExoPlayer.Builder` | `setPauseAtEndOfMediaItems​(boolean pauseAtEndOfMediaItems)` | Sets whether to pause playback at the end of each media item.
    `SimpleExoPlayer.Builder` | `setPriorityTaskManager​(PriorityTaskManager priorityTaskManager)` | Sets an `PriorityTaskManager` that will be used by the player.
    `SimpleExoPlayer.Builder` | `setReleaseTimeoutMs​(long releaseTimeoutMs)` | Sets a timeout for calls to `SimpleExoPlayer.release()` and `SimpleExoPlayer.setForegroundMode(boolean)`.
    `SimpleExoPlayer.Builder` | `setSeekBackIncrementMs​(long seekBackIncrementMs)` | Sets the `BasePlayer.seekBack()` increment.
    `SimpleExoPlayer.Builder` | `setSeekForwardIncrementMs​(long seekForwardIncrementMs)` | Sets the `BasePlayer.seekForward()` increment.
    `SimpleExoPlayer.Builder` | `setSeekParameters​(SeekParameters seekParameters)` | Sets the parameters that control how seek operations are performed.
    `SimpleExoPlayer.Builder` | `setSkipSilenceEnabled​(boolean skipSilenceEnabled)` | Sets whether silences silences in the audio stream is enabled.
    `SimpleExoPlayer.Builder` | `setTrackSelector​(TrackSelector trackSelector)` | Sets the `TrackSelector` that will be used by the player.
    `SimpleExoPlayer.Builder` | `setUseLazyPreparation​(boolean useLazyPreparation)` | Sets whether media sources should be initialized lazily.
    `SimpleExoPlayer.Builder` | `setVideoScalingMode​(int videoScalingMode)` | Sets the `C.VideoScalingMode` that will be used by the player.
    `SimpleExoPlayer.Builder` | `setWakeMode​(int wakeMode)` | Sets the `C.WakeMode` that will be used by the player.

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

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

- - ### Constructor Detail

    - #### Builder

          public Builder​(Context context)

      Creates a builder.

      Use `Builder(Context, RenderersFactory)`, `Builder(Context, RenderersFactory)` or `Builder(Context, RenderersFactory, ExtractorsFactory)` instead, if you intend to provide a custom `RenderersFactory` or a custom `ExtractorsFactory`. This is to ensure that ProGuard or R8 can remove ExoPlayer's `DefaultRenderersFactory` and `DefaultExtractorsFactory` from the APK.

      The builder uses the following default values:

      - `RenderersFactory`: `DefaultRenderersFactory`
      - `TrackSelector`: `DefaultTrackSelector`
      - `MediaSourceFactory`: `DefaultMediaSourceFactory`
      - `LoadControl`: `DefaultLoadControl`
      - `BandwidthMeter`: `DefaultBandwidthMeter.getSingletonInstance(Context)`
      - `LivePlaybackSpeedControl`: `DefaultLivePlaybackSpeedControl`
      - `Looper`: The `Looper` associated with the current thread, or the `Looper` of the application's main thread if the current thread doesn't have a `Looper`
      - `AnalyticsCollector`: `AnalyticsCollector` with `Clock.DEFAULT`
      - `PriorityTaskManager`: `null` (not used)
      - `AudioAttributes`: `AudioAttributes.DEFAULT`, not handling audio focus
      - `C.WakeMode`: `C.WAKE_MODE_NONE`
      - `handleAudioBecomingNoisy`: `false`
      - `skipSilenceEnabled`: `false`
      - `C.VideoScalingMode`: `C.VIDEO_SCALING_MODE_DEFAULT`
      - `useLazyPreparation`: `true`
      - `SeekParameters`: `SeekParameters.DEFAULT`
      - `seekBackIncrementMs`: `C.DEFAULT_SEEK_BACK_INCREMENT_MS`
      - `seekForwardIncrementMs`: `C.DEFAULT_SEEK_FORWARD_INCREMENT_MS`
      - `releaseTimeoutMs`: `ExoPlayer.DEFAULT_RELEASE_TIMEOUT_MS`
      - `detachSurfaceTimeoutMs`: `SimpleExoPlayer.DEFAULT_DETACH_SURFACE_TIMEOUT_MS`
      - `pauseAtEndOfMediaItems`: `false`
      - `Clock`: `Clock.DEFAULT`
      Parameters:
        `context` - A `Context`.

    - #### Builder

          public Builder​(Context context,
                         RenderersFactory renderersFactory)

      Creates a builder with a custom `RenderersFactory`.

      See `Builder(Context)` for a list of default values.

      Parameters:
        `context` - A `Context`.
        `renderersFactory` - A factory for creating `Renderers` to be used by the player.

    - #### Builder

          public Builder​(Context context,
                         ExtractorsFactory extractorsFactory)

      Creates a builder with a custom `ExtractorsFactory`.

      See `Builder(Context)` for a list of default values.

      Parameters:
        `context` - A `Context`.
        `extractorsFactory` - An `ExtractorsFactory` used to extract progressive media from its container.

    - #### Builder

          public Builder​(Context context,
                         RenderersFactory renderersFactory,
                         ExtractorsFactory extractorsFactory)

      Creates a builder with a custom `RenderersFactory` and `ExtractorsFactory`.

      See `Builder(Context)` for a list of default values.

      Parameters:
        `context` - A `Context`.
        `renderersFactory` - A factory for creating `Renderers` to be used by the player.
        `extractorsFactory` - An `ExtractorsFactory` used to extract progressive media from its container.

    - #### Builder

          public Builder​(Context context,
                         RenderersFactory renderersFactory,
                         TrackSelector trackSelector,
                         MediaSourceFactory mediaSourceFactory,
                         LoadControl loadControl,
                         BandwidthMeter bandwidthMeter,
                         AnalyticsCollector analyticsCollector)

      Creates a builder with the specified custom components.

      Note that this constructor is only useful to try and ensure that ExoPlayer's default components can be removed by ProGuard or R8.

      Parameters:
        `context` - A `Context`.
        `renderersFactory` - A factory for creating `Renderers` to be used by the player.
        `trackSelector` - A `TrackSelector`.
        `mediaSourceFactory` - A `MediaSourceFactory`.
        `loadControl` - A `LoadControl`.
        `bandwidthMeter` - A `BandwidthMeter`.
        `analyticsCollector` - An `AnalyticsCollector`.

  - ### Method Detail

    - #### experimentalSetForegroundModeTimeoutMs

          public SimpleExoPlayer.Builder experimentalSetForegroundModeTimeoutMs​(long timeoutMs)

      Set a limit on the time a call to `SimpleExoPlayer.setForegroundMode(boolean)` can spend. If a call to `SimpleExoPlayer.setForegroundMode(boolean)` takes more than `timeoutMs` milliseconds to complete, the player will raise an error via `Player.Listener.onPlayerError(com.google.android.exoplayer2.PlaybackException)`.

      This method is experimental, and will be renamed or removed in a future release.

      Parameters:
        `timeoutMs` - The time limit in milliseconds.

    - #### setTrackSelector

          public SimpleExoPlayer.Builder setTrackSelector​(TrackSelector trackSelector)

      Sets the `TrackSelector` that will be used by the player.
      Parameters:
        `trackSelector` - A `TrackSelector`.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setMediaSourceFactory

          public SimpleExoPlayer.Builder setMediaSourceFactory​(MediaSourceFactory mediaSourceFactory)

      Sets the `MediaSourceFactory` that will be used by the player.
      Parameters:
        `mediaSourceFactory` - A `MediaSourceFactory`.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setLoadControl

          public SimpleExoPlayer.Builder setLoadControl​(LoadControl loadControl)

      Sets the `LoadControl` that will be used by the player.
      Parameters:
        `loadControl` - A `LoadControl`.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setBandwidthMeter

          public SimpleExoPlayer.Builder setBandwidthMeter​(BandwidthMeter bandwidthMeter)

      Sets the `BandwidthMeter` that will be used by the player.
      Parameters:
        `bandwidthMeter` - A `BandwidthMeter`.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setLooper

          public SimpleExoPlayer.Builder setLooper​(Looper looper)

      Sets the `Looper` that must be used for all calls to the player and that is used to call listeners on.
      Parameters:
        `looper` - A `Looper`.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setAnalyticsCollector

          public SimpleExoPlayer.Builder setAnalyticsCollector​(AnalyticsCollector analyticsCollector)

      Sets the `AnalyticsCollector` that will collect and forward all player events.
      Parameters:
        `analyticsCollector` - An `AnalyticsCollector`.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setPriorityTaskManager

          public SimpleExoPlayer.Builder setPriorityTaskManager​(@Nullable
                                                                PriorityTaskManager priorityTaskManager)

      Sets an `PriorityTaskManager` that will be used by the player.

      The priority `C.PRIORITY_PLAYBACK` will be set while the player is loading.

      Parameters:
        `priorityTaskManager` - A `PriorityTaskManager`, or null to not use one.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setAudioAttributes

          public SimpleExoPlayer.Builder setAudioAttributes​(AudioAttributes audioAttributes,
                                                            boolean handleAudioFocus)

      Sets `AudioAttributes` that will be used by the player and whether to handle audio focus.

      If audio focus should be handled, the `AudioAttributes.usage` must be `C.USAGE_MEDIA` or `C.USAGE_GAME`. Other usages will throw an `IllegalArgumentException`.

      Parameters:
        `audioAttributes` - `AudioAttributes`.
        `handleAudioFocus` - Whether the player should handle audio focus.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setWakeMode

          public SimpleExoPlayer.Builder setWakeMode​(@WakeMode
                                                     int wakeMode)

      Sets the `C.WakeMode` that will be used by the player.

      Enabling this feature requires the `Manifest.permission.WAKE_LOCK` permission. It should be used together with a foreground `Service` for use cases where playback occurs and the screen is off (e.g. background audio playback). It is not useful when the screen will be kept on during playback (e.g. foreground video playback).

      When enabled, the locks (`PowerManager.WakeLock` / `WifiManager.WifiLock`) will be held whenever the player is in the `Player.STATE_READY` or `Player.STATE_BUFFERING` states with `playWhenReady = true`. The locks held depend on the specified `C.WakeMode`.

      Parameters:
        `wakeMode` - A `C.WakeMode`.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setHandleAudioBecomingNoisy

          public SimpleExoPlayer.Builder setHandleAudioBecomingNoisy​(boolean handleAudioBecomingNoisy)

      Sets whether the player should pause automatically when audio is rerouted from a headset to device speakers. See the audio becoming noisy documentation for more information.
      Parameters:
        `handleAudioBecomingNoisy` - Whether the player should pause automatically when audio is rerouted from a headset to device speakers.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setSkipSilenceEnabled

          public SimpleExoPlayer.Builder setSkipSilenceEnabled​(boolean skipSilenceEnabled)

      Sets whether silences silences in the audio stream is enabled.
      Parameters:
        `skipSilenceEnabled` - Whether skipping silences is enabled.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setVideoScalingMode

          public SimpleExoPlayer.Builder setVideoScalingMode​(@VideoScalingMode
                                                             int videoScalingMode)

      Sets the `C.VideoScalingMode` that will be used by the player.

      Note that the scaling mode only applies if a `MediaCodec`-based video `Renderer` is enabled and if the output surface is owned by a `SurfaceView`.

      Parameters:
        `videoScalingMode` - A `C.VideoScalingMode`.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setUseLazyPreparation

          public SimpleExoPlayer.Builder setUseLazyPreparation​(boolean useLazyPreparation)

      Sets whether media sources should be initialized lazily.

      If false, all initial preparation steps (e.g., manifest loads) happen immediately. If true, these initial preparations are triggered only when the player starts buffering the media.

      Parameters:
        `useLazyPreparation` - Whether to use lazy preparation.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setSeekParameters

          public SimpleExoPlayer.Builder setSeekParameters​(SeekParameters seekParameters)

      Sets the parameters that control how seek operations are performed.
      Parameters:
        `seekParameters` - The `SeekParameters`.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setSeekBackIncrementMs

          public SimpleExoPlayer.Builder setSeekBackIncrementMs​(@IntRange(from=1L)
                                                                long seekBackIncrementMs)

      Sets the `BasePlayer.seekBack()` increment.
      Parameters:
        `seekBackIncrementMs` - The seek back increment, in milliseconds.
      Returns:
        This builder.
      Throws:
        `IllegalArgumentException` - If `seekBackIncrementMs` is non-positive.
        `IllegalStateException` - If `build()` has already been called.

    - #### setSeekForwardIncrementMs

          public SimpleExoPlayer.Builder setSeekForwardIncrementMs​(@IntRange(from=1L)
                                                                   long seekForwardIncrementMs)

      Sets the `BasePlayer.seekForward()` increment.
      Parameters:
        `seekForwardIncrementMs` - The seek forward increment, in milliseconds.
      Returns:
        This builder.
      Throws:
        `IllegalArgumentException` - If `seekForwardIncrementMs` is non-positive.
        `IllegalStateException` - If `build()` has already been called.

    - #### setReleaseTimeoutMs

          public SimpleExoPlayer.Builder setReleaseTimeoutMs​(long releaseTimeoutMs)

      Sets a timeout for calls to `SimpleExoPlayer.release()` and `SimpleExoPlayer.setForegroundMode(boolean)`.

      If a call to `SimpleExoPlayer.release()` or `SimpleExoPlayer.setForegroundMode(boolean)` takes more than `timeoutMs` to complete, the player will report an error via `Player.Listener.onPlayerError(com.google.android.exoplayer2.PlaybackException)`.

      Parameters:
        `releaseTimeoutMs` - The release timeout, in milliseconds.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setDetachSurfaceTimeoutMs

          public SimpleExoPlayer.Builder setDetachSurfaceTimeoutMs​(long detachSurfaceTimeoutMs)

      Sets a timeout for detaching a surface from the player.

      If detaching a surface or replacing a surface takes more than `detachSurfaceTimeoutMs` to complete, the player will report an error via `Player.Listener.onPlayerError(com.google.android.exoplayer2.PlaybackException)`.

      Parameters:
        `detachSurfaceTimeoutMs` - The timeout for detaching a surface, in milliseconds.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setPauseAtEndOfMediaItems

          public SimpleExoPlayer.Builder setPauseAtEndOfMediaItems​(boolean pauseAtEndOfMediaItems)

      Sets whether to pause playback at the end of each media item.

      This means the player will pause at the end of each window in the current `timeline`. Listeners will be informed by a call to `Player.Listener.onPlayWhenReadyChanged(boolean, int)` with the reason `Player.PLAY_WHEN_READY_CHANGE_REASON_END_OF_MEDIA_ITEM` when this happens.

      Parameters:
        `pauseAtEndOfMediaItems` - Whether to pause playback at the end of each media item.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setLivePlaybackSpeedControl

          public SimpleExoPlayer.Builder setLivePlaybackSpeedControl​(LivePlaybackSpeedControl livePlaybackSpeedControl)

      Sets the `LivePlaybackSpeedControl` that will control the playback speed when playing live streams, in order to maintain a steady target offset from the live stream edge.
      Parameters:
        `livePlaybackSpeedControl` - The `LivePlaybackSpeedControl`.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### setClock

          public SimpleExoPlayer.Builder setClock​(Clock clock)

      Sets the `Clock` that will be used by the player. Should only be set for testing purposes.
      Parameters:
        `clock` - A `Clock`.
      Returns:
        This builder.
      Throws:
        `IllegalStateException` - If `build()` has already been called.

    - #### build

          public SimpleExoPlayer build()

      Builds a `SimpleExoPlayer` instance.
      Throws:
        `IllegalStateException` - If this method has already been called.