> This page is for mk.io.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://mediakind.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://mediakind.ferndocs.com/_mcp/server.

# Multi-DRM Encryption

Multi-DRM encryption protects your streams with industry-standard DRM systems so that content plays securely across all major browsers and devices. MK.IO supports two multi-DRM configurations: full multi-DRM (Widevine + PlayReady + FairPlay) and CENC-only (Widevine + PlayReady).

## Prerequisites

* A running streaming endpoint.

* An asset verified to play without encryption using `Predefined_ClearStreamingOnly`.

* For FairPlay: an Apple FairPlay Streaming certificate, password, and application secret key.

## Choose your configuration

| Configuration  | Streaming policy                   | Required schemes                | Use when                                                                            |
| -------------- | ---------------------------------- | ------------------------------- | ----------------------------------------------------------------------------------- |
| Full multi-DRM | `Predefined_MultiDrmStreaming`     | Widevine + PlayReady + FairPlay | You need to support all platforms, including Safari and Apple devices.              |
| CENC multi-DRM | `Predefined_MultiDrmCencStreaming` | Widevine + PlayReady            | You do not need FairPlay support. Covers Chrome, Edge, Android, and most smart TVs. |

The streaming policy enforces which DRM schemes must be present in the content key policy. A `Predefined_MultiDrmStreaming` locator fails if the policy does not include all three schemes. A `Predefined_MultiDrmCencStreaming` locator fails if it does not include both Widevine and PlayReady.

## Full multi-DRM with JWT tokens

This example creates a content key policy with Widevine, PlayReady, and FairPlay, all protected by JWT token authentication.

### Create the content key policy

* Navigate to Content Key Policies and select Create Content Key Policy.

* Enter a name (for example, `multidrm-jwt`) and optional description.

* Select Add in the Digital Rights Management section.

### Add Widevine

* Select Add Widevine.

* Enter a policy option name.

* Under Use token restriction, select Yes.

* Configure the token fields:

Token type: `JWT`

* Issuer: your chosen issuer string.

* Audience: your chosen audience string.

* Primary verification key: your Base64-encoded key.

* Leave Widevine template as `{}` unless you need a custom template.

* Select Add.

### Add PlayReady

* Select Add PlayReady.

* Enter a policy option name.

* Under Use token restriction, select Yes.

* Enter the same issuer, audience, and primary verification key as Widevine.

* Leave the PlayReady-specific options at their defaults unless you need custom settings.

* Select Add.

### Add FairPlay

* Select Add FairPlay.

* Enter a policy option name.

* Under Use token restriction, select Yes.

* Enter the same issuer, audience, and primary verification key as the other schemes.

* Provide your Apple FairPlay certificate, password, and application secret key.

* Select Add.

### Create the policy

Select **Create**. The policy now includes all three DRM schemes with JWT protection.

### Generate a JWT token

Follow the [JWT token authentication guide](/mkio/how-to/drm-content-protection/jwt-token-authentication) to generate a token using the issuer, audience, and primary verification key you configured.

### Create a streaming locator

* Navigate to your asset and select Add streaming locator.

* Enter a name.

* Set Streaming policy to `Predefined_MultiDrmStreaming`.

* Set Content key policy to the multi-DRM policy you created.

* Select Add, then select the locator and select Apply.

MK.IO generates playback URLs and license acquisition URLs for each DRM system.

### Test playback

See [Test DRM playback](/mkio/how-to/drm-content-protection/test-drm-playback) for instructions on testing with MKPlayer.

## CENC multi-DRM without tokens

This example creates a content key policy with Widevine and PlayReady only, with no token restriction. Use this for scenarios where token-based authentication is handled elsewhere or is not required.

### Create the content key policy

* Navigate to Content Key Policies and select Create Content Key Policy.

* Enter a name (for example, `multidrm-cenc-open`) and optional description.

* Select Add in the Digital Rights Management section.

### Add Widevine

* Select Add Widevine.

* Enter a policy option name.

* Under Use token restriction, select No.

* Leave Widevine template as `{}`.

* Select Add.

### Add PlayReady

* Select Add PlayReady.

* Enter a policy option name.

* Under Use token restriction, select No.

* Leave PlayReady options at defaults.

* Select Add.

### Create the policy and streaming locator

* Select Create to save the policy.

* Navigate to your asset and select Add streaming locator.

* Set Streaming policy to `Predefined_MultiDrmCencStreaming`.

* Set Content key policy to the CENC policy you created.

* Select Add, then select the locator and select Apply.

### Test playback

* Navigate to the MKPlayer page.

* Select DASH as the protocol and Widevine as the DRM.

* Paste the DASH playback URL in Source URL.

* Paste the Widevine license acquisition URL in License URL.

* Select Play.