DRM Providers

PlayReady

Register a PlayReady-capable DRM provider in C21 Live Control and attach it to a Destination.

PlayReady in C21 Live Control

PlayReady is Microsoft's DRM. It reaches Windows, Edge (legacy), Xbox and many smart TVs and set-top boxes. In Live Control it appears as one of the three systems exposed by DrmProvider.supported_systems and one of the values a Destination's drm.systems[] array can carry.

This page covers what goes into the provider record when the upstream multi-DRM service supports PlayReady. For the end-to-end flow, see DRM workflow. For the provider catalogue and CRUD, see Providers.

Where the configuration comes from

PlayReady is licensed by Microsoft to content owners and packagers. As with Widevine, most C21 Live Control deployments do not connect to a Microsoft license server directly; they go through a multi-DRM provider (for example AXINOM or EZDRM) that runs the PlayReady license server and exposes the same SPEKE endpoint used for Widevine.

The multi-DRM vendor hands over:

  • The SPEKE endpoint URL.
  • The credentials expected by that provider type.
  • A tenant identifier when required (AXINOM uses one; others may not).

Registering the provider

The form is shared with Widevine and FairPlay — see Providers for the field-by-field reference (name, provider_type, speke_url, tenant_id, credentials, enabled). The same provider record can serve PlayReady, Widevine and FairPlay when the upstream vendor supports them all.

After saving, run validateDrmProvider (the Validate action). The handler updates validation_status (UNKNOWN / VALID / INVALID) and stores the timestamp in validation_date.

Attaching PlayReady to a Destination

DRM is applied to a Destination via its drm block (see Destinations):

  • active = true.
  • provider_id set to the PlayReady-capable provider.
  • systems includes PlayReady. The common pairing is ["Widevine", "PlayReady"] on a DASH or CMAF Destination so a single manifest reaches both Chrome / Android and Windows / Edge.
  • encryption_mode set to cenc (DASH default) or cbcs (when packaging once for DASH + HLS / CMAF).
  • contentid set to the content identifier the upstream vendor expects.

FAQ

Copyright © 2026