# PreloadMediaSource.PreloadControl

# 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)

*** ** * ** ***

Kotlin\|[Java](https://developer.android.com/reference/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl "View this page in Java")

<br />

```
interface PreloadMediaSource.PreloadControl
```

<br />

*** ** * ** ***

Controls preloading of[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource).

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

## Summary

|                                ### Public functions                                 |
|-------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html) | [onContinueLoadingRequested](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onContinueLoadingRequested(androidx.media3.exoplayer.source.preload.PreloadMediaSource,long))`(` ` mediaSource: `[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)`!,` ` bufferedDurationUs: `[Long](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html) `)` Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when it requests to continue loading.                                                       |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)       | [onLoadedToTheEndOfSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onLoadedToTheEndOfSource(androidx.media3.exoplayer.source.preload.PreloadMediaSource))`(mediaSource: `[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)`!)` Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when it has loaded to the end of source.                                                                                                                                                                          |
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html) | [onLoadingUnableToContinue](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onLoadingUnableToContinue(androidx.media3.exoplayer.source.preload.PreloadMediaSource))`(mediaSource: `[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)`!)` Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when loading is unable to continue due to fact that the target buffer bytes set for[PRELOAD](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlayerId#PRELOAD())has reached. |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)       | [onPreloadError](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onPreloadError(androidx.media3.exoplayer.source.preload.PreloadException,androidx.media3.exoplayer.source.preload.PreloadMediaSource))`(error: `[PreloadException](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadException)`!, mediaSource: `[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)`!)` Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when an error occurs.               |
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html) | [onSourcePrepared](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onSourcePrepared(androidx.media3.exoplayer.source.preload.PreloadMediaSource))`(mediaSource: `[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)`!)` Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when it has completed preparation.                                                                                                                                                                                                |
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html) | [onTracksSelected](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onTracksSelected(androidx.media3.exoplayer.source.preload.PreloadMediaSource))`(mediaSource: `[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)`!)` Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when it has tracks selected.                                                                                                                                                                                                      |
| [Unit](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)       | [onUsedByPlayer](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource.PreloadControl#onUsedByPlayer(androidx.media3.exoplayer.source.preload.PreloadMediaSource))`(mediaSource: `[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)`!)` Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when the player starts using this source.                                                                                                                                                                                             |

## Public functions

### onContinueLoadingRequested

```
fun onContinueLoadingRequested(
    mediaSource: PreloadMediaSource!,
    bufferedDurationUs: Long
): Boolean
```

Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when it requests to continue loading.

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

|                                                                     Parameters                                                                     |
|----------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `mediaSource: `[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)`!` | The[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)that requests to continue loading. |
| `bufferedDurationUs: `[Long](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html)                                                | An estimate of the duration from the start position for which data is buffered, in microseconds.                                                                      |

### onLoadedToTheEndOfSource

```
fun onLoadedToTheEndOfSource(mediaSource: PreloadMediaSource!): Unit
```

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

The default implementation is a no-op.  

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

### onLoadingUnableToContinue

```
fun onLoadingUnableToContinue(mediaSource: PreloadMediaSource!): Boolean
```

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

The default return value is`false`.  

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

|                                       Returns                                       |
|-------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html) | 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

```
fun onPreloadError(error: PreloadException!, mediaSource: PreloadMediaSource!): Unit
```

Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when an error occurs.  

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

### onSourcePrepared

```
fun onSourcePrepared(mediaSource: PreloadMediaSource!): Boolean
```

Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when it has completed preparation.  

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

|                                       Returns                                       |
|-------------------------------------------------------------------------------------|----------------------------------------------------------------------|
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html) | True if the`mediaSource`should continue preloading, false otherwise. |

### onTracksSelected

```
fun onTracksSelected(mediaSource: PreloadMediaSource!): Boolean
```

Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when it has tracks selected.  

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

|                                       Returns                                       |
|-------------------------------------------------------------------------------------|----------------------------------------------------------------------|
| [Boolean](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html) | True if the`mediaSource`should continue preloading, false otherwise. |

### onUsedByPlayer

```
fun onUsedByPlayer(mediaSource: PreloadMediaSource!): Unit
```

Called from[PreloadMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/preload/PreloadMediaSource)when the player starts using this source.  

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