# PreloadMediaSource.PreloadControl

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/source/preload/PreloadMediaSource.java+class:androidx.media3.exoplayer.source.preload.PreloadMediaSource.PreloadControl)

*** ** * ** ***


```
public interface PreloadMediaSource.PreloadControl
```

<br />

*** ** * ** ***

Controls preloading of `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource`.

The methods are called on the `https://developer.android.com/reference/android/os/Looper.html` that is passed when constructing the `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource.Factory`.

## Summary

| ### Public methods |
|---|---|
| `abstract boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onContinueLoadingRequested(androidx.media3.exoplayer.source.preload.PreloadMediaSource,long)( https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource, long bufferedDurationUs )` Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when it requests to continue loading. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onLoadedToTheEndOfSource(androidx.media3.exoplayer.source.preload.PreloadMediaSource)(https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource)` Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when it has loaded to the end of source. |
| `default boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onLoadingUnableToContinue(androidx.media3.exoplayer.source.preload.PreloadMediaSource)(https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource)` Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when loading is unable to continue due to fact that the target buffer bytes set for `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId#PRELOAD()` has reached. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onPreloadError(androidx.media3.exoplayer.source.preload.PreloadException,androidx.media3.exoplayer.source.preload.PreloadMediaSource)(https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadException error, https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource)` Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when an error occurs. |
| `abstract boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onSourcePrepared(androidx.media3.exoplayer.source.preload.PreloadMediaSource)(https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource)` Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when it has completed preparation. |
| `abstract boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onTracksSelected(androidx.media3.exoplayer.source.preload.PreloadMediaSource)(https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource)` Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when it has tracks selected. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onUsedByPlayer(androidx.media3.exoplayer.source.preload.PreloadMediaSource)(https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource)` Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when the player starts using this source. |

## Public methods

### onContinueLoadingRequested

```
abstract boolean onContinueLoadingRequested(
    PreloadMediaSource mediaSource,
    long bufferedDurationUs
)
```

Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when it requests to continue loading.

If fully loaded, then `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onLoadedToTheEndOfSource(androidx.media3.exoplayer.source.preload.PreloadMediaSource)` will be called instead.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` that requests to continue loading. |
| `long bufferedDurationUs` | An estimate of the duration from the start position for which data is buffered, in microseconds. |

### onLoadedToTheEndOfSource

```
default void onLoadedToTheEndOfSource(PreloadMediaSource mediaSource)
```

Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when it has loaded to the end of source.

The default implementation is a no-op.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` that has loaded to the end of source. |

### onLoadingUnableToContinue

```
default boolean onLoadingUnableToContinue(PreloadMediaSource mediaSource)
```

Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when loading is unable to continue due to fact that the target buffer bytes set for `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId#PRELOAD()` has reached.

The default return value is `false`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` whose loading is unable to continue. |

| Returns |
|---|---|
| `boolean` | True if the allocated buffer bytes is potentially back under the limit, and the `mediaSource` should expect to continue loading before triggering this event again. |

### onPreloadError

```
abstract void onPreloadError(PreloadException error, PreloadMediaSource mediaSource)
```

Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when an error occurs.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadException error` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadException`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` that has the error occur. |

### onSourcePrepared

```
abstract boolean onSourcePrepared(PreloadMediaSource mediaSource)
```

Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when it has completed preparation.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` that has completed preparation. |

| Returns |
|---|---|
| `boolean` | True if the `mediaSource` should continue preloading, false otherwise. |

### onTracksSelected

```
abstract boolean onTracksSelected(PreloadMediaSource mediaSource)
```

Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when it has tracks selected.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` that has tracks selected. |

| Returns |
|---|---|
| `boolean` | True if the `mediaSource` should continue preloading, false otherwise. |

### onUsedByPlayer

```
abstract void onUsedByPlayer(PreloadMediaSource mediaSource)
```

Called from `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` when the player starts using this source.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource mediaSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource` that the player starts using. |