Live 2.0 DRM

In this topic, you will learn how to enable content protection for your live stream.

DRM now works with redundant channels and also protects Low Latency HLS (LLHLS) outputs.

Live DRM is an add-on feature, not active by default.
If you would like access to this feature, please contact your Customer Success Manager.

Granular stream-level limitations (CRT) — Live 2.0 now supports rendition-level DRM configurations by resolution group (SD, HD, UHD). This enables HDCP fallback so you can apply stronger protection to higher resolutions (e.g., HD/UHD) and more permissive rules for SD.

Enabling DRM for Live content

Note:

By default, DRM is applied to outputs as follows:

  • Your Live account must be enabled first by Brightcove Support in order to use DRM.
  • To publish a DRM-enabled event, use any of the following:
    • A DRM-enabled Brightcove Player v6.37.1 or later
    • The Brightcove Native SDK for iOS v6.5.0 or later
    • The Brightcove Native SDK for Android v6.11.0 or later

  • If you want to override the DRM default settings you can do it via API or please contact Brightcove support to change them in the Live Platform.
    • FairPlay: applied to HLS outputs
    • PlayReady: applied to DASH outputs
    • Widevine: applied to HLS outputs

Notes

  1. While Creating a New Channel, scroll down to the DRM section and select the desired encryptions for your channel.
  2. After you click Save, scroll down to the Live Channel Details to see your encryption modes.

Playback technologies used

The Brightcove Player utilizes different DRM playback technologies with different browsers.

  • FairPlay: Apple's DRM system
  • PlayReady: Microsoft's DRM system
  • Widevine: Google's DRM system

The following table details the relationship between the browser (latest version), format, and playback technology used in Brightcove Player:

Browser Format Playback Technology Rendition Type Used to Deliver DRM Content
Chrome Desktop HLS with Widevine EME HLS
Chrome Mobile

HLS with Widevine (iOS)

HLS with Widevine (Android)

Native

EME

HLS
Internet Explorer No versions of IE are supported by Brightcove
Edge1 HLS with Widevine EME HLS
Safari HLS with FairPlay Native HLS HLS
Firefox HLS with Widevine EME HLS

For further assistance, please contact Brightcove Support or your Customer Success Manager.

Playback technologies used

The Brightcove Player utilizes different DRM playback technologies with different browsers.

  • FairPlay: Apple’s DRM system
  • PlayReady: Microsoft’s DRM system
  • Widevine: Google’s DRM system

The table shows the relationship between the browser (latest version), format, playback technology, and the rendition type used to deliver DRM content in Brightcove Player.

Browser, format, DRM technology, and rendition type
Browser Format Playback Technology Rendition Type Used to Deliver DRM Content
Chrome Desktop HLS with Widevine EME HLS
Chrome Mobile

HLS with Widevine (iOS)

HLS with Widevine (Android)

Native

EME

HLS
Internet Explorer No versions of IE are supported by Brightcove
Edge HLS with Widevine EME HLS
Safari HLS with FairPlay Native HLS HLS
Firefox HLS with Widevine EME HLS

For further assistance, please contact Brightcove Support or your Customer Success Manager.

DRM Encryption using the Live 2.0 API

To enable DRM for a Brightcove Live channel, add an encryption object to the job definition you send to the Live API.
You may list individual modes (e.g. ["widevine","fairplay","playready"]) or simply use ["all"] to enable every supported scheme.

  • To create a live job with DRM encryption enabled, send a POST request to:

    
    https://api.live.brightcove.com/v2/accounts/{account_id}/jobs
          

    Example request body (adjust as needed):

    {
      "type": "event",
      "name": "DRM",
      "region": "us-east-1",
      "input": {
        "protocol": "srt",
        "fixed_ingest_ip": false
      },
      "outputs": {
        "video": [
          {
            "label": "hls270p",
            "height": 270,
            "width": 480,
            "bitrate": 450000,
            "codec": "h264",
            "codec_options": { "level": "3", "profile": "main" },
            "framerate": "30/1",
            "num_b_frames": 3,
            "num_reference_frames": 4,
            "keyframe_rate": 0.5,
            "sample_aspect_ratio": "1:1",
            "decoder_buffer_size": 675000,
            "max_bitrate": 540000
          },
          {
            "label": "hls360p",
            "height": 360,
            "width": 640,
            "bitrate": 780000,
            "codec": "h264",
            "codec_options": { "level": "3", "profile": "main" },
            "framerate": "30/1",
            "num_b_frames": 3,
            "num_reference_frames": 4,
            "keyframe_rate": 0.5,
            "sample_aspect_ratio": "1:1",
            "decoder_buffer_size": 1170000,
            "max_bitrate": 936000
          },
          {
            "label": "hls540p",
            "height": 540,
            "width": 960,
            "bitrate": 1500000,
            "codec": "h264",
            "codec_options": { "level": "3.2", "profile": "main" },
            "framerate": "30/1",
            "num_b_frames": 3,
            "num_reference_frames": 4,
            "keyframe_rate": 0.5,
            "sample_aspect_ratio": "1:1",
            "decoder_buffer_size": 2250000,
            "max_bitrate": 1800000
          },
          {
            "label": "hls720p",
            "height": 720,
            "width": 1280,
            "bitrate": 2400000,
            "codec": "h264",
            "codec_options": { "level": "4", "profile": "high" },
            "framerate": "30/1",
            "num_b_frames": 3,
            "num_reference_frames": 4,
            "keyframe_rate": 0.5,
            "sample_aspect_ratio": "1:1",
            "decoder_buffer_size": 3600000,
            "max_bitrate": 2880000
          },
          {
            "label": "hls1080p",
            "height": 1080,
            "width": 1920,
            "bitrate": 4500000,
            "codec": "h264",
            "codec_options": { "level": "4.2", "profile": "high" },
            "framerate": "30/1",
            "num_b_frames": 3,
            "num_reference_frames": 4,
            "keyframe_rate": 0.5,
            "sample_aspect_ratio": "1:1",
            "decoder_buffer_size": 6750000,
            "max_bitrate": 5400000
          }
        ],
        "audio": [
          {
            "label": "aac1",
            "input_selector_name": "default",
            "language_code": "eng",
            "codec": "aac",
            "bitrate": 128000,
            "sample_rate": 48000
          }
        ],
        "rtmp": [
          {
            "label": "primary_rtmp",
            "url": "rtmp://primary.example.com/live/stream_key_1",
            "video_label": "hls1080p",
            "audio_label": "aac1"
          },
          {
            "label": "backup_rtmp",
            "url": "rtmps://backup.example.com/live/stream_key_2",
            "video_label": "hls720p",
            "audio_label": "aac1"
          }
        ]
      },
      "manifest": {
        "name": "playlist",
        "segment_duration_seconds": 6,
        "playlist_window_seconds": 30,
        "hls": {}
      },
      "maintenance_preferences": {
        "day": "WEDNESDAY",
        "start_time": "02:00"
      },
      "playback_rights_id": "primary",
      "encryption": {
        "modes": ["widevine", "fairplay", "playready"]
      }
    }

Granular stream-level DRM (CRT)

With Content Restriction Templates (CRT), you can enforce different DRM/HDCP requirements per rendition tier:

Default DRM CRT settings:

Rendition Group Typical DRM/HDCP Setting Notes
SD / Audio-only HDCP_NONE Most permissive for broad device reach
HD HDCP_V1 (e.g., Widevine Modular) Moderate protection for 720p/1080p
UHD HDCP_V2.2 Often paired with stricter OPL/VMP requirements