# DefaultLoadControl

Artifact: [androidx.media3:media3-exoplayer](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/exoplayer/DefaultLoadControl.java+class:androidx.media3.exoplayer.DefaultLoadControl)

*** ** * ** ***

<br />

```
@UnstableApi
public class DefaultLoadControl implements LoadControl
```

<br />

*** ** * ** ***

The default `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl` implementation.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl.Builder` Builder for `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl`. |

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_AUDIO_BUFFER_SIZE() = 13107200` A default size in bytes for an audio buffer. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_BACK_BUFFER_DURATION_MS() = 0` The default back buffer duration in milliseconds. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_FOR_LOCAL_PLAYBACK_MS() = 1000` The default duration of media that must be buffered for playback to resume after a rebuffer for local on-device playback, in milliseconds. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS() = 2000` The default duration of media that must be buffered for playback to resume after a rebuffer, in milliseconds. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_BUFFER_FOR_PLAYBACK_FOR_LOCAL_PLAYBACK_MS() = 1000` The default duration of media that must be buffered for playback to start or resume following a user action such as a seek for local on-device playback, in milliseconds. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_BUFFER_FOR_PLAYBACK_MS() = 1000` The default duration of media that must be buffered for playback to start or resume following a user action such as a seek, in milliseconds. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_CAMERA_MOTION_BUFFER_SIZE() = 131072` A default size in bytes for a camera motion buffer. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_IMAGE_BUFFER_SIZE() = 26214400` A default size in bytes for an image buffer. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_MAX_BUFFER_FOR_LOCAL_PLAYBACK_MS() = 50000` The default maximum duration of media that the player will attempt to buffer for local on-device playback, in milliseconds. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_MAX_BUFFER_MS() = 50000` The default maximum duration of media that the player will attempt to buffer, in milliseconds. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_MAX_BUFFER_SIZE() = 210239488` The buffer size in bytes that will be used as a maximum target buffer in all cases unless an `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl.Builder#setTargetBufferBytes(int)` or `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#calculateTargetBufferBytes(androidx.media3.exoplayer.trackselection.ExoTrackSelection[])` is overridden with custom behavior. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_METADATA_BUFFER_SIZE() = 131072` A default size in bytes for a metadata buffer. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_MIN_BUFFER_FOR_LOCAL_PLAYBACK_MS() = 1000` The default minimum duration of media that the player will attempt to ensure is buffered at all times for local on-device playback, in milliseconds. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_MIN_BUFFER_MS() = 50000` The default minimum duration of media that the player will attempt to ensure is buffered at all times, in milliseconds. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_MIN_BUFFER_SIZE() = 13107200` The buffer size in bytes that will be used as a minimum target buffer in all cases unless an `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl.Builder#setTargetBufferBytes(int)` or `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#calculateTargetBufferBytes(androidx.media3.exoplayer.trackselection.ExoTrackSelection[])` is overridden with custom behavior. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_MUXED_BUFFER_SIZE() = 144310272` A default size in bytes for a muxed buffer (e.g. containing video, audio and text). |
| `static final boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_PRIORITIZE_TIME_OVER_SIZE_THRESHOLDS() = false` The default prioritization of buffer time constraints over size constraints. |
| `static final boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_PRIORITIZE_TIME_OVER_SIZE_THRESHOLDS_FOR_LOCAL_PLAYBACK() = true` The default prioritization of buffer time constraints over size constraints for local on-device playback. |
| `static final boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_RETAIN_BACK_BUFFER_FROM_KEYFRAME() = false` The default for whether the back buffer is retained from the previous keyframe. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_TARGET_BUFFER_BYTES() = -1` The default target buffer size in bytes. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_TARGET_BUFFER_BYTES_FOR_PRELOAD() = 144179200` The default target buffer size in bytes that will be used for preloading media outside of player, see `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId#PRELOAD()`. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_TEXT_BUFFER_SIZE() = 131072` A default size in bytes for a text buffer. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_VIDEO_BUFFER_SIZE() = 131072000` A default size in bytes for a video buffer. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DEFAULT_VIDEO_BUFFER_SIZE_FOR_LOCAL_PLAYBACK() = 19660800` A default size in bytes for a video buffer for local playback. |
| `static final https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/java/lang/String.html>` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#LOCAL_PLAYBACK_SCHEMES()` List of URL schemes that are considered local on-device playback. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DefaultLoadControl()()` Constructs a new instance, using the `DEFAULT_*` constants defined in this class. |

| ### Protected constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DefaultLoadControl(androidx.media3.exoplayer.upstream.DefaultAllocator,int,int,int,int,int,int,int,int,int,boolean,boolean,int,boolean)( https://developer.android.com/reference/androidx/media3/exoplayer/upstream/DefaultAllocator allocator, int minBufferMs, int minBufferForLocalPlaybackMs, int maxBufferMs, int maxBufferForLocalPlaybackMs, int bufferForPlaybackMs, int bufferForPlaybackForLocalPlaybackMs, int bufferForPlaybackAfterRebufferMs, int bufferForPlaybackAfterRebufferForLocalPlaybackMs, int targetBufferBytes, boolean prioritizeTimeOverSizeThresholds, boolean prioritizeTimeOverSizeThresholdsForLocalPlayback, int backBufferDurationMs, boolean retainBackBufferFromKeyframe )` |
| `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#DefaultLoadControl(androidx.media3.exoplayer.upstream.DefaultAllocator,int,int,int,int,int,int,int,int,int,boolean,boolean,int,boolean,java.util.Map<java.lang.String,java.lang.Integer>)( https://developer.android.com/reference/androidx/media3/exoplayer/upstream/DefaultAllocator allocator, int minBufferMs, int minBufferForLocalPlaybackMs, int maxBufferMs, int maxBufferForLocalPlaybackMs, int bufferForPlaybackMs, int bufferForPlaybackForLocalPlaybackMs, int bufferForPlaybackAfterRebufferMs, int bufferForPlaybackAfterRebufferForLocalPlaybackMs, int targetBufferBytes, boolean prioritizeTimeOverSizeThresholds, boolean prioritizeTimeOverSizeThresholdsForLocalPlayback, int backBufferDurationMs, boolean retainBackBufferFromKeyframe, https://developer.android.com/reference/java/util/Map.html<https://developer.android.com/reference/java/lang/String.html, https://developer.android.com/reference/java/lang/Integer.html> playerTargetBufferBytes )` |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/Allocator` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#getAllocator(androidx.media3.exoplayer.analytics.PlayerId)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId)` Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/Allocator` that should be used to obtain media buffer allocations for the specified `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId`. |
| `long` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#getBackBufferDurationUs(androidx.media3.exoplayer.analytics.PlayerId)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId)` Returns the duration of media to retain in the buffer prior to the current playback position, for fast backward seeking. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#onPrepared(androidx.media3.exoplayer.analytics.PlayerId)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId)` Called by the player when prepared with a new source. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#onReleased(androidx.media3.exoplayer.analytics.PlayerId)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId)` Called by the player when released. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#onStopped(androidx.media3.exoplayer.analytics.PlayerId)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId)` Called by the player when stopped. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#onTracksSelected(androidx.media3.exoplayer.LoadControl.Parameters,androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.trackselection.ExoTrackSelection[])( https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl.Parameters parameters, https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray trackGroups, @https://developer.android.com/reference/androidx/media3/common/util/NullableType ExoTrackSelection[] trackSelections )` Called by the player when a track selection occurs. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#retainBackBufferFromKeyframe(androidx.media3.exoplayer.analytics.PlayerId)(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId)` Returns whether media should be retained from the keyframe before the current playback position minus `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#getBackBufferDurationUs()`, rather than any sample before or at that position. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#shouldContinueLoading(androidx.media3.exoplayer.LoadControl.Parameters)(https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl.Parameters parameters)` Called by the player to determine whether it should continue to load the source. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#shouldContinuePreloading(androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.common.Timeline,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,long)( https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId, https://developer.android.com/reference/androidx/media3/common/Timeline timeline, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId, long bufferedDurationUs )` Called to determine whether preloading should be continued. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#shouldStartPlayback(androidx.media3.exoplayer.LoadControl.Parameters)(https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl.Parameters parameters)` Called repeatedly by the player when it's loading the source, has yet to start playback, and has the minimum amount of data necessary for playback to be started. |

| ### Protected methods |
|---|---|
| `int` | `[calculateTargetBufferBytes](https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#calculateTargetBufferBytes(androidx.media3.exoplayer.trackselection.ExoTrackSelection[]))( @https://developer.android.com/reference/androidx/media3/common/util/NullableType ExoTrackSelection[] trackSelectionArray )` **This method is deprecated.** Overwrite `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#calculateTargetBufferBytes(androidx.media3.exoplayer.LoadControl.Parameters,androidx.media3.exoplayer.trackselection.ExoTrackSelection[])` instead. <br /> |
| `int` | `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#calculateTargetBufferBytes(androidx.media3.exoplayer.LoadControl.Parameters,androidx.media3.exoplayer.trackselection.ExoTrackSelection[])( https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl.Parameters parameters, @https://developer.android.com/reference/androidx/media3/common/util/NullableType ExoTrackSelection[] trackSelectionArray )` Calculate target buffer size in bytes based on the selected tracks. |

### Inherited Constants

From [androidx.media3.exoplayer.LoadControl](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl) `static final https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#EMPTY_MEDIA_PERIOD_ID()`

**This field is deprecated.**

Used as a placeholder when MediaPeriodId is unknown.

<br />

### Inherited methods

From [androidx.media3.exoplayer.LoadControl](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl) `long` `[getBackBufferDurationUs](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#getBackBufferDurationUs())()`

**This method is deprecated.**

Implements `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#getBackBufferDurationUs(androidx.media3.exoplayer.analytics.PlayerId)` instead.

<br />

`void` `[onPrepared](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onPrepared())()`

**This method is deprecated.**

Use `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onPrepared(androidx.media3.exoplayer.analytics.PlayerId)` instead.

<br />

`void` `[onReleased](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onReleased())()`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onReleased(androidx.media3.exoplayer.analytics.PlayerId)` instead.

<br />

`void` `[onStopped](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onStopped())()`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onStopped(androidx.media3.exoplayer.analytics.PlayerId)` instead.

<br />

`void` `[onTracksSelected](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onTracksSelected(androidx.media3.exoplayer.Renderer[],androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.trackselection.ExoTrackSelection[]))(

Renderer[] renderers,

https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray trackGroups,

@https://developer.android.com/reference/androidx/media3/common/util/NullableType ExoTrackSelection[] trackSelections

)`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onTracksSelected(androidx.media3.exoplayer.LoadControl.Parameters,androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.trackselection.ExoTrackSelection[])` instead.

<br />

`void` `[onTracksSelected](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onTracksSelected(androidx.media3.common.Timeline,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.Renderer[],androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.trackselection.ExoTrackSelection[]))(

https://developer.android.com/reference/androidx/media3/common/Timeline timeline,

https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId,

Renderer[] renderers,

https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray trackGroups,

@https://developer.android.com/reference/androidx/media3/common/util/NullableType ExoTrackSelection[] trackSelections

)`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onTracksSelected(androidx.media3.exoplayer.LoadControl.Parameters,androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.trackselection.ExoTrackSelection[])` instead.

<br />

`void` `[onTracksSelected](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onTracksSelected(androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.common.Timeline,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.Renderer[],androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.trackselection.ExoTrackSelection[]))(

https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId,

https://developer.android.com/reference/androidx/media3/common/Timeline timeline,

https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId,

Renderer[] renderers,

https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray trackGroups,

@https://developer.android.com/reference/androidx/media3/common/util/NullableType ExoTrackSelection[] trackSelections

)`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onTracksSelected(androidx.media3.exoplayer.LoadControl.Parameters,androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.trackselection.ExoTrackSelection[])` instead.

<br />

`boolean` `[retainBackBufferFromKeyframe](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#retainBackBufferFromKeyframe())()`

**This method is deprecated.**

Implements `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#retainBackBufferFromKeyframe(androidx.media3.exoplayer.analytics.PlayerId)` instead.

<br />

`boolean` `[shouldContinueLoading](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#shouldContinueLoading(long,long,float))(

long playbackPositionUs,

long bufferedDurationUs,

float playbackSpeed

)`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#shouldContinueLoading(androidx.media3.exoplayer.LoadControl.Parameters)` instead.

<br />

`boolean` `[shouldStartPlayback](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#shouldStartPlayback(long,float,boolean,long))(

long bufferedDurationUs,

float playbackSpeed,

boolean rebuffering,

long targetLiveOffsetUs

)`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#shouldStartPlayback(androidx.media3.exoplayer.LoadControl.Parameters)` instead.

<br />

`boolean` `[shouldStartPlayback](https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#shouldStartPlayback(androidx.media3.common.Timeline,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,long,float,boolean,long))(

https://developer.android.com/reference/androidx/media3/common/Timeline timeline,

https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId,

long bufferedDurationUs,

float playbackSpeed,

boolean rebuffering,

long targetLiveOffsetUs

)`

**This method is deprecated.**

Implement `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#shouldStartPlayback(androidx.media3.exoplayer.LoadControl.Parameters)` instead.

<br />

## Constants

### DEFAULT_AUDIO_BUFFER_SIZE

```
public static final int DEFAULT_AUDIO_BUFFER_SIZE = 13107200
```

A default size in bytes for an audio buffer.

### DEFAULT_BACK_BUFFER_DURATION_MS

```
public static final int DEFAULT_BACK_BUFFER_DURATION_MS = 0
```

The default back buffer duration in milliseconds.

### DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_FOR_LOCAL_PLAYBACK_MS

```
public static final int DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_FOR_LOCAL_PLAYBACK_MS = 1000
```

The default duration of media that must be buffered for playback to resume after a rebuffer for local on-device playback, in milliseconds. A rebuffer is defined to be caused by buffer depletion rather than a user action.

### DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS

```
public static final int DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS = 2000
```

The default duration of media that must be buffered for playback to resume after a rebuffer, in milliseconds. A rebuffer is defined to be caused by buffer depletion rather than a user action.

### DEFAULT_BUFFER_FOR_PLAYBACK_FOR_LOCAL_PLAYBACK_MS

```
public static final int DEFAULT_BUFFER_FOR_PLAYBACK_FOR_LOCAL_PLAYBACK_MS = 1000
```

The default duration of media that must be buffered for playback to start or resume following a user action such as a seek for local on-device playback, in milliseconds.

### DEFAULT_BUFFER_FOR_PLAYBACK_MS

```
public static final int DEFAULT_BUFFER_FOR_PLAYBACK_MS = 1000
```

The default duration of media that must be buffered for playback to start or resume following a user action such as a seek, in milliseconds.

### DEFAULT_CAMERA_MOTION_BUFFER_SIZE

```
public static final int DEFAULT_CAMERA_MOTION_BUFFER_SIZE = 131072
```

A default size in bytes for a camera motion buffer.

### DEFAULT_IMAGE_BUFFER_SIZE

```
public static final int DEFAULT_IMAGE_BUFFER_SIZE = 26214400
```

A default size in bytes for an image buffer.

### DEFAULT_MAX_BUFFER_FOR_LOCAL_PLAYBACK_MS

```
public static final int DEFAULT_MAX_BUFFER_FOR_LOCAL_PLAYBACK_MS = 50000
```

The default maximum duration of media that the player will attempt to buffer for local on-device playback, in milliseconds.

### DEFAULT_MAX_BUFFER_MS

```
public static final int DEFAULT_MAX_BUFFER_MS = 50000
```

The default maximum duration of media that the player will attempt to buffer, in milliseconds.

### DEFAULT_MAX_BUFFER_SIZE

```
public static final int DEFAULT_MAX_BUFFER_SIZE = 210239488
```

The buffer size in bytes that will be used as a maximum target buffer in all cases unless an `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl.Builder#setTargetBufferBytes(int)` or `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#calculateTargetBufferBytes(androidx.media3.exoplayer.trackselection.ExoTrackSelection[])` is overridden with custom behavior.

### DEFAULT_METADATA_BUFFER_SIZE

```
public static final int DEFAULT_METADATA_BUFFER_SIZE = 131072
```

A default size in bytes for a metadata buffer.

### DEFAULT_MIN_BUFFER_FOR_LOCAL_PLAYBACK_MS

```
public static final int DEFAULT_MIN_BUFFER_FOR_LOCAL_PLAYBACK_MS = 1000
```

The default minimum duration of media that the player will attempt to ensure is buffered at all times for local on-device playback, in milliseconds.

### DEFAULT_MIN_BUFFER_MS

```
public static final int DEFAULT_MIN_BUFFER_MS = 50000
```

The default minimum duration of media that the player will attempt to ensure is buffered at all times, in milliseconds.

### DEFAULT_MIN_BUFFER_SIZE

```
public static final int DEFAULT_MIN_BUFFER_SIZE = 13107200
```

The buffer size in bytes that will be used as a minimum target buffer in all cases unless an `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl.Builder#setTargetBufferBytes(int)` or `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#calculateTargetBufferBytes(androidx.media3.exoplayer.trackselection.ExoTrackSelection[])` is overridden with custom behavior.

This is also the default target buffer before tracks are selected.

### DEFAULT_MUXED_BUFFER_SIZE

```
public static final int DEFAULT_MUXED_BUFFER_SIZE = 144310272
```

A default size in bytes for a muxed buffer (e.g. containing video, audio and text).

### DEFAULT_PRIORITIZE_TIME_OVER_SIZE_THRESHOLDS

```
public static final boolean DEFAULT_PRIORITIZE_TIME_OVER_SIZE_THRESHOLDS = false
```

The default prioritization of buffer time constraints over size constraints.

### DEFAULT_PRIORITIZE_TIME_OVER_SIZE_THRESHOLDS_FOR_LOCAL_PLAYBACK

```
public static final boolean DEFAULT_PRIORITIZE_TIME_OVER_SIZE_THRESHOLDS_FOR_LOCAL_PLAYBACK = true
```

The default prioritization of buffer time constraints over size constraints for local on-device playback.

### DEFAULT_RETAIN_BACK_BUFFER_FROM_KEYFRAME

```
public static final boolean DEFAULT_RETAIN_BACK_BUFFER_FROM_KEYFRAME = false
```

The default for whether the back buffer is retained from the previous keyframe.

### DEFAULT_TARGET_BUFFER_BYTES

```
public static final int DEFAULT_TARGET_BUFFER_BYTES = -1
```

The default target buffer size in bytes. The value (`https://developer.android.com/reference/androidx/media3/common/C#LENGTH_UNSET()`) means that the load control will calculate the target buffer size based on the selected tracks.

### DEFAULT_TARGET_BUFFER_BYTES_FOR_PRELOAD

```
public static final int DEFAULT_TARGET_BUFFER_BYTES_FOR_PRELOAD = 144179200
```

The default target buffer size in bytes that will be used for preloading media outside of player, see `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId#PRELOAD()`.

### DEFAULT_TEXT_BUFFER_SIZE

```
public static final int DEFAULT_TEXT_BUFFER_SIZE = 131072
```

A default size in bytes for a text buffer.

### DEFAULT_VIDEO_BUFFER_SIZE

```
public static final int DEFAULT_VIDEO_BUFFER_SIZE = 131072000
```

A default size in bytes for a video buffer.

### DEFAULT_VIDEO_BUFFER_SIZE_FOR_LOCAL_PLAYBACK

```
public static final int DEFAULT_VIDEO_BUFFER_SIZE_FOR_LOCAL_PLAYBACK = 19660800
```

A default size in bytes for a video buffer for local playback.

### LOCAL_PLAYBACK_SCHEMES

```
public static final ImmutableList<String> LOCAL_PLAYBACK_SCHEMES
```

List of URL schemes that are considered local on-device playback.

## Public constructors

### DefaultLoadControl

```
public DefaultLoadControl()
```

Constructs a new instance, using the `DEFAULT_*` constants defined in this class.

## Protected constructors

### DefaultLoadControl

```
protected DefaultLoadControl(
    DefaultAllocator allocator,
    int minBufferMs,
    int minBufferForLocalPlaybackMs,
    int maxBufferMs,
    int maxBufferForLocalPlaybackMs,
    int bufferForPlaybackMs,
    int bufferForPlaybackForLocalPlaybackMs,
    int bufferForPlaybackAfterRebufferMs,
    int bufferForPlaybackAfterRebufferForLocalPlaybackMs,
    int targetBufferBytes,
    boolean prioritizeTimeOverSizeThresholds,
    boolean prioritizeTimeOverSizeThresholdsForLocalPlayback,
    int backBufferDurationMs,
    boolean retainBackBufferFromKeyframe
)
```

### DefaultLoadControl

```
protected DefaultLoadControl(
    DefaultAllocator allocator,
    int minBufferMs,
    int minBufferForLocalPlaybackMs,
    int maxBufferMs,
    int maxBufferForLocalPlaybackMs,
    int bufferForPlaybackMs,
    int bufferForPlaybackForLocalPlaybackMs,
    int bufferForPlaybackAfterRebufferMs,
    int bufferForPlaybackAfterRebufferForLocalPlaybackMs,
    int targetBufferBytes,
    boolean prioritizeTimeOverSizeThresholds,
    boolean prioritizeTimeOverSizeThresholdsForLocalPlayback,
    int backBufferDurationMs,
    boolean retainBackBufferFromKeyframe,
    Map<String, Integer> playerTargetBufferBytes
)
```

## Public methods

### getAllocator

```
public Allocator getAllocator(PlayerId playerId)
```

Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/Allocator` that should be used to obtain media buffer allocations for the specified `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId`.

### getBackBufferDurationUs

```
public long getBackBufferDurationUs(PlayerId playerId)
```

Returns the duration of media to retain in the buffer prior to the current playback position, for fast backward seeking.

Note: If `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#retainBackBufferFromKeyframe()` is false then seeking in the back-buffer will only be fast if the back-buffer contains a keyframe prior to the seek position.

Note: Implementations should return a single value. Dynamic changes to the back-buffer are not currently supported.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId` that requests the back buffer duration. |

| Returns |
|---|---|
| `long` | The duration of media to retain in the buffer prior to the current playback position, in microseconds. |

### onPrepared

```
public void onPrepared(PlayerId playerId)
```

Called by the player when prepared with a new source.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId` that prepared a new source. |

### onReleased

```
public void onReleased(PlayerId playerId)
```

Called by the player when released.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId` that was released. |

### onStopped

```
public void onStopped(PlayerId playerId)
```

Called by the player when stopped.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId` that was stopped. |

### onTracksSelected

```
public void onTracksSelected(
    LoadControl.Parameters parameters,
    TrackGroupArray trackGroups,
    @NullableType ExoTrackSelection[] trackSelections
)
```

Called by the player when a track selection occurs.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl.Parameters parameters` | containing the `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId`, the current `https://developer.android.com/reference/androidx/media3/common/Timeline` in ExoPlayer, and the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod` for which the selection was made. Will be `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#EMPTY_MEDIA_PERIOD_ID()` when `timeline` is empty. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray trackGroups` | The `https://developer.android.com/reference/androidx/media3/common/TrackGroup`s from which the selection was made. |
| `@https://developer.android.com/reference/androidx/media3/common/util/NullableType ExoTrackSelection[] trackSelections` | The track selections that were made. |

### retainBackBufferFromKeyframe

```
public boolean retainBackBufferFromKeyframe(PlayerId playerId)
```

Returns whether media should be retained from the keyframe before the current playback position minus `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#getBackBufferDurationUs()`, rather than any sample before or at that position.

Warning: Returning true will cause the back-buffer size to depend on the spacing of keyframes in the media being played. Returning true is not recommended unless you control the media and are comfortable with the back-buffer size exceeding `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#getBackBufferDurationUs()` by as much as the maximum duration between adjacent keyframes in the media.

Note: Implementations should return a single value. Dynamic changes to the back-buffer are not currently supported.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId` that requests whether to retain the back buffer from key frame. |

| Returns |
|---|---|
| `boolean` | Whether media should be retained from the keyframe before the current playback position minus `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#getBackBufferDurationUs()`, rather than any sample before or at that position. |

### shouldContinueLoading

```
public boolean shouldContinueLoading(LoadControl.Parameters parameters)
```

Called by the player to determine whether it should continue to load the source. If this method returns true, the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod` identified in the most recent `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl#onTracksSelected(androidx.media3.exoplayer.LoadControl.Parameters,androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.trackselection.ExoTrackSelection[])` call will continue being loaded.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl.Parameters parameters` | Information about the playback context and the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod` that will continue to load if this method returns `true`. |

| Returns |
|---|---|
| `boolean` | Whether the loading should continue. |

### shouldContinuePreloading

```
public boolean shouldContinuePreloading(
    PlayerId playerId,
    Timeline timeline,
    MediaSource.MediaPeriodId mediaPeriodId,
    long bufferedDurationUs
)
```

Called to determine whether preloading should be continued. If this method returns true, the presented period will continue to load media.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId` that wants to continue preloading. |
| `https://developer.android.com/reference/androidx/media3/common/Timeline timeline` | The Timeline containing the preload period that can be looked up with MediaPeriodId.periodUid. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | The MediaPeriodId of the preloading period. |
| `long bufferedDurationUs` | The duration of media currently buffered by the preload period. |

| Returns |
|---|---|
| `boolean` | Whether the preloading should continue for the given period. |

### shouldStartPlayback

```
public boolean shouldStartPlayback(LoadControl.Parameters parameters)
```

Called repeatedly by the player when it's loading the source, has yet to start playback, and has the minimum amount of data necessary for playback to be started. The value returned determines whether playback is actually started. The load control may opt to return ` false` until some condition has been met (e.g. a certain amount of media is buffered).

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl.Parameters parameters` | Information about the playback context and the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod` that will start playing if this method returns `true`. |

| Returns |
|---|---|
| `boolean` | Whether playback should be allowed to start or resume. |

## Protected methods

### calculateTargetBufferBytes

```
protected int [calculateTargetBufferBytes](https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#calculateTargetBufferBytes(androidx.media3.exoplayer.trackselection.ExoTrackSelection[]))(
    @NullableType ExoTrackSelection[] trackSelectionArray
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Overwrite `https://developer.android.com/reference/androidx/media3/exoplayer/DefaultLoadControl#calculateTargetBufferBytes(androidx.media3.exoplayer.LoadControl.Parameters,androidx.media3.exoplayer.trackselection.ExoTrackSelection[])` instead.

### calculateTargetBufferBytes

```
protected int calculateTargetBufferBytes(
    LoadControl.Parameters parameters,
    @NullableType ExoTrackSelection[] trackSelectionArray
)
```

Calculate target buffer size in bytes based on the selected tracks. The player will try not to exceed this target buffer. Only used when `targetBufferBytes` is `https://developer.android.com/reference/androidx/media3/common/C#LENGTH_UNSET()`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl.Parameters parameters` | The `https://developer.android.com/reference/androidx/media3/exoplayer/LoadControl.Parameters` for the current playback context for which tracks are selected. |
| `@https://developer.android.com/reference/androidx/media3/common/util/NullableType ExoTrackSelection[] trackSelectionArray` | The selected tracks. |

| Returns |
|---|---|
| `int` | The target buffer size in bytes. |