Qencode + ExpressPlay

Encrypt with Widevine, FairPlay, and PlayReady through Intertrust's ExpressPlay — cloud-native multi-DRM with global reach.

Overview

What This Integration Does

Qencode integrates with Intertrust's ExpressPlay multi-DRM service to deliver Widevine, FairPlay, and PlayReady encryption in a single transcoding workflow. Qencode handles encoding and packaging; ExpressPlay provides the key server and license delivery. Backed by Intertrust's decades of DRM expertise, ExpressPlay offers a cloud-native licensing infrastructure that scales globally without requiring you to manage any DRM servers.

Architecture

How the Integration Works

Source

Any storage or URL

Qencode ingests your source video from any storage provider or URL.

Encode & Encrypt

Encode & Encrypt

Qencode transcodes the video and requests encryption keys from ExpressPlay's key server during packaging.

Package

Key & license server

Qencode writes encrypted HLS and/or DASH output with ExpressPlay-managed keys to your storage.

Playback

Licensed playback

The viewer's device requests a license from ExpressPlay. ExpressPlay validates and delivers the decryption key.

Getting Started

Setup Steps

  1. Set up your ExpressPlay account

    Register for an ExpressPlay account through Intertrust and obtain your API token and license server endpoints for Widevine, FairPlay, and/or PlayReady.

    This step is completed in the ExpressPlay Admin portal — see ExpressPlay documentation

  2. Configure DRM provider in Qencode

    In the Qencode dashboard, go to Settings → DRM and add your ExpressPlay API token and key server endpoint.

  3. Enable DRM in your transcode request

    Add the cenc_drm parameter to your format array, specifying the DRM systems and ExpressPlay as the provider.

  4. Test playback

    Use a test player (Shaka Player for Widevine/PlayReady, Safari for FairPlay) to verify license acquisition and encrypted playback across all target DRM systems.

Implementation

Code Example

Request Example

Widevine DRM via ExpressPlay

{
  "query": {
    "source": "https://nyc3.digitaloceanspaces.com/qencode/bbb_30s.mp4",
    "format": [
      {
        "output": "advanced_dash",
        "destination": {
          "url": "s3://YOUR_BUCKET/path/to/output/",
          "key": "YOUR_STORAGE_KEY",
          "secret": "YOUR_STORAGE_SECRET"
        },
        "stream": [
          {
            "size": "1280x720",
            "audio_bitrate": "320"
          },
          {
            "size": "1920x1080",
            "audio_bitrate": "320"
          }
        ],
        "cenc_drm": {
          "key": "F1234560F6A7DE822574BF2F8190F6CD",
          "key_id": "6B6801FE59DA030104702C69F1A7D46A",
          "pssh": "CAESEAABAgMEBQYHCAkKCwwNDg8aCmludGVydHJ1c3QiASo=",
          "la_url": "https://pr.service.expressplay.com/playready/RightsManager.asmx"
        }
      }
    ]
  }
}

Replace placeholder credentials with your actual ExpressPlay API token and endpoint. Use environment variables in production.

For a step-by-step walkthrough, see Tutorial: ExpressPlay Integration

We love creating powerful solutions that are aligned with the needs of your business.

Please send us a message if you have a question or Schedule a call for a demo to discuss your integration.

Let's talk

First Name
Last Name
Company
Email
Your Message

Contact us with any questions. We'd love to help.

Los Angeles, CA - (HQ)

San Francisco, CA

New York, NY