<img src="https://img.shields.io/badge/%20-ENTERPRISE-%23B10031" style="float:left"/><br />

ο»Ώ

This article explains the policies that are available when you have **Studio DRM with JW Platform** enabled for one of your sites. Read <a href="https://developer.jwplayer.com/jwplayer/docs/studio-drm-getting-started" target="_blank">Getting started</a> to learn about the benefits of this product and how to properly enable it to protect your content.

If you are using **Studio DRM Standalone**, please refer to [DRM Policy Examples](πŸ”—ο»Ώ) for DRM policy guidance.

<br />

After creating a property in your dashboard that is enabled with Studio DRM with JW Platform, several default DRM policies are created that can be applied during playback of your DRM-protected content. A DRM policy specifies the playback restrictions that licenses with this policy will enforce on a DRM video asset.

<br /> <hr />

## About Minimum Security Levels

Minimum security levels are only supported in Widevine and PlayReady DRMs. This section does not apply to Apple FairPlay DRM, which has no security levels.

In general, policies with high minimum security levels only permit playback if the device has a content decryption module (CDM) that runs in a hardware <a href="https://en.wikipedia.org/wiki/Trusted_execution_environment" target="_blank">Trusted Execution Environment</a> (TEE). In DRM, these are known as "high robustness" devices and can prevent things like access to decrypted video frames in device memory.

Lower security levels will play on devices with software CDMs (low robustness devices) as well as hardware CDMs.

The high minimum levels in Widevine (often called "Widevine L1") are `HW_SECURE_ALL` and `HW_SECURE_DECODE`. The high minimum level in PlayReady is `3000`. Policies using these levels will not play in low robustness devices such as computer web browsers.

You will likely need to experiment with various security levels to find the right mix of device playback support and security.

<br /> <hr />

## Default DRM Policies

The default DRM policies are listed and explained below with intended use cases:

<details><summary><strong>Low</strong></summary>

<br />

Intended for desktop & laptop computers with software CDMs and digital output of your content is allowed without HDCP protection. This policy limits playback to SD and lower resolution content. This policy is compatible with the widest range of playback devices, but is the least secure.

</details> <details><summary><strong>Medium</strong></summary>

<br />

Intended for desktop & laptop computers where the digital output of your content must be protected by <a href="https://en.wikipedia.org/wiki/High-bandwidth_Digital_Content_Protection" target="_blank">HDCP</a>. This policy limits playback to 720p and lower resolution content and enforces HDCP. Playback with this policy will fail if the device does not support at least HDCP v1.x.

</details> <details><summary><strong>High</strong></summary>

<br />

Intended for devices with a hardware <a href="https://en.wikipedia.org/wiki/Trusted_execution_environment" target="_blank">TEE</a>, such as phones, tablets, and connected TV devices. This policy limits playback to 1080p and lower resolution content and enforces HDCP. Playback with this policy will fail in most desktop browsers as well as mobile browsers that default to a software CDM (such as Android Chrome).

</details> <details><summary><strong>Highest</strong></summary>

<br />

Intended for native applications content on devices with a hardware <a href="https://en.wikipedia.org/wiki/Trusted_execution_environment" target="_blank">TEE</a> and advanced HDCP. This policy limits playback to 3840p and lower resolution content and requires minimum HDCP v2.2. This policy is very restrictive, so playback will only succeed on advanced devices such as Roku and premium smartphones.

</details> <details><summary><strong>Offline</strong></summary>

<br />

Intended for native mobile applications that allow offline playback of downloaded media. This default policy is the same as the **High** policy with the addition of the offline playback setting that allows content to be stored and played offline.

</details>

<br />

<span class="studio-drm-tbl-font">

Column Titleο»Ώ
HighestHighMediumLowOffline
**FairPlay minimum security level**N/AN/AN/AN/AN/A
**PlayReady minimum security level**30003000200020003000
**Widevine minimum security level <sup>[1](πŸ”—ο»Ώ)</sup>**L1<br />(`HW_SECURE_ALL`)L1<br />(`HW_SECURE_ALL`)L3<br />(`SW_SECURE_CRYPTO`)L3<br />(`SW_SECURE_CRYPTO`)L1<br />(`HW_SECURE_ALL`)
**Max video resolution width**3840 pixels1920 pixels1280 pixels640 pixels1920 pixels
**Offline Playback <sup>[2](πŸ”—ο»Ώ)</sup>**<br />_(Applies to downloaded media)_NoNoNoNoYes
**Digital output**<br />_Applies only to HD and UHD streams_Requires HDCP v2 or laterRequires HDCP v1 or laterRequires HDCP v1 or laterDoes not require HDCPRequires HDCP v1 or later
**License duration**48 hours48 hours48 hours96 hours48 hours
**Playback duration**360 minutes360 minutes360 minutes360 minutes360 minutes

</span>

<br />

  1. <a name="1"></a>_Two manifests must be created in the Delivery API request. For one manifest, apply the L1 DRM policy with 3840p width restrictions. For the other manifest apply the L3 DRM policy with 1280p width restrictions._

  2. <a name="2"></a>_Offline playback can be added to custom policies by checking the **Offline Playback** field. When Offline Playback is enabled, the license is stored on the device and the media is accessible for the license and playback duration periods that you have set in the policy._

<br /> <hr />

## Supported browsers and suggested policies

The following tables show the browser-policy combinations that we suggest when using the default JW DRM Policies.

<br />

### Playback Enabled

#### Casting

<table> <thead> <tr> <th> Casting </th> <th> Highest </th> <th> High </th> <th> Medium </th> <th> Low </th> <th> Offline </th> </tr> </thead> <tbody> <tr> <td width="45%"> <strong>AirPlay</strong><br /><em>Via the player AirPlay icon</td> <td width="11%"> <div align="center">βœ…</div> </td> <td width="11%"> <div align="center">βœ…</div> </td> <td width="11%"> <div align="center">βœ…</div> </td> <td width="11%"> <div align="center">βœ…</div> </td> <td width="11%"> <div align="center">---</div> </td> </tr> </tbody> </table>

<br />

#### Desktop

<table> <thead> <tr> <th> HTML5 Browsers </th> <th> Highest </th> <th> High </th> <th> Medium </th> <th> Low </th> <th> Offline </th> </tr> </thead> <tbody> <tr> <td width="45%"> <strong>Chrome</strong><br /><em>3 most recent stable versions</em> </td> <td width="11%"> <div align="center">---</div> </td> <td width="11%"> <div align="center">---</div> </td> <td width="11%"> <div align="center">---</div> </td> <td width="11%"> <div align="center">βœ… </div> </td> <td width="11%"> <div align="center">---</div> </td> </tr> <tr> <td> <strong>Edge</strong><br /><em>2 most recent versions</em> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">---</div> </td> </tr> <tr> <td> <strong>Firefox</strong><br /><em>2 most recent versions</em> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">---</div> </td> </tr> <tr> <td> <strong>Safari</strong><br /><em>2 most recent versions</em> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">---</div> </td> </tr> </tbody> </table>

<br />

#### Mobile

<table> <thead> <tr> <th> </th> <th> Highest </th> <th> High </th> <th> Medium </th> <th> Low</th> <th> Offline </th> </tr> </thead> <tbody> <tr> <td width="45%"> <strong>Android (native) </strong><sup>6.0+</sup></td> <td width="11%"> <div align="center">βœ…</div> </td> <td width="11%"> <div align="center">βœ…</div> </td> <td width="11%"> <div align="center">βœ…</div> </td> <td width="11%"> <div align="center">βœ…</div> </td> <td width="11%"> <div align="center">βœ…</div> </td> </tr> <tr> <td> <strong>Chrome (Android)</strong><br /><em>3 most recent stable versions</em></td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">βœ…</div> </td> </tr> <tr> <td> <strong>iOS (native) </strong><sup>12.0+</sup> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">βœ…</div> </td> </tr> <tr> <td> <strong>Safari</strong><br /><em>2 most recent versions</em></td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">---</div> </td> </tr> </tbody> </table>

<br />

#### OTT

<table> <thead> <tr> <th> </th> <th> Highest </th> <th> High </th> <th> Medium </th> <th> Low</th> <th> Offline</th> </tr> </thead> <tbody> <tr> <td width="45%"> <strong>Android TV </strong></td> <td width="11%"> <div align="center">---</div> </td> <td width="11%"> <div align="center">βœ…</div> </td> <td width="11%"> <div align="center">---</div> </td> <td width="11%"> <div align="center">---</div> </td> <td width="11%"> <div align="center">---</div> </td> </tr> <tr> <td> <strong><strong>Apple TV </strong><sup>12.0+</sup> </strong><sup></td> <td> <div align="center">---</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> </tr> <tr> <td> <strong>Chromecast</strong> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> </tr> <tr> <td> <strong>Fire TV</strong> <sup>6.0+</sup></td> <td> <div align="center">---</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> </tr> <tr> <td> <strong>LG </strong></td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> </tr> <tr> <td> <strong>Roku</strong><br /><em>2 most recent versions</em></td> <td> <div align="center">---</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> </tr> <tr> <td> <strong>Samsung</strong></td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">βœ…</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> </tr> </tbody> </table>

<br /> <br />

### Screen Recording Blocked

DRM blocks screen recording (screen capture) via browser extensions and add-ons or applications such as QuickTime or OBS (Open Broadcaster Software) on the application level. However, this behavior is not guaranteed for all web browsers at all times. Blocking is dependent on the Content Decryption Module (CDM) used in the browser and may vary with browser updates and versions<sup><a href="#cdm-limitation-1">1</a></sup>.

The table below shows the screen capture prevention levels for different Operating Systems by screen capture method per browser. When screen capture is blocked, the file of the recording will show a black screen. The audio _may_ still be available.

#### Desktop

<table> <thead> <tr> <th> HTML5 Browsers </th> <th> Highest </th> <th> High </th> <th> Medium </th> <th> Low </th> <th> Offline </th> </tr> </thead> <tbody> <tr> <td width="45%"> <strong>Chrome</strong><br /><em>2 most recent stable versions</em></strong> </td> <td width="11%"> <div align="center">N/A</div> </td> <td width="11%"> <div align="center">N/A</div> </td> <td width="11%"> <div align="center"><strong>&check;</strong></div> </td> <td width="11%"> <div align="center"><strong>&check;</strong></div> </td> <td width="11%"> <div align="center">N/A</div> </td> </tr> <tr> <td> <strong>Edge (MacOS)</strong><br /><em>2 most recent stable versions</em></strong> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">N/A</div> </td> </tr> <tr> <td> <strong>Edge (Windows)</strong><br /><em>2 most recent stable versions</em></strong> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center">N/A</div> </td> </tr> <tr> <td> <strong>Firefox</strong><br /><em>2 most recent stable versions</em></strong> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">N/A</div> </td> </tr> <tr> <td> <strong>Opera</strong><br /><em>2 most recent stable versions</em></strong> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center">N/A</div> </td> </tr> <tr> <td> <strong>Safari</strong><br /><em>2 most recent stable versions</em></strong> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center">N/A</div> </td> </tr> </tbody> </table>

  1. <a name="cdm-limitation-1"></a>_This CDM limitation affects other major streaming platforms such as Netflix, Disney+, etc. as well._

<br />

#### Mobile

<table> <thead> <tr> <th> Native</th> <th> Highest </th> <th> High </th> <th> Medium </th> <th> Low </th> <th> Offline </th> </tr> </thead> <tbody> <tr> <td width="45%"> <strong>Android</strong></td> <td width="11%"> <div align="center">N/A</div> </td> <td width="11%"> <div align="center">N/A</div> </td> <td width="11%"> <div align="center">N/A</div> </td> <td width="11%"> <div align="center">---</div> </td> <td width="11%"> <div align="center"><strong>&check;</strong></div> </td> </tr> <tr> <td> <strong>iOS</strong> <sup>13.0+</sup> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> </tr> </tbody> </table>

<br />

<table> <thead> <tr> <th> Browser </th> <th> Highest </th> <th> High </th> <th> Medium </th> <th> Low </th> <th> Offline </th> </tr> </thead> <tbody> <tr> <td width="45%"> <strong>Chrome (iOS)</strong> <sup>iOS 13.0+</sup></td> <td width="11%"> <div align="center"><strong>&check;</strong></div> </td> <td width="11%"> <div align="center"><strong>&check;</strong></div> </td> <td width="11%"> <div align="center"><strong>&check;</strong></div> </td> <td width="11%"> <div align="center"><strong>&check;</strong></div> </td> <td width="11%"> <div align="center">N/A</div> </td> </tr> <tr> <td> <strong>Edge (Android)</strong></td> <td> <div align="center">N/A</div> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">N/A</div> </td> </tr> <tr> <td> <strong>Edge (iOS)</strong> <sup>iOS 13.0+</sup></td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center">N/A</div> </td> </tr> <tr> <td> <strong>Firefox (Android)</strong></td> <td> <div align="center">N/A</div> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center">N/A</div> </td> <td> <div align="center">---</div> </td> <td> <div align="center">N/A</div> </td> </tr> <tr> <td> <strong>Firefox (iOS)</strong> <sup>iOS 13.0+</sup></td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center"><strong>&check;</strong></div> </td> <td> <div align="center">N/A</div> </td> </tr> </tbody> </table>

<br /> <hr />

## Create a custom DRM policy

You have the option to create customized DRM policies. You should have a strong understanding of DRM robustness settings. An incorrectly customized DRM policy has the possibility of providing viewers too much access to your content or halting content playback for all devices. **To ensure proper DRM playback when using Studio DRM with JW Platform we strongly suggest using one of the default DRM policies.**

Use the following steps to create a custom DRM policy:

  1. From the **<a href="https://dashboard.jwplayer.com/account/properties" target="_blank">Properties page</a>**, click (property name) **> Content Protection.**

  2. In the **Digital Rights Management** section, hover over a DRM policy row. The More menu icon appears at the end of the row.

  3. Click the More menu icon **> Clone**. The **DRM Policy** panel appears.

  4. Update the settings for your use case.

  5. Click **Save**.

<br />

<!-- Removes the automatic page-to-page navigation at the bottom of the page -->

<style> .rm-Pagination { display: none; } </style>