# LoopingMediaSource

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

*** ** * ** ***


```
@UnstableApi
public final class LoopingMediaSource extends WrappingMediaSource
```

<br />

|---|---|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||||
| ↳ | [androidx.media3.exoplayer.source.BaseMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource) ||||
|   | ↳ | [androidx.media3.exoplayer.source.CompositeMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource) |||
|   |   | ↳ | [androidx.media3.exoplayer.source.WrappingMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource) ||
|   |   |   | ↳ | [androidx.media3.exoplayer.source.LoopingMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource) |

*** ** * ** ***

> [!CAUTION]
> **This class is deprecated.**   
>
> To loop a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` indefinitely, use `https://developer.android.com/reference/androidx/media3/common/Player#setRepeatMode(int)` instead of this class. To add a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` a specific number of times to the playlist, use `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlayer#addMediaSource(androidx.media3.exoplayer.source.MediaSource)` in a loop with the same `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource`. To combine repeated `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` instances into one `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource`, for example to further wrap it in another `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource`, use `https://developer.android.com/reference/androidx/media3/exoplayer/source/ConcatenatingMediaSource2` with the same `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource``https://developer.android.com/reference/androidx/media3/exoplayer/source/ConcatenatingMediaSource2.Builder#add(androidx.media3.common.MediaItem)` multiple times.

Loops a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` a specified number of times.

## Summary

| ### Public constructors |
|---|
| `[LoopingMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#LoopingMediaSource(androidx.media3.exoplayer.source.MediaSource))(https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource childSource)` **This method is deprecated.** Deprecated in Java |
| `[LoopingMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#LoopingMediaSource(androidx.media3.exoplayer.source.MediaSource,int))(https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource childSource, int loopCount)` **This method is deprecated.** Deprecated in Java |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod` | `[createPeriod](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#createPeriod(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.upstream.Allocator,long))( https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId id, https://developer.android.com/reference/androidx/media3/exoplayer/upstream/Allocator allocator, long startPositionUs )` **This method is deprecated.** Deprecated in Java |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/Timeline` | `[getInitialTimeline](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#getInitialTimeline())()` **This method is deprecated.** Deprecated in Java |
| `boolean` | `[isSingleWindow](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#isSingleWindow())()` **This method is deprecated.** Deprecated in Java |
| `void` | `[releasePeriod](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#releasePeriod(androidx.media3.exoplayer.source.MediaPeriod))(https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod mediaPeriod)` **This method is deprecated.** Deprecated in Java |

| ### Protected methods |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` | `[getMediaPeriodIdForChildMediaPeriodId](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#getMediaPeriodIdForChildMediaPeriodId(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))( https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId )` **This method is deprecated.** Deprecated in Java |
| `void` | `[onChildSourceInfoRefreshed](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#onChildSourceInfoRefreshed(androidx.media3.common.Timeline))(https://developer.android.com/reference/androidx/media3/common/Timeline newTimeline)` **This method is deprecated.** Deprecated in Java |

### Inherited fields

From [androidx.media3.exoplayer.source.BaseMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource) `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter` `https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#bandwidthMeter()`

**This field is deprecated.** Deprecated in Java
`@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId` `https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#playerId()`

**This field is deprecated.** Deprecated in Java
From [androidx.media3.exoplayer.source.WrappingMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource) `final https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` `https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#mediaSource()`

**This field is deprecated.** Deprecated in Java

### Inherited methods

From [androidx.media3.exoplayer.source.BaseMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource) `final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[addDrmEventListener](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#addDrmEventListener(android.os.Handler,androidx.media3.exoplayer.drm.DrmSessionEventListener))(
https://developer.android.com/reference/android/os/Handler.html handler,
https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener eventListener
)`

**This method is deprecated.** Deprecated in Java
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[addEventListener](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#addEventListener(android.os.Handler,androidx.media3.exoplayer.source.MediaSourceEventListener))(
https://developer.android.com/reference/android/os/Handler.html handler,
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceEventListener eventListener
)`

**This method is deprecated.** Deprecated in Java
`final https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher` `[createDrmEventDispatcher](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#createDrmEventDispatcher(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))(
@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId
)`

**This method is deprecated.** Deprecated in Java
`final https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher` `[createDrmEventDispatcher](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#createDrmEventDispatcher(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))(
int windowIndex,
@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId
)`

**This method is deprecated.** Deprecated in Java
`final https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher` `[createEventDispatcher](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#createEventDispatcher(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId)`

**This method is deprecated.** Deprecated in Java
`final https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher` `[createEventDispatcher](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#createEventDispatcher(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,long))(
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId,
long mediaTimeOffsetMs
)`

**This method is deprecated.**

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

<br />

`final https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher` `[createEventDispatcher](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#createEventDispatcher(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))(
int windowIndex,
@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId
)`

**This method is deprecated.** Deprecated in Java
`final https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher` `[createEventDispatcher](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#createEventDispatcher(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,long))(
int windowIndex,
@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId,
long mediaTimeOffsetMs
)`

**This method is deprecated.**

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

<br />

`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[disable](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#disable(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller))(https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaSourceCaller caller)`

**This method is deprecated.** Deprecated in Java
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[enable](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#enable(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller))(https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaSourceCaller caller)`

**This method is deprecated.** Deprecated in Java
`final https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter` `[getBandwidthMeter](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#getBandwidthMeter())()`

**This method is deprecated.** Deprecated in Java
`final https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId` `[getPlayerId](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#getPlayerId())()`

**This method is deprecated.** Deprecated in Java
`final boolean` `[isEnabled](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#isEnabled())()`

**This method is deprecated.** Deprecated in Java
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[prepareSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#prepareSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller,androidx.media3.exoplayer.analytics.PlayerId,androidx.media3.exoplayer.upstream.BandwidthMeter))(
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaSourceCaller caller,
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId,
https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter bandwidthMeter
)`

**This method is deprecated.** Deprecated in Java
`final boolean` `[prepareSourceCalled](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#prepareSourceCalled())()`

**This method is deprecated.** Deprecated in Java
`final void` `[refreshSourceInfo](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#refreshSourceInfo(androidx.media3.common.Timeline))(https://developer.android.com/reference/androidx/media3/common/Timeline timeline)`

**This method is deprecated.** Deprecated in Java
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[releaseSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#releaseSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller))(https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaSourceCaller caller)`

**This method is deprecated.** Deprecated in Java
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[removeDrmEventListener](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#removeDrmEventListener(androidx.media3.exoplayer.drm.DrmSessionEventListener))(https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener eventListener)`

**This method is deprecated.** Deprecated in Java
`final void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[removeEventListener](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#removeEventListener(androidx.media3.exoplayer.source.MediaSourceEventListener))(https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceEventListener eventListener)`

**This method is deprecated.** Deprecated in Java
`final void` `[setBandwidthMeter](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#setBandwidthMeter(androidx.media3.exoplayer.upstream.BandwidthMeter))(https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter bandwidthMeter)`

**This method is deprecated.** Deprecated in Java
`final void` `[setPlayerId](https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#setPlayerId(androidx.media3.exoplayer.analytics.PlayerId))(https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId)`

**This method is deprecated.** Deprecated in Java
From [androidx.media3.exoplayer.source.CompositeMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource) `final void` `[disableChildSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#disableChildSource(T))(@https://developer.android.com/reference/androidx/media3/common/util/UnknownNull T id)`

**This method is deprecated.** Deprecated in Java
`void` `@https://developer.android.com/reference/androidx/annotation/CallSuper
[disableInternal](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#disableInternal())()`

**This method is deprecated.** Deprecated in Java
`final void` `[enableChildSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#enableChildSource(T))(@https://developer.android.com/reference/androidx/media3/common/util/UnknownNull T id)`

**This method is deprecated.** Deprecated in Java
`void` `@https://developer.android.com/reference/androidx/annotation/CallSuper
[enableInternal](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#enableInternal())()`

**This method is deprecated.** Deprecated in Java
`@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` `[getMediaPeriodIdForChildMediaPeriodId](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#getMediaPeriodIdForChildMediaPeriodId(T,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))(
@https://developer.android.com/reference/androidx/media3/common/util/UnknownNull T childSourceId,
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId
)`

**This method is deprecated.** Deprecated in Java
`long` `[getMediaTimeForChildMediaTime](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#getMediaTimeForChildMediaTime(T,long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))(
@https://developer.android.com/reference/androidx/media3/common/util/UnknownNull T childSourceId,
long mediaTimeMs,
@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId
)`

**This method is deprecated.** Deprecated in Java
`int` `[getWindowIndexForChildWindowIndex](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#getWindowIndexForChildWindowIndex(T,int))(
@https://developer.android.com/reference/androidx/media3/common/util/UnknownNull T childSourceId,
int windowIndex
)`

**This method is deprecated.** Deprecated in Java
`void` `@https://developer.android.com/reference/androidx/annotation/CallSuper
[maybeThrowSourceInfoRefreshError](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#maybeThrowSourceInfoRefreshError())()`

**This method is deprecated.** Deprecated in Java
`abstract void` `[onChildSourceInfoRefreshed](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#onChildSourceInfoRefreshed(T,androidx.media3.exoplayer.source.MediaSource,androidx.media3.common.Timeline))(
@https://developer.android.com/reference/androidx/media3/common/util/UnknownNull T childSourceId,
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource,
https://developer.android.com/reference/androidx/media3/common/Timeline newTimeline
)`

**This method is deprecated.** Deprecated in Java
`final void` `[prepareChildSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#prepareChildSource(T,androidx.media3.exoplayer.source.MediaSource))(@https://developer.android.com/reference/androidx/media3/common/util/UnknownNull T id, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource)`

**This method is deprecated.** Deprecated in Java
`final void` `[releaseChildSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#releaseChildSource(T))(@https://developer.android.com/reference/androidx/media3/common/util/UnknownNull T id)`

**This method is deprecated.** Deprecated in Java
`void` `@https://developer.android.com/reference/androidx/annotation/CallSuper
[releaseSourceInternal](https://developer.android.com/reference/androidx/media3/exoplayer/source/CompositeMediaSource#releaseSourceInternal())()`

**This method is deprecated.** Deprecated in Java
From [androidx.media3.exoplayer.source.MediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource) `void` `@https://developer.android.com/reference/androidx/media3/common/util/UnstableApi
[prepareSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource#prepareSource(androidx.media3.exoplayer.source.MediaSource.MediaSourceCaller,androidx.media3.datasource.TransferListener,androidx.media3.exoplayer.analytics.PlayerId))(
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaSourceCaller caller,
@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/TransferListener mediaTransferListener,
https://developer.android.com/reference/androidx/media3/exoplayer/analytics/PlayerId playerId
)`

**This method is deprecated.**

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

<br />

From [androidx.media3.exoplayer.source.WrappingMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource) `boolean` `[canUpdateMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#canUpdateMediaItem(androidx.media3.common.MediaItem))(https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem)`

**This method is deprecated.** Deprecated in Java
`final void` `[disableChildSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#disableChildSource())()`

**This method is deprecated.** Deprecated in Java
`final void` `[enableChildSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#enableChildSource())()`

**This method is deprecated.** Deprecated in Java
`https://developer.android.com/reference/androidx/media3/common/MediaItem` `[getMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#getMediaItem())()`

**This method is deprecated.** Deprecated in Java
`final @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` `[getMediaPeriodIdForChildMediaPeriodId](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#getMediaPeriodIdForChildMediaPeriodId(java.lang.Void,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))(
https://developer.android.com/reference/java/lang/Void.html childSourceId,
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId
)`

**This method is deprecated.** Deprecated in Java
`long` `[getMediaTimeForChildMediaTime](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#getMediaTimeForChildMediaTime(long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))(
long mediaTimeMs,
@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId
)`

**This method is deprecated.** Deprecated in Java
`final long` `[getMediaTimeForChildMediaTime](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#getMediaTimeForChildMediaTime(java.lang.Void,long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))(
https://developer.android.com/reference/java/lang/Void.html childSourceId,
long mediaTimeMs,
@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId
)`

**This method is deprecated.** Deprecated in Java
`int` `[getWindowIndexForChildWindowIndex](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#getWindowIndexForChildWindowIndex(int))(int windowIndex)`

**This method is deprecated.** Deprecated in Java
`final int` `[getWindowIndexForChildWindowIndex](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#getWindowIndexForChildWindowIndex(java.lang.Void,int))(https://developer.android.com/reference/java/lang/Void.html childSourceId, int windowIndex)`

**This method is deprecated.** Deprecated in Java
`final void` `[onChildSourceInfoRefreshed](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#onChildSourceInfoRefreshed(java.lang.Void,androidx.media3.exoplayer.source.MediaSource,androidx.media3.common.Timeline))(
https://developer.android.com/reference/java/lang/Void.html childSourceId,
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource,
https://developer.android.com/reference/androidx/media3/common/Timeline newTimeline
)`

**This method is deprecated.** Deprecated in Java
`final void` `[prepareChildSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#prepareChildSource())()`

**This method is deprecated.** Deprecated in Java
`void` `[prepareSourceInternal](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#prepareSourceInternal())()`

**This method is deprecated.** Deprecated in Java
`final void` `[prepareSourceInternal](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#prepareSourceInternal(androidx.media3.datasource.TransferListener))(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/TransferListener mediaTransferListener)`

**This method is deprecated.** Deprecated in Java
`final void` `[releaseChildSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#releaseChildSource())()`

**This method is deprecated.** Deprecated in Java
`void` `[updateMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/source/WrappingMediaSource#updateMediaItem(androidx.media3.common.MediaItem))(https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem)`

**This method is deprecated.** Deprecated in Java

## Public constructors

### LoopingMediaSource

```
public [LoopingMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#LoopingMediaSource(androidx.media3.exoplayer.source.MediaSource))(MediaSource childSource)
```

> [!CAUTION]
> **This method is deprecated.**   
> Deprecated in Java

Loops the provided source indefinitely. Note that it is usually better to use `https://developer.android.com/reference/androidx/media3/common/Player#setRepeatMode(int)`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource childSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` to loop. |

### LoopingMediaSource

```
public [LoopingMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#LoopingMediaSource(androidx.media3.exoplayer.source.MediaSource,int))(MediaSource childSource, int loopCount)
```

> [!CAUTION]
> **This method is deprecated.**   
> Deprecated in Java

Loops the provided source a specified number of times.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource childSource` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` to loop. |
| `int loopCount` | The desired number of loops. Must be strictly positive. |

## Public methods

### createPeriod

```
public MediaPeriod [createPeriod](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#createPeriod(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.upstream.Allocator,long))(
    MediaSource.MediaPeriodId id,
    Allocator allocator,
    long startPositionUs
)
```

> [!CAUTION]
> **This method is deprecated.**   
> Deprecated in Java

Creates the requested `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`.

This method typically forwards to the wrapped media source and optionally wraps the returned `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`.

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource#createPeriod(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.upstream.Allocator,long)` |   |

### getInitialTimeline

```
public @Nullable Timeline [getInitialTimeline](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#getInitialTimeline())()
```

> [!CAUTION]
> **This method is deprecated.**   
> Deprecated in Java

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.

### isSingleWindow

```
public boolean [isSingleWindow](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#isSingleWindow())()
```

> [!CAUTION]
> **This method is deprecated.**   
> Deprecated in Java

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 |
|---|---|
| `boolean` | true if the source has exactly one window. |

### releasePeriod

```
public void [releasePeriod](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#releasePeriod(androidx.media3.exoplayer.source.MediaPeriod))(MediaPeriod mediaPeriod)
```

> [!CAUTION]
> **This method is deprecated.**   
> Deprecated in Java

Releases a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`.

This method typically forwards to the wrapped media source and optionally unwraps the provided `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`.

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource#releasePeriod(androidx.media3.exoplayer.source.MediaPeriod)` |   |

## Protected methods

### getMediaPeriodIdForChildMediaPeriodId

```
protected @Nullable MediaSource.MediaPeriodId [getMediaPeriodIdForChildMediaPeriodId](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#getMediaPeriodIdForChildMediaPeriodId(androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))(
    MediaSource.MediaPeriodId mediaPeriodId
)
```

> [!CAUTION]
> **This method is deprecated.**   
> Deprecated in Java

Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` in the wrapping source corresponding to the specified `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` in a child source. The default implementation does not change the media period id.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | A `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` of the child source. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` | The corresponding `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` in the wrapping source. Null if no corresponding media period id can be determined. |

### onChildSourceInfoRefreshed

```
protected void [onChildSourceInfoRefreshed](https://developer.android.com/reference/androidx/media3/exoplayer/source/LoopingMediaSource#onChildSourceInfoRefreshed(androidx.media3.common.Timeline))(Timeline newTimeline)
```

> [!CAUTION]
> **This method is deprecated.**   
> Deprecated in Java

Called when the child source info has been refreshed.

This `https://developer.android.com/reference/androidx/media3/common/Timeline` can be amended if needed, for example using `https://developer.android.com/reference/androidx/media3/exoplayer/source/ForwardingTimeline`. The `https://developer.android.com/reference/androidx/media3/common/Timeline` for the wrapping source needs to be published with `https://developer.android.com/reference/androidx/media3/exoplayer/source/BaseMediaSource#refreshSourceInfo(androidx.media3.common.Timeline)`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Timeline newTimeline` | The timeline of the child source. |