# FakeMediaSource

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

*** ** * ** ***

<br />

```
@UnstableApi
class FakeMediaSource : BaseMediaSource
```

<br />

|---|---|---|
| [kotlin.Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) |||
| ↳ | [androidx.media3.exoplayer.source.BaseMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource) ||
|   | ↳ | [androidx.media3.test.utils.FakeMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource) |

Known direct subclasses [FakeAdaptiveMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAdaptiveMediaSource)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeAdaptiveMediaSource` | Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` that provides a given timeline. |

*** ** * ** ***

Fake `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource` that provides a given timeline. Creating the period will return a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod` with a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray` using the given `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`s.

## Summary

| ### Nested types |
|---|
| `class https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.Builder` A builder for `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource` instances. |
| `class https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.InitialTimeline : https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/ForwardingTimeline` A forwarding timeline to provide an initial timeline for fake multi window sources. |

| ### Constants |
|---|---|
| `const https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FAKE_MEDIA_ITEM()` The media item used by the fake media source. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource()()` Creates a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource` with a default `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTimeline`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.common.Format...)(timeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline?, formats: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>!)` Creates a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource`. |
| `[FakeMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.common.Format...))( timeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline?, drmSessionManager: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionManager!, formats: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>! )` **This function is deprecated.** Use `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.Builder` instead (or `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory,long[],androidx.media3.exoplayer.source.TrackGroupArray)` for subclasses of ` FakeMediaSource`). <br /> |
| `[FakeMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory,androidx.media3.common.Format...))( timeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline?, drmSessionManager: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionManager!, trackDataFactory: https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod.TrackDataFactory?, formats: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/common/Format!>! )` **This function is deprecated.** Use `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.Builder` instead (or `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory,long[],androidx.media3.exoplayer.source.TrackGroupArray)` for subclasses of ` FakeMediaSource`). <br /> |
| `[FakeMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory,androidx.media3.exoplayer.source.TrackGroupArray))( timeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline?, drmSessionManager: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionManager!, trackDataFactory: https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod.TrackDataFactory?, trackGroupArray: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray! )` **This function is deprecated.** Use `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.Builder` instead (or `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory,long[],androidx.media3.exoplayer.source.TrackGroupArray)` for subclasses of ` FakeMediaSource`). <br /> |

| ### Protected constructors |
|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory,long[],androidx.media3.exoplayer.source.TrackGroupArray)( timeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline?, drmSessionManager: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionManager!, trackDataFactory: https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod.TrackDataFactory?, syncSampleTimesUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html>?, trackGroupArray: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray! )` Creates a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource`. |

| ### Public functions |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#assertMediaPeriodCreated(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)(mediaPeriodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!)` Assert that a media period for the given id has been created. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#assertReleased()()` Assert that the source and all periods have been released. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#canUpdateMediaItem(androidx.media3.common.MediaItem)(mediaItem: https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!)` Returns whether the `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` for this source can be updated with the provided item. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod!` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#createPeriod(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.upstream.Allocator,long)( id: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!, allocator: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/Allocator!, startPositionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html )` Returns a new `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod` identified by `periodId`. |
| `java-static https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource!` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#createWithWindowId(java.lang.Object)(windowId: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html!)` Convenience method to create a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource` with the given window id. |
| `(https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-mutable-list/index.html)https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/-list/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!>!` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#getCreatedMediaPeriods()()` Returns a list of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId`s, with one element for each created media period. |
| `https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline?` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#getInitialTimeline()()` Returns the initial placeholder timeline that is returned immediately when the real timeline is not yet known, or null to let the player create an initial timeline. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod!` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#getLastCreatedActiveMediaPeriod()()` Returns the last created active `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod`. |
| `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#getMediaItem()()` Returns the `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` whose media is provided by the source. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#isPrepared()()` Returns whether the source is currently prepared. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#isSingleWindow()()` Returns true if the media source is guaranteed to never have zero or more than one window. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#maybeThrowSourceInfoRefreshError()()` Throws any pending error encountered while loading or refreshing source information. |
| `synchronized https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#prepareSourceInternal(androidx.media3.datasource.TransferListener)(mediaTransferListener: https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener?)` Starts source preparation and enables the source, see `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource#prepareSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller,androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.exoplayer.upstream.BandwidthMeter)`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#releasePeriod(androidx.media3.exoplayer.source.MediaPeriod)(mediaPeriod: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod!)` Releases the period. |
| `synchronized https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#setAllowPreparation(boolean)(allowPreparation: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)` Sets whether the next call to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#prepareSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller,androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.exoplayer.upstream.BandwidthMeter)` is allowed to finish. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#setCanUpdateMediaItems(boolean)(canUpdateMediaItems: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)` Sets whether the source allows to update its `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` via `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#updateMediaItem(androidx.media3.common.MediaItem)`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#setNewSourceInfo(androidx.media3.common.Timeline)(newTimeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline!)` Sets a new timeline. |
| `synchronized https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#setNewSourceInfo(androidx.media3.common.Timeline,boolean)(newTimeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline!, sendManifestLoadEvents: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html)` Sets a new timeline. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#setPeriodDefersOnPreparedCallback(boolean)( periodDefersOnPreparedCallback: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html )` Sets whether the created `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod` should defer to call `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod.Callback#onPrepared(androidx.media3.exoplayer.source.MediaPeriod)`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#updateMediaItem(androidx.media3.common.MediaItem)(mediaItem: https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem!)` Updates the `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` for this source. |

| ### Protected functions |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod!` | `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/RequiresNonNull.html(value = "this.timeline") https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#createMediaPeriod(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.upstream.Allocator,androidx.media3.exoplayer.source.MediaSourceEventListener.EventDispatcher,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.exoplayer.drm.DrmSessionEventListener.EventDispatcher,androidx.media3.datasource.TransferListener)( id: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!, trackGroupArray: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray!, allocator: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/Allocator!, mediaSourceEventDispatcher: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher!, drmSessionManager: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionManager!, drmEventDispatcher: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher!, transferListener: https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener? )` Creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod` for this media source. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#releaseMediaPeriod(androidx.media3.exoplayer.source.MediaPeriod)(mediaPeriod: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod!)` Releases a media period created by `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#createMediaPeriod(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.upstream.Allocator,androidx.media3.exoplayer.source.MediaSourceEventListener.EventDispatcher,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.exoplayer.drm.DrmSessionEventListener.EventDispatcher,androidx.media3.datasource.TransferListener)`. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#releaseSourceInternal()()` Releases the source, see `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource#releaseSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller)`. |

| ### Protected properties |
|---|---|
| `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline!` | `@https://checkerframework.org/api/org/checkerframework/checker/nullness/qual/MonotonicNonNull.html https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#timeline()` |

### Inherited functions

From [androidx.media3.exoplayer.source.BaseMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#addDrmEventListener(android.os.Handler,androidx.media3.exoplayer.drm.DrmSessionEventListener)(

handler: https://developer.android.com/reference/android/os/Handler.html!,

eventListener: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionEventListener!

)`

Adds a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionEventListener` to the list of listeners which are notified of DRM events for this media source.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#addEventListener(android.os.Handler,androidx.media3.exoplayer.source.MediaSourceEventListener)(

handler: https://developer.android.com/reference/android/os/Handler.html!,

eventListener: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener!

)`

Adds a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener` to the list of listeners which are notified of media source events.
`https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher!` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#createDrmEventDispatcher(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)(mediaPeriodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId?)`

Returns a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher` which dispatches all events to the registered listeners with the specified `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId`
`https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher!` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#createDrmEventDispatcher(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)(

windowIndex: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,

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

)`

Returns a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher` which dispatches all events to the registered listeners with the specified window index and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId`.
`https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher!` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#createEventDispatcher(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)(mediaPeriodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId?)`

Returns a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher` which dispatches all events to the registered listeners with the specified `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId`.
`https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher!` `[createEventDispatcher](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#createEventDispatcher(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,long))(

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

mediaTimeOffsetMs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html

)`

**This function is deprecated.**

Use `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#createEventDispatcher(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)` instead.

<br />

`https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher!` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#createEventDispatcher(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)(

windowIndex: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,

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

)`

Returns a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher` which dispatches all events to the registered listeners with the specified window index and `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId`.
`https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher!` `[createEventDispatcher](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#createEventDispatcher(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,long))(

windowIndex: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html,

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

mediaTimeOffsetMs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html

)`

**This function is deprecated.**

Use `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#createEventDispatcher(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId)` instead.

<br />

`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#disable(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller)(caller: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaSourceCaller!)`

Disables the source for the creation of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod`.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#disableInternal()()`

Disables the source, see `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource#disable(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller)`.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#enable(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller)(caller: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaSourceCaller!)`

Enables the source for the creation of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod`.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#enableInternal()()`

Enables the source, see `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource#enable(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller)`.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#isEnabled()()`

Returns whether the source is enabled.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#prepareSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller,androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.exoplayer.upstream.BandwidthMeter)(

caller: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaSourceCaller!,

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

bandwidthMeter: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/BandwidthMeter!

)`

Registers a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaSourceCaller`.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#prepareSourceCalled()()`

Returns whether the source has `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource#prepareSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller,androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.exoplayer.upstream.BandwidthMeter)` called.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#refreshSourceInfo(androidx.media3.common.Timeline)(timeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline!)`

Updates timeline and manifest and notifies all listeners of the update.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#releaseSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller)(caller: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaSourceCaller!)`

Unregisters a caller, and disables and releases the source if no longer required.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#removeDrmEventListener(androidx.media3.exoplayer.drm.DrmSessionEventListener)(eventListener: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionEventListener!)`

Removes a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionEventListener` from the list of listeners which are notified of DRM events for this media source.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#removeEventListener(androidx.media3.exoplayer.source.MediaSourceEventListener)(eventListener: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener!)`

Removes a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener` from the list of listeners which are notified of media source events.
From [androidx.media3.exoplayer.source.MediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource) `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/media3/common/util/UnstableApi
[prepareSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource#prepareSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller,androidx.media3.datasource.TransferListener,androidx.media3.exoplayer.analytics.PlayerId))(

caller: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaSourceCaller!,

mediaTransferListener: https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener?,

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

)`

**This function is deprecated.**

Use `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource#prepareSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller,androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.exoplayer.upstream.BandwidthMeter)` instead.

<br />

### Inherited properties

From [androidx.media3.exoplayer.source.BaseMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource) `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/BandwidthMeter?` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#bandwidthMeter()` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/analytics/PlayerId?` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#playerId()`

## Constants

### FAKE_MEDIA_ITEM

```
const val FAKE_MEDIA_ITEM: MediaItem!
```

The media item used by the fake media source.

## Public constructors

### FakeMediaSource

```
FakeMediaSource()
```

Creates a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource` with a default `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeTimeline`.

Use `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.Builder` to create a more configured instance.

### FakeMediaSource

```
FakeMediaSource(timeline: Timeline?, formats: Array<Format!>!)
```

Creates a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource`. This media source creates `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod`s with a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray` using the given `https://developer.android.com/reference/kotlin/androidx/media3/common/Format`s. The provided `https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline` may be null to prevent an immediate source info refresh message when preparing the media source. It can be manually set later using `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#setNewSourceInfo(androidx.media3.common.Timeline)`.

Use `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.Builder` to create a more configured instance.

### FakeMediaSource

```
[FakeMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.common.Format...))(
    timeline: Timeline?,
    drmSessionManager: DrmSessionManager!,
    formats: Array<Format!>!
)
```

> [!CAUTION]
> **This function is deprecated.**   
>
> Use `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.Builder` instead (or `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory,long[],androidx.media3.exoplayer.source.TrackGroupArray)` for subclasses of ` FakeMediaSource`).

### FakeMediaSource

```
[FakeMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory,androidx.media3.common.Format...))(
    timeline: Timeline?,
    drmSessionManager: DrmSessionManager!,
    trackDataFactory: FakeMediaPeriod.TrackDataFactory?,
    formats: Array<Format!>!
)
```

> [!CAUTION]
> **This function is deprecated.**   
>
> Use `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.Builder` instead (or `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory,long[],androidx.media3.exoplayer.source.TrackGroupArray)` for subclasses of ` FakeMediaSource`).

### FakeMediaSource

```
[FakeMediaSource](https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory,androidx.media3.exoplayer.source.TrackGroupArray))(
    timeline: Timeline?,
    drmSessionManager: DrmSessionManager!,
    trackDataFactory: FakeMediaPeriod.TrackDataFactory?,
    trackGroupArray: TrackGroupArray!
)
```

> [!CAUTION]
> **This function is deprecated.**   
>
> Use `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource.Builder` instead (or `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#FakeMediaSource(androidx.media3.common.Timeline,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.test.utils.FakeMediaPeriod.TrackDataFactory,long[],androidx.media3.exoplayer.source.TrackGroupArray)` for subclasses of ` FakeMediaSource`).

## Protected constructors

### FakeMediaSource

```
protected FakeMediaSource(
    timeline: Timeline?,
    drmSessionManager: DrmSessionManager!,
    trackDataFactory: FakeMediaPeriod.TrackDataFactory?,
    syncSampleTimesUs: LongArray<Long>?,
    trackGroupArray: TrackGroupArray!
)
```

Creates a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource`. This media source creates `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod`s with the provided `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray`, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionManager`, `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod.TrackDataFactory`, and `syncSampleTimesUs`. The provided `https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline` may be null to prevent an immediate source info refresh message when preparing the media source. It can be manually set later using `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#setNewSourceInfo(androidx.media3.common.Timeline)`.

## Public functions

### assertMediaPeriodCreated

```
fun assertMediaPeriodCreated(mediaPeriodId: MediaSource.MediaPeriodId!): Unit
```

Assert that a media period for the given id has been created.

### assertReleased

```
fun assertReleased(): Unit
```

Assert that the source and all periods have been released.

### canUpdateMediaItem

```
fun canUpdateMediaItem(mediaItem: MediaItem!): Boolean
```

Returns whether the `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` for this source can be updated with the provided item.

Should not be called directly from application code.

This method must be called on the application thread.

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

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether the source can be updated using this item. |

### createPeriod

```
fun createPeriod(
    id: MediaSource.MediaPeriodId!,
    allocator: Allocator!,
    startPositionUs: Long
): MediaPeriod!
```

Returns a new `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod` identified by `periodId`.

Should not be called directly from application code.

This method must be called on the playback thread and only if the source is enabled.

| Parameters |
|---|---|
| `id: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!` | The identifier of the period. |
| `allocator: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/Allocator!` | An `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/Allocator` from which to obtain media buffer allocations. |
| `startPositionUs: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-long/index.html` | The expected start position, in microseconds. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod!` | A new `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod`. |

### createWithWindowId

```
java-static fun createWithWindowId(windowId: Any!): FakeMediaSource!
```

Convenience method to create a `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource` with the given window id.

### getCreatedMediaPeriods

```
fun getCreatedMediaPeriods(): (Mutable)List<MediaSource.MediaPeriodId!>!
```

Returns a list of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId`s, with one element for each created media period.

### getInitialTimeline

```
fun getInitialTimeline(): Timeline?
```

Returns the initial placeholder timeline that is returned immediately when the real timeline is not yet known, or null to let the player create an initial timeline.

Should not be called directly from application code.

The initial timeline must use the same uids for windows and periods that the real timeline will use. It also must provide windows which are marked as dynamic to indicate that the window is expected to change when the real timeline arrives.

Any media source which has multiple windows should typically provide such an initial timeline to make sure the player reports the correct number of windows immediately.

This method must be called on the application thread.

### getLastCreatedActiveMediaPeriod

```
fun getLastCreatedActiveMediaPeriod(): MediaPeriod!
```

Returns the last created active `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod`.

Must only be called if the source has created at least one period and it hasn't been released.

### getMediaItem

```
fun getMediaItem(): MediaItem!
```

Returns the `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` whose media is provided by the source.

Should not be called directly from application code.

This method must be called on the application thread.

### isPrepared

```
fun isPrepared(): Boolean
```

Returns whether the source is currently prepared.

### isSingleWindow

```
fun isSingleWindow(): Boolean
```

Returns true if the media source is guaranteed to never have zero or more than one window.

Should not be called directly from application code.

The default implementation returns `true`.

This method must be called on the application thread.

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | true if the source has exactly one window. |

### maybeThrowSourceInfoRefreshError

```
fun maybeThrowSourceInfoRefreshError(): Unit
```

Throws any pending error encountered while loading or refreshing source information.

Should not be called directly from application code.

This method must be called on the playback thread and only after `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource#prepareSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller,androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.exoplayer.upstream.BandwidthMeter)`.

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` |   |

### prepareSourceInternal

```
synchronized fun prepareSourceInternal(mediaTransferListener: TransferListener?): Unit
```

Starts source preparation and enables the source, see `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource#prepareSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller,androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.exoplayer.upstream.BandwidthMeter)`. This method is called at most once until the next call to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#releaseSourceInternal()`.

This method is called on the playback thread.

| Parameters |
|---|---|
| `mediaTransferListener: https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener?` | The transfer listener which should be informed of any media data transfers. May be null if no listener is available. Note that this listener should usually be only informed of transfers related to the media loads and not of auxiliary loads for manifests and other data. |

### releasePeriod

```
fun releasePeriod(mediaPeriod: MediaPeriod!): Unit
```

Releases the period.

Should not be called directly from application code.

This method must be called on the playback thread.

| Parameters |
|---|---|
| `mediaPeriod: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod!` | The period to release. |

### setAllowPreparation

```
synchronized fun setAllowPreparation(allowPreparation: Boolean): Unit
```

Sets whether the next call to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#prepareSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller,androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.exoplayer.upstream.BandwidthMeter)` is allowed to finish. If not allowed, a later call to this method with `allowPreparation` set to true will finish the preparation.

| Parameters |
|---|---|
| `allowPreparation: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether preparation is allowed to finish. |

### setCanUpdateMediaItems

```
fun setCanUpdateMediaItems(canUpdateMediaItems: Boolean): Unit
```

Sets whether the source allows to update its `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` via `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#updateMediaItem(androidx.media3.common.MediaItem)`.

| Parameters |
|---|---|
| `canUpdateMediaItems: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether a `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` update is possible. |

### setNewSourceInfo

```
fun setNewSourceInfo(newTimeline: Timeline!): Unit
```

Sets a new timeline. If the source is already prepared, this triggers a source info refresh message being sent to the listener.

| Parameters |
|---|---|
| `newTimeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline!` | The new `https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline`. |

### setNewSourceInfo

```
synchronized fun setNewSourceInfo(newTimeline: Timeline!, sendManifestLoadEvents: Boolean): Unit
```

Sets a new timeline. If the source is already prepared, this triggers a source info refresh message being sent to the listener.

Must only be called if preparation is `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#setAllowPreparation(boolean)`.

| Parameters |
|---|---|
| `newTimeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline!` | The new `https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline`. |
| `sendManifestLoadEvents: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | Whether to treat this as a manifest refresh and send manifest load events to listeners. |

### setPeriodDefersOnPreparedCallback

```
fun setPeriodDefersOnPreparedCallback(
    periodDefersOnPreparedCallback: Boolean
): Unit
```

Sets whether the created `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod` should defer to call `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod.Callback#onPrepared(androidx.media3.exoplayer.source.MediaPeriod)`. If set to true, `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod.Callback#onPrepared(androidx.media3.exoplayer.source.MediaPeriod)` should be called only after `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaPeriod#setPreparationComplete()` has been called, otherwise the preparation completes immediately.

### updateMediaItem

```
fun updateMediaItem(mediaItem: MediaItem!): Unit
```

Updates the `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem` for this source.

Should not be called directly from application code.

This method must be called on the playback thread and only if `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource#canUpdateMediaItem(androidx.media3.common.MediaItem)` returns `true` for the new `https://developer.android.com/reference/kotlin/androidx/media3/common/MediaItem`.

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

## Protected functions

### createMediaPeriod

```
@RequiresNonNull(value = "this.timeline")
protected fun createMediaPeriod(
    id: MediaSource.MediaPeriodId!,
    trackGroupArray: TrackGroupArray!,
    allocator: Allocator!,
    mediaSourceEventDispatcher: MediaSourceEventListener.EventDispatcher!,
    drmSessionManager: DrmSessionManager!,
    drmEventDispatcher: DrmSessionEventListener.EventDispatcher!,
    transferListener: TransferListener?
): MediaPeriod!
```

Creates a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod` for this media source.

| Parameters |
|---|---|
| `id: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!` | The identifier of the period. |
| `trackGroupArray: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray` supported by the media period. |
| `allocator: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/Allocator!` | An `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/Allocator` from which to obtain media buffer allocations. |
| `mediaSourceEventDispatcher: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher!` | An `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher` to dispatch media source events. |
| `drmSessionManager: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionManager!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionManager` to allow DRM interactions. |
| `drmEventDispatcher: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher!` | An `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher` to dispatch DRM events. |
| `transferListener: https://developer.android.com/reference/kotlin/androidx/media3/datasource/TransferListener?` | The transfer listener which should be informed of any data transfers. May be null if no listener is available. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod!` | A new `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaPeriod`. |

### releaseMediaPeriod

```
protected fun releaseMediaPeriod(mediaPeriod: MediaPeriod!): Unit
```

Releases a media period created by `https://developer.android.com/reference/kotlin/androidx/media3/test/utils/FakeMediaSource#createMediaPeriod(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.upstream.Allocator,androidx.media3.exoplayer.source.MediaSourceEventListener.EventDispatcher,androidx.media3.exoplayer.drm.DrmSessionManager,androidx.media3.exoplayer.drm.DrmSessionEventListener.EventDispatcher,androidx.media3.datasource.TransferListener)`.

### releaseSourceInternal

```
protected fun releaseSourceInternal(): Unit
```

Releases the source, see `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource#releaseSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller)`. This method is called exactly once after each call to `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/BaseMediaSource#prepareSourceInternal(androidx.media3.datasource.TransferListener)`.

This method is called on the playback thread.

## Protected properties

### timeline

```
@MonotonicNonNull
protected val timeline: @MonotonicNonNull Timeline!
```