# ServerSideAdInsertionUtil

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

*** ** * ** ***


```
@UnstableApi
public final class ServerSideAdInsertionUtil
```

<br />

*** ** * ** ***

A static utility class with methods to work with server-side inserted ads.

## Summary

| ### Public methods |
|---|---|
| `static https://developer.android.com/reference/androidx/media3/common/AdPlaybackState` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionUtil#addAdGroupToAdPlaybackState(androidx.media3.common.AdPlaybackState,long,long,long...)( https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState, long fromPositionUs, long contentResumeOffsetUs, long[] adDurationsUs )` Adds a new server-side inserted ad group to an `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState`. |
| `static int` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionUtil#getAdCountInGroup(androidx.media3.common.AdPlaybackState,int)(https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState, int adGroupIndex)` Returns the number of ads in an ad group, treating an unknown number as zero ads. |
| `static long` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionUtil#getMediaPeriodPositionUs(long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.common.AdPlaybackState)( long positionUs, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId, https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState )` Returns the position in a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod` for a position in the underlying server-side inserted ads stream. |
| `static long` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionUtil#getMediaPeriodPositionUsForAd(long,int,int,androidx.media3.common.AdPlaybackState)( long positionUs, int adGroupIndex, int adIndexInAdGroup, https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState )` Returns the position in an ad `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod` for a position in the underlying server-side inserted ads stream. |
| `static long` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionUtil#getMediaPeriodPositionUsForContent(long,int,androidx.media3.common.AdPlaybackState)( long positionUs, int nextAdGroupIndex, https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState )` Returns the position in a content `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod` for a position in the underlying server-side inserted ads stream. |
| `static long` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionUtil#getStreamPositionUs(androidx.media3.common.Player,java.lang.Object)(https://developer.android.com/reference/androidx/media3/common/Player player, https://developer.android.com/reference/java/lang/Object.html adsId)` Returns the position in the underlying server-side inserted ads stream of the given ads ID for the current playback position in the `https://developer.android.com/reference/androidx/media3/common/Player`. |
| `static long` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionUtil#getStreamPositionUs(long,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.common.AdPlaybackState)( long positionUs, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId, https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState )` Returns the position in the underlying server-side inserted ads stream for a position in a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`. |
| `static long` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionUtil#getStreamPositionUsForAd(long,int,int,androidx.media3.common.AdPlaybackState)( long positionUs, int adGroupIndex, int adIndexInAdGroup, https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState )` Returns the position in the underlying server-side inserted ads stream for a position in an ad `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`. |
| `static long` | `https://developer.android.com/reference/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionUtil#getStreamPositionUsForContent(long,int,androidx.media3.common.AdPlaybackState)( long positionUs, int nextAdGroupIndex, https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState )` Returns the position in the underlying server-side inserted ads stream for a position in a content `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`. |

## Public methods

### addAdGroupToAdPlaybackState

```
public static AdPlaybackState addAdGroupToAdPlaybackState(
    AdPlaybackState adPlaybackState,
    long fromPositionUs,
    long contentResumeOffsetUs,
    long[] adDurationsUs
)
```

Adds a new server-side inserted ad group to an `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState`.

If the first ad with a non-zero duration is not the first ad in the group, all ads before that ad are marked as skipped.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState` | The existing `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState`. |
| `long fromPositionUs` | The position in the underlying server-side inserted ads stream at which the ad group starts, in microseconds. |
| `long contentResumeOffsetUs` | The timestamp offset which should be added to the content stream when resuming playback after the ad group. An offset of 0 collapses the ad group to a single insertion point, an offset of `toPositionUs-fromPositionUs` keeps the original stream timestamps after the ad group. |
| `long[] adDurationsUs` | The durations of the ads to be added to the group, in microseconds. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState` | The updated `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState`. |

### getAdCountInGroup

```
public static int getAdCountInGroup(AdPlaybackState adPlaybackState, int adGroupIndex)
```

Returns the number of ads in an ad group, treating an unknown number as zero ads.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState` | The `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState`. |
| `int adGroupIndex` | The index of the ad group. |

| Returns |
|---|---|
| `int` | The number of ads in the ad group. |

### getMediaPeriodPositionUs

```
public static long getMediaPeriodPositionUs(
    long positionUs,
    MediaSource.MediaPeriodId mediaPeriodId,
    AdPlaybackState adPlaybackState
)
```

Returns the position in a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod` for a position in the underlying server-side inserted ads stream.

| Parameters |
|---|---|
| `long positionUs` | The position in the underlying server-side inserted ads stream, in microseconds. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` of the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`. |
| `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState` | The `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState` defining the ad groups. |

| Returns |
|---|---|
| `long` | The position in the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`, in microseconds. |

### getMediaPeriodPositionUsForAd

```
public static long getMediaPeriodPositionUsForAd(
    long positionUs,
    int adGroupIndex,
    int adIndexInAdGroup,
    AdPlaybackState adPlaybackState
)
```

Returns the position in an ad `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod` for a position in the underlying server-side inserted ads stream.

| Parameters |
|---|---|
| `long positionUs` | The position in the underlying server-side inserted ads stream, in microseconds. |
| `int adGroupIndex` | The ad group index of the ad. |
| `int adIndexInAdGroup` | The index of the ad in the ad group. |
| `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState` | The `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState` defining the ad groups. |

| Returns |
|---|---|
| `long` | The position in the ad `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`, in microseconds. |

### getMediaPeriodPositionUsForContent

```
public static long getMediaPeriodPositionUsForContent(
    long positionUs,
    int nextAdGroupIndex,
    AdPlaybackState adPlaybackState
)
```

Returns the position in a content `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod` for a position in the underlying server-side inserted ads stream.

| Parameters |
|---|---|
| `long positionUs` | The position in the underlying server-side inserted ads stream, in microseconds. |
| `int nextAdGroupIndex` | The next ad group index after the content, or `https://developer.android.com/reference/androidx/media3/common/C#INDEX_UNSET()` if there is no following ad group. Ad groups from this index are not used to adjust the position. |
| `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState` | The `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState` defining the ad groups. |

| Returns |
|---|---|
| `long` | The position in the content `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`, in microseconds. |

### getStreamPositionUs

```
public static long getStreamPositionUs(Player player, Object adsId)
```

Returns the position in the underlying server-side inserted ads stream of the given ads ID for the current playback position in the `https://developer.android.com/reference/androidx/media3/common/Player`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Player player` | The `https://developer.android.com/reference/androidx/media3/common/Player`. |
| `https://developer.android.com/reference/java/lang/Object.html adsId` | The ads ID of the period for which to get the stream position. |

| Returns |
|---|---|
| `long` | The position in the underlying server-side inserted ads stream, in microseconds, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if it can't be determined. |

### getStreamPositionUs

```
public static long getStreamPositionUs(
    long positionUs,
    MediaSource.MediaPeriodId mediaPeriodId,
    AdPlaybackState adPlaybackState
)
```

Returns the position in the underlying server-side inserted ads stream for a position in a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`.

| Parameters |
|---|---|
| `long positionUs` | The position in the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`, in microseconds. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` of the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`. |
| `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState` | The `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState` defining the ad groups. |

| Returns |
|---|---|
| `long` | The position in the underlying server-side inserted ads stream, in microseconds. |

### getStreamPositionUsForAd

```
public static long getStreamPositionUsForAd(
    long positionUs,
    int adGroupIndex,
    int adIndexInAdGroup,
    AdPlaybackState adPlaybackState
)
```

Returns the position in the underlying server-side inserted ads stream for a position in an ad `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`.

| Parameters |
|---|---|
| `long positionUs` | The position in the ad `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`, in microseconds. |
| `int adGroupIndex` | The ad group index of the ad. |
| `int adIndexInAdGroup` | The index of the ad in the ad group. |
| `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState` | The `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState` defining the ad groups. |

| Returns |
|---|---|
| `long` | The position in the underlying server-side inserted ads stream, in microseconds. |

### getStreamPositionUsForContent

```
public static long getStreamPositionUsForContent(
    long positionUs,
    int nextAdGroupIndex,
    AdPlaybackState adPlaybackState
)
```

Returns the position in the underlying server-side inserted ads stream for a position in a content `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`.

| Parameters |
|---|---|
| `long positionUs` | The position in the content `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaPeriod`, in microseconds. |
| `int nextAdGroupIndex` | The next ad group index after the content, or `https://developer.android.com/reference/androidx/media3/common/C#INDEX_UNSET()` if there is no following ad group. Ad groups from this index are not used to adjust the position. |
| `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState adPlaybackState` | The `https://developer.android.com/reference/androidx/media3/common/AdPlaybackState` defining the ad groups. |

| Returns |
|---|---|
| `long` | The position in the underlying server-side inserted ads stream, in microseconds. |