# DrmSessionEventListener

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

*** ** * ** ***


```
@UnstableApi
public interface DrmSessionEventListener
```

<br />

Known direct subclasses [AnalyticsCollector](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsCollector), [ServerSideAdInsertionMediaSource](https://developer.android.com/reference/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSource)

|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsCollector` | Interface for data collectors that forward analytics events to `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/ads/ServerSideAdInsertionMediaSource` | A `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` for server-side inserted ad breaks. |

Known indirect subclasses [DefaultAnalyticsCollector](https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultAnalyticsCollector)

|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/DefaultAnalyticsCollector` | Data collector that forwards analytics events to `https://developer.android.com/reference/androidx/media3/exoplayer/analytics/AnalyticsListener`. |

*** ** * ** ***

Listener of `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManager` events.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher` Dispatches events to `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener`. |

| ### Public methods |
|---|---|
| `default void` | `[onDrmKeysLoaded](https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener#onDrmKeysLoaded(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.** Implement `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener#onDrmKeysLoaded(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.drm.KeyRequestInfo)` instead <br /> |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener#onDrmKeysLoaded(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.drm.KeyRequestInfo)( int windowIndex, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId, https://developer.android.com/reference/androidx/media3/exoplayer/drm/KeyRequestInfo keyRequestInfo )` Called each time keys are loaded. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener#onDrmKeysRemoved(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 )` Called each time offline keys are removed. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener#onDrmKeysRestored(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 )` Called each time offline keys are restored. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener#onDrmSessionAcquired(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,int)( int windowIndex, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId, @https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSession.State int state )` Called each time a drm session is acquired. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener#onDrmSessionManagerError(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,java.lang.Exception)( int windowIndex, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId, https://developer.android.com/reference/java/lang/Exception.html error )` Called when a drm error occurs. |
| `default void` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener#onDrmSessionReleased(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 )` Called each time a drm session is released. |

## Public methods

### onDrmKeysLoaded

```
default void [onDrmKeysLoaded](https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener#onDrmKeysLoaded(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId))(
    int windowIndex,
    @Nullable MediaSource.MediaPeriodId mediaPeriodId
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Implement `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener#onDrmKeysLoaded(int,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.exoplayer.drm.KeyRequestInfo)` instead

### onDrmKeysLoaded

```
default void onDrmKeysLoaded(
    int windowIndex,
    @Nullable MediaSource.MediaPeriodId mediaPeriodId,
    KeyRequestInfo keyRequestInfo
)
```

Called each time keys are loaded.

| Parameters |
|---|---|
| `int windowIndex` | The window index in the timeline this media period belongs to. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` associated with the drm session. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/KeyRequestInfo keyRequestInfo` | The `https://developer.android.com/reference/androidx/media3/exoplayer/drm/KeyRequestInfo` with load info for the drm server requests |

### onDrmKeysRemoved

```
default void onDrmKeysRemoved(
    int windowIndex,
    @Nullable MediaSource.MediaPeriodId mediaPeriodId
)
```

Called each time offline keys are removed.

| Parameters |
|---|---|
| `int windowIndex` | The window index in the timeline this media period belongs to. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` associated with the drm session. |

### onDrmKeysRestored

```
default void onDrmKeysRestored(
    int windowIndex,
    @Nullable MediaSource.MediaPeriodId mediaPeriodId
)
```

Called each time offline keys are restored.

| Parameters |
|---|---|
| `int windowIndex` | The window index in the timeline this media period belongs to. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` associated with the drm session. |

### onDrmSessionAcquired

```
default void onDrmSessionAcquired(
    int windowIndex,
    @Nullable MediaSource.MediaPeriodId mediaPeriodId,
    @DrmSession.State int state
)
```

Called each time a drm session is acquired.

| Parameters |
|---|---|
| `int windowIndex` | The window index in the timeline this media period belongs to. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` associated with the drm session. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSession.State int state` | The `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSession.State` of the session when the acquisition completed. |

### onDrmSessionManagerError

```
default void onDrmSessionManagerError(
    int windowIndex,
    @Nullable MediaSource.MediaPeriodId mediaPeriodId,
    Exception error
)
```

Called when a drm error occurs.

This method being called does not indicate that playback has failed, or that it will fail. The player may be able to recover from the error and continue. Hence applications should *not* implement this method to display a user visible error or initiate an application level retry (`https://developer.android.com/reference/androidx/media3/common/Player.Listener#onPlayerError(androidx.media3.common.PlaybackException)` is the appropriate place to implement such behavior). This method is called to provide the application with an opportunity to log the error if it wishes to do so.

| Parameters |
|---|---|
| `int windowIndex` | The window index in the timeline this media period belongs to. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` associated with the drm session. |
| `https://developer.android.com/reference/java/lang/Exception.html error` | The corresponding exception. |

### onDrmSessionReleased

```
default void onDrmSessionReleased(
    int windowIndex,
    @Nullable MediaSource.MediaPeriodId mediaPeriodId
)
```

Called each time a drm session is released.

| Parameters |
|---|---|
| `int windowIndex` | The window index in the timeline this media period belongs to. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` associated with the drm session. |