# ProgressiveMediaSource.Factory

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/ProgressiveMediaSource.java+class:androidx.media3.exoplayer.source.ProgressiveMediaSource.Factory)

*** ** * ** ***


```
public final class ProgressiveMediaSource.Factory implements MediaSourceFactory
```

<br />

*** ** * ** ***

Factory for `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource`s.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#Factory(androidx.media3.datasource.DataSource.Factory)(https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory)` Creates a new factory for `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource`s. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#Factory(androidx.media3.datasource.DataSource.Factory,androidx.media3.extractor.ExtractorsFactory)( https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, https://developer.android.com/reference/androidx/media3/extractor/ExtractorsFactory extractorsFactory )` Equivalent to `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#Factory(androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.source.ProgressiveMediaExtractor.Factory)`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#Factory(androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.source.ProgressiveMediaExtractor.Factory)( https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaExtractor.Factory progressiveMediaExtractorFactory )` Creates a new factory for `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource`s. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#Factory(androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.source.ProgressiveMediaExtractor.Factory,androidx.media3.exoplayer.drm.DrmSessionManagerProvider,androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy,int)( https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaExtractor.Factory progressiveMediaExtractorFactory, https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManagerProvider drmSessionManagerProvider, https://developer.android.com/reference/androidx/media3/exoplayer/upstream/LoadErrorHandlingPolicy loadErrorHandlingPolicy, int continueLoadingCheckIntervalBytes )` Creates a new factory for `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource`s. |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#createMediaSource(androidx.media3.common.MediaItem)(https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem)` Returns a new `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource` using the current parameters. |
| `int[]` | `@https://developer.android.com/reference/androidx/media3/common/C.ContentType https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#getSupportedTypes()()` Returns the `https://developer.android.com/reference/androidx/media3/common/C.ContentType` supported by media sources created by this factory. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#setContinueLoadingCheckIntervalBytes(int)( int continueLoadingCheckIntervalBytes )` Sets the number of bytes that should be loaded between each invocation of `https://developer.android.com/reference/androidx/media3/exoplayer/source/SequenceableLoader.Callback#onContinueLoadingRequested(T)`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#setDownloadExecutor(com.google.common.base.Supplier<androidx.media3.exoplayer.util.ReleasableExecutor>)(https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<https://developer.android.com/reference/androidx/media3/exoplayer/util/ReleasableExecutor> downloadExecutor)` Sets a supplier for an `https://developer.android.com/reference/androidx/media3/exoplayer/util/ReleasableExecutor` that is used for loading the media. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html <T extends https://developer.android.com/reference/java/util/concurrent/Executor.html> https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#setDownloadExecutor(com.google.common.base.Supplier<T>,java.util.function.Consumer<T>)( https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<T> downloadExecutor, https://developer.android.com/reference/java/util/function/Consumer.html<T> downloadExecutorReleaser )` Sets a supplier for an `https://developer.android.com/reference/java/util/concurrent/Executor.html` that is used for loading the media. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#setDrmSessionManagerProvider(androidx.media3.exoplayer.drm.DrmSessionManagerProvider)( https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManagerProvider drmSessionManagerProvider )` Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManagerProvider` used to obtain a `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManager` for a `https://developer.android.com/reference/androidx/media3/common/MediaItem`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#setLoadErrorHandlingPolicy(androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy)( https://developer.android.com/reference/androidx/media3/exoplayer/upstream/LoadErrorHandlingPolicy loadErrorHandlingPolicy )` Sets an optional `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/LoadErrorHandlingPolicy`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory` | `@https://checkerframework.org/api/com/google/errorprone/annotations/CanIgnoreReturnValue.html https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#setLoadOnlySelectedTracks(boolean)(boolean loadOnlySelectedTracks)` Sets whether to load only the video and image tracks selected by the track selection policy. |

### Inherited Constants

From [androidx.media3.exoplayer.source.MediaSource.Factory](https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory) `static final https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory#UNSUPPORTED()`

An instance that throws `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` from `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory#createMediaSource(androidx.media3.common.MediaItem)` and `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory#getSupportedTypes()`.
From [androidx.media3.exoplayer.source.MediaSourceFactory](https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceFactory) `static final https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceFactory` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceFactory#UNSUPPORTED()`

An instance that throws `https://developer.android.com/reference/java/lang/UnsupportedOperationException.html` from `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory#createMediaSource(androidx.media3.common.MediaItem)` and `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory#getSupportedTypes()`.

### Inherited methods

From [androidx.media3.exoplayer.source.MediaSource.Factory](https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory) `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
@https://developer.android.com/reference/androidx/media3/common/util/ExperimentalApi
[experimentalParseSubtitlesDuringExtraction](https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory#experimentalParseSubtitlesDuringExtraction(boolean))(
boolean parseSubtitlesDuringExtraction
)`

**This method is deprecated.**

This method (and all support for 'legacy' subtitle decoding during rendering) will be removed in a future release.

<br />

`https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory#setCmcdConfigurationFactory(androidx.media3.exoplayer.upstream.CmcdConfiguration.Factory)(
https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CmcdConfiguration.Factory cmcdConfigurationFactory
)`

Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CmcdConfiguration.Factory` used to obtain a `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/CmcdConfiguration` for a `https://developer.android.com/reference/androidx/media3/common/MediaItem`.
`https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory#setSubtitleParserFactory(androidx.media3.extractor.text.SubtitleParser.Factory)(https://developer.android.com/reference/androidx/media3/extractor/text/SubtitleParser.Factory subtitleParserFactory)`

Sets the `https://developer.android.com/reference/androidx/media3/extractor/text/SubtitleParser.Factory` to be used for parsing subtitles during extraction.

## Public constructors

### Factory

```
public Factory(DataSource.Factory dataSourceFactory)
```

Creates a new factory for `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource`s.

The factory will use the following default components:

- `https://developer.android.com/reference/androidx/media3/extractor/DefaultExtractorsFactory`
- `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DefaultDrmSessionManagerProvider`
- `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/DefaultLoadErrorHandlingPolicy`

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory` | A factory for `https://developer.android.com/reference/androidx/media3/datasource/DataSource` to read the media. |

### Factory

```
public Factory(
    DataSource.Factory dataSourceFactory,
    ExtractorsFactory extractorsFactory
)
```

Equivalent to `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory#Factory(androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.source.ProgressiveMediaExtractor.Factory)`.

The factory will use the following default components:

- `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DefaultDrmSessionManagerProvider`
- `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/DefaultLoadErrorHandlingPolicy`

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory` | A factory for `https://developer.android.com/reference/androidx/media3/datasource/DataSource` to read the media. |
| `https://developer.android.com/reference/androidx/media3/extractor/ExtractorsFactory extractorsFactory` | A factory for the `https://developer.android.com/reference/androidx/media3/extractor/Extractor` used to extract the media from its container. |

### Factory

```
public Factory(
    DataSource.Factory dataSourceFactory,
    ProgressiveMediaExtractor.Factory progressiveMediaExtractorFactory
)
```

Creates a new factory for `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource`s.

The factory will use the following default components:

- `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DefaultDrmSessionManagerProvider`
- `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/DefaultLoadErrorHandlingPolicy`

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory` | A factory for `https://developer.android.com/reference/androidx/media3/datasource/DataSource` to read the media. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaExtractor.Factory progressiveMediaExtractorFactory` | A factory for the `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaExtractor` to extract the media from its container. |

### Factory

```
public Factory(
    DataSource.Factory dataSourceFactory,
    ProgressiveMediaExtractor.Factory progressiveMediaExtractorFactory,
    DrmSessionManagerProvider drmSessionManagerProvider,
    LoadErrorHandlingPolicy loadErrorHandlingPolicy,
    int continueLoadingCheckIntervalBytes
)
```

Creates a new factory for `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource`s.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory` | A factory for `https://developer.android.com/reference/androidx/media3/datasource/DataSource` to read the media. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaExtractor.Factory progressiveMediaExtractorFactory` | A factory for the `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaExtractor` to extract media from its container. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManagerProvider drmSessionManagerProvider` | A provider to obtain a `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManager` for a `https://developer.android.com/reference/androidx/media3/common/MediaItem`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/LoadErrorHandlingPolicy loadErrorHandlingPolicy` | A policy to handle load error. |
| `int continueLoadingCheckIntervalBytes` | The number of bytes that should be loaded between each invocation of `https://developer.android.com/reference/androidx/media3/exoplayer/source/SequenceableLoader.Callback#onContinueLoadingRequested(T)`. |

## Public methods

### createMediaSource

```
public ProgressiveMediaSource createMediaSource(MediaItem mediaItem)
```

Returns a new `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource` using the current parameters.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem` | The `https://developer.android.com/reference/androidx/media3/common/MediaItem`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource` | The new `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/NullPointerException.html` | if `https://developer.android.com/reference/androidx/media3/common/MediaItem#localConfiguration()` is `null`. |

### getSupportedTypes

```
@C.ContentType
public int[] getSupportedTypes()
```

Returns the `https://developer.android.com/reference/androidx/media3/common/C.ContentType` supported by media sources created by this factory.

### setContinueLoadingCheckIntervalBytes

```
@CanIgnoreReturnValue
public ProgressiveMediaSource.Factory setContinueLoadingCheckIntervalBytes(
    int continueLoadingCheckIntervalBytes
)
```

Sets the number of bytes that should be loaded between each invocation of `https://developer.android.com/reference/androidx/media3/exoplayer/source/SequenceableLoader.Callback#onContinueLoadingRequested(T)`. The default value is `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource#DEFAULT_LOADING_CHECK_INTERVAL_BYTES()`.

| Parameters |
|---|---|
| `int continueLoadingCheckIntervalBytes` | The number of bytes that should be loaded between each invocation of `https://developer.android.com/reference/androidx/media3/exoplayer/source/SequenceableLoader.Callback#onContinueLoadingRequested(T)`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory` | This factory, for convenience. |

### setDownloadExecutor

```
@CanIgnoreReturnValue
public MediaSource.Factory setDownloadExecutor(Supplier<ReleasableExecutor> downloadExecutor)
```

Sets a supplier for an `https://developer.android.com/reference/androidx/media3/exoplayer/util/ReleasableExecutor` that is used for loading the media.

| Parameters |
|---|---|
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<https://developer.android.com/reference/androidx/media3/exoplayer/util/ReleasableExecutor> downloadExecutor` | A `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html` that provides an externally managed `https://developer.android.com/reference/androidx/media3/exoplayer/util/ReleasableExecutor` for downloading and extraction. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.Factory` | This factory, for convenience. |

### setDownloadExecutor

```
@CanIgnoreReturnValue
public ProgressiveMediaSource.Factory <T extends Executor> setDownloadExecutor(
    Supplier<T> downloadExecutor,
    Consumer<T> downloadExecutorReleaser
)
```

Sets a supplier for an `https://developer.android.com/reference/java/util/concurrent/Executor.html` that is used for loading the media.

| Parameters |
|---|---|
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<T> downloadExecutor` | A `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html` that provides an externally managed `https://developer.android.com/reference/java/util/concurrent/Executor.html` for downloading and extraction. |
| `https://developer.android.com/reference/java/util/function/Consumer.html<T> downloadExecutorReleaser` | A callback triggered once a load task is finished and a supplied executor is no longer required. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory` | This factory, for convenience. |

### setDrmSessionManagerProvider

```
@CanIgnoreReturnValue
public ProgressiveMediaSource.Factory setDrmSessionManagerProvider(
    DrmSessionManagerProvider drmSessionManagerProvider
)
```

Sets the `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManagerProvider` used to obtain a `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManager` for a `https://developer.android.com/reference/androidx/media3/common/MediaItem`.

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory` | This factory, for convenience. |

### setLoadErrorHandlingPolicy

```
@CanIgnoreReturnValue
public ProgressiveMediaSource.Factory setLoadErrorHandlingPolicy(
    LoadErrorHandlingPolicy loadErrorHandlingPolicy
)
```

Sets an optional `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/LoadErrorHandlingPolicy`.

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory` | This factory, for convenience. |

### setLoadOnlySelectedTracks

```
@CanIgnoreReturnValue
public ProgressiveMediaSource.Factory setLoadOnlySelectedTracks(boolean loadOnlySelectedTracks)
```

Sets whether to load only the video and image tracks selected by the track selection policy.

Audio, text, and metadata tracks are always loaded regardless of track selection, as they have relatively low bitrate and are more likely to be toggled mid-playback (e.g., changing audio languages or subtitle tracks, or disabling audio during scrubbing mode). Always loading them allows seamlessly switching mid-playback without re-buffering or seeking.

Note that while this saves memory, it may cause additional buffering or latency if unselected video or image tracks are enabled mid-playback, as the player may need to perform additional network requests to fetch the newly selected track data.

The default is `true`.

| Parameters |
|---|---|
| `boolean loadOnlySelectedTracks` | Whether to load only the video and image tracks selected by the track selection policy, instead of loading all tracks. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ProgressiveMediaSource.Factory` | This factory, for convenience. |