# OfflineLicenseHelper

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

*** ** * ** ***


```
@UnstableApi
public final class OfflineLicenseHelper
```

<br />

*** ** * ** ***

Helper class to download, renew and release offline licenses.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#OfflineLicenseHelper(androidx.media3.exoplayer.drm.DefaultDrmSessionManager,androidx.media3.exoplayer.drm.DrmSessionEventListener.EventDispatcher)( https://developer.android.com/reference/androidx/media3/exoplayer/drm/DefaultDrmSessionManager defaultDrmSessionManager, https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher eventDispatcher )` Constructs an instance. |

| ### Public methods |
|---|---|
| `synchronized byte[]` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#downloadLicense(androidx.media3.common.Format)(https://developer.android.com/reference/androidx/media3/common/Format format)` Downloads an offline license. |
| `synchronized https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/java/lang/Long.html, https://developer.android.com/reference/java/lang/Long.html>` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#getLicenseDurationRemainingSec(byte[])(byte[] offlineLicenseKeySetId)` Returns the remaining license and playback durations in seconds, for an offline license. |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#newWidevineInstance(java.lang.String,androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.drm.DrmSessionEventListener.EventDispatcher)( https://developer.android.com/reference/java/lang/String.html defaultLicenseUrl, https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher eventDispatcher )` Instantiates a new instance which uses Widevine CDM. |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#newWidevineInstance(androidx.media3.common.MediaItem.DrmConfiguration,androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.drm.DrmSessionEventListener.EventDispatcher)( https://developer.android.com/reference/androidx/media3/common/MediaItem.DrmConfiguration drmConfiguration, https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher eventDispatcher )` Instantiates a new instance which uses Widevine CDM. |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#newWidevineInstance(java.lang.String,boolean,androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.drm.DrmSessionEventListener.EventDispatcher)( https://developer.android.com/reference/java/lang/String.html defaultLicenseUrl, boolean forceDefaultLicenseUrl, https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher eventDispatcher )` Instantiates a new instance which uses Widevine CDM. |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#newWidevineInstance(java.lang.String,boolean,androidx.media3.datasource.DataSource.Factory,java.util.Map<java.lang.String,java.lang.String>,androidx.media3.exoplayer.drm.DrmSessionEventListener.EventDispatcher)( https://developer.android.com/reference/java/lang/String.html defaultLicenseUrl, boolean forceDefaultLicenseUrl, https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/util/Map.html<https://developer.android.com/reference/java/lang/String.html, https://developer.android.com/reference/java/lang/String.html> optionalKeyRequestParameters, https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher eventDispatcher )` Instantiates a new instance which uses Widevine CDM. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#release()()` Releases the helper. |
| `synchronized void` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#releaseLicense(byte[])(byte[] offlineLicenseKeySetId)` Releases an offline license. |
| `synchronized byte[]` | `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#renewLicense(byte[])(byte[] offlineLicenseKeySetId)` Renews an offline license. |

## Public constructors

### OfflineLicenseHelper

```
public OfflineLicenseHelper(
    DefaultDrmSessionManager defaultDrmSessionManager,
    DrmSessionEventListener.EventDispatcher eventDispatcher
)
```

Constructs an instance. Call `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#release()` when the instance is no longer required.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DefaultDrmSessionManager defaultDrmSessionManager` | The `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DefaultDrmSessionManager` used to download licenses. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher eventDispatcher` | A `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher` used to distribute DRM-related events. |

## Public methods

### downloadLicense

```
synchronized public byte[] downloadLicense(Format format)
```

Downloads an offline license.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Format format` | The `https://developer.android.com/reference/androidx/media3/common/Format` of the content whose license is to be downloaded. Must contain a non-null `https://developer.android.com/reference/androidx/media3/common/Format#drmInitData()`. |

| Returns |
|---|---|
| `byte[]` | The key set id for the downloaded license. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSession.DrmSessionException` | Thrown when a DRM session error occurs. |

### getLicenseDurationRemainingSec

```
synchronized public Pair<Long, Long> getLicenseDurationRemainingSec(byte[] offlineLicenseKeySetId)
```

Returns the remaining license and playback durations in seconds, for an offline license.

| Parameters |
|---|---|
| `byte[] offlineLicenseKeySetId` | The key set id of the license. |

| Returns |
|---|---|
| `https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/java/lang/Long.html, https://developer.android.com/reference/java/lang/Long.html>` | The remaining license and playback durations, in seconds. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSession.DrmSessionException` | Thrown when a DRM session error occurs. |

### newWidevineInstance

```
public static OfflineLicenseHelper newWidevineInstance(
    String defaultLicenseUrl,
    DataSource.Factory dataSourceFactory,
    DrmSessionEventListener.EventDispatcher eventDispatcher
)
```

Instantiates a new instance which uses Widevine CDM. Call `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#release()` when the instance is no longer required.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html defaultLicenseUrl` | The default license URL. Used for key requests that do not specify their own license URL. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory` | A factory from which to obtain `https://developer.android.com/reference/androidx/media3/datasource/DataSource` instances. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher eventDispatcher` | A `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher` used to distribute DRM-related events. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper` | A new instance which uses Widevine CDM. |

### newWidevineInstance

```
public static OfflineLicenseHelper newWidevineInstance(
    MediaItem.DrmConfiguration drmConfiguration,
    DataSource.Factory dataSourceFactory,
    DrmSessionEventListener.EventDispatcher eventDispatcher
)
```

Instantiates a new instance which uses Widevine CDM. Call `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#release()` when the instance is no longer required.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/MediaItem.DrmConfiguration drmConfiguration` | The `https://developer.android.com/reference/androidx/media3/common/MediaItem.DrmConfiguration` specifying the request details. Must use `https://developer.android.com/reference/androidx/media3/common/C#WIDEVINE_UUID()` as `https://developer.android.com/reference/androidx/media3/common/MediaItem.DrmConfiguration#scheme()` and contain a non-null `https://developer.android.com/reference/androidx/media3/common/MediaItem.DrmConfiguration#licenseUri()`. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory` | A factory from which to obtain `https://developer.android.com/reference/androidx/media3/datasource/DataSource` instances. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher eventDispatcher` | A `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher` used to distribute DRM-related events. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper` | A new instance which uses Widevine CDM. |

### newWidevineInstance

```
public static OfflineLicenseHelper newWidevineInstance(
    String defaultLicenseUrl,
    boolean forceDefaultLicenseUrl,
    DataSource.Factory dataSourceFactory,
    DrmSessionEventListener.EventDispatcher eventDispatcher
)
```

Instantiates a new instance which uses Widevine CDM. Call `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#release()` when the instance is no longer required.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html defaultLicenseUrl` | The default license URL. Used for key requests that do not specify their own license URL. |
| `boolean forceDefaultLicenseUrl` | Whether to use `defaultLicenseUrl` for key requests that include their own license URL. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory` | A factory from which to obtain `https://developer.android.com/reference/androidx/media3/datasource/DataSource` instances. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher eventDispatcher` | A `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher` used to distribute DRM-related events. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper` | A new instance which uses Widevine CDM. |

### newWidevineInstance

```
public static OfflineLicenseHelper newWidevineInstance(
    String defaultLicenseUrl,
    boolean forceDefaultLicenseUrl,
    DataSource.Factory dataSourceFactory,
    @Nullable Map<String, String> optionalKeyRequestParameters,
    DrmSessionEventListener.EventDispatcher eventDispatcher
)
```

Instantiates a new instance which uses Widevine CDM. Call `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper#release()` when the instance is no longer required.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html defaultLicenseUrl` | The default license URL. Used for key requests that do not specify their own license URL. |
| `boolean forceDefaultLicenseUrl` | Whether to use `defaultLicenseUrl` for key requests that include their own license URL. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory` | A factory from which to obtain `https://developer.android.com/reference/androidx/media3/datasource/DataSource` instances. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/util/Map.html<https://developer.android.com/reference/java/lang/String.html, https://developer.android.com/reference/java/lang/String.html> optionalKeyRequestParameters` | An optional map of parameters to pass as the last argument to `https://developer.android.com/reference/android/media/MediaDrm.html#getKeyRequest(byte[], byte[], java.lang.String, int, java.util.HashMap&lt;java.lang.String,java.lang.String&gt;)`. May be null. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher eventDispatcher` | A `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionEventListener.EventDispatcher` used to distribute DRM-related events. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/OfflineLicenseHelper` | A new instance which uses Widevine CDM. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DefaultDrmSessionManager.Builder` |   |

### release

```
public void release()
```

Releases the helper. Should be called when the helper is no longer required.

### releaseLicense

```
synchronized public void releaseLicense(byte[] offlineLicenseKeySetId)
```

Releases an offline license.

| Parameters |
|---|---|
| `byte[] offlineLicenseKeySetId` | The key set id of the license to be released. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSession.DrmSessionException` | Thrown when a DRM session error occurs. |

### renewLicense

```
synchronized public byte[] renewLicense(byte[] offlineLicenseKeySetId)
```

Renews an offline license.

| Parameters |
|---|---|
| `byte[] offlineLicenseKeySetId` | The key set id of the license to be renewed. |

| Returns |
|---|---|
| `byte[]` | The renewed offline license key set id. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSession.DrmSessionException` | Thrown when a DRM session error occurs. |