DRM

👍

Video content protection requires a JW Player Enterprise license. Please contact our team to upgrade your account.

🚧

If you are utilizing JWP’s Studio DRM, please reference Apply Studio DRM with JW Platform.

Configuration options related to DRM for MPEG DASH (Playready, Widevine, Clearkey) and HLS streams (Fairplay).

JW Player includes the ability to add DRM to a specific playlist source. Using this method will allow your browser to choose the correct DRM method when multiple DRM types are configured. We highly suggest updating any configurations to use this new method.

📘

HTTPS is required for all DRM-protected content.

For more information regarding DRM, and for examples, please view our support article.

drm.playready

Playready DRM is specific to Internet Explorer 11 and Edge on Windows 8.1 or higher operating systems.

PropertyDescriptionDefault
url* string(Required) The URL of the PlayReady license server-
headers arraySpecifies the custom http headers to send to your playready license server. See headers for more information-
licenseRequestFilter functionExpects a function which takes a single request argument. License request filters intercept license requests before 'licenseRequestHeaders' are added.-
licenseResponseFilter functionExpects a function which takes a single response argument. License response filters intercept license responses before updating the session with the license key.-
audioRobustness < 8.18.0+  stringSets the robustness level for audio

Possible values:
   • HW_SECURE_ALL
   • HW_SECURE_CRYPTO
   • HW_SECURE_DECODE
   • SW_SECURE_CRYPTO
   • SW_SECURE_DECODE
-
videoRobustness < 8.18.0+  stringSets the robustness level for video

Possible values:
   • HW_SECURE_ALL
   • HW_SECURE_CRYPTO
   • HW_SECURE_DECODE
   • SW_SECURE_CRYPTO
   • SW_SECURE_DECODE
-

drm.widevine

Widevine DRM is specific to Google Chrome on non-iOS devices. Widevine will also function on Firefox browsers for desktop systems.

PropertyDescriptionDefault
url* string(Required) The URL of the WideVine license server-
headers arraySpecifies the custom http headers to send to your widevine license server requests. See headers for more information-
licenseRequestFilter functionExpects a function which takes a single request argument. License request filters intercept license requests before 'licenseRequestHeaders' are added.-
licenseResponseFilter functionExpects a function which takes a single response argument. License response filters intercept license responses before updating the session with the license key.-
serverCertificateUrl stringThe URL of the WideVine service certificate-
audioRobustness < 8.18.0+  stringSets the robustness level for audio. Possible values include: SW_SECURE_CRYPTO, SW_SECURE_DECODE, HW_SECURE_CRYPTO, HW_SECURE_DECODE, HW_SECURE_ALL-
videoRobustness < 8.18.0+  stringSets the robustness level for video. Possible values include: SW_SECURE_CRYPTO, SW_SECURE_DECODE, HW_SECURE_CRYPTO, HW_SECURE_DECODE, HW_SECURE_ALL-

drm.[widevine/playready].headers

Adding customized HTTP header data to license requests is possible with the "headers" configuration. This replaces the static "customData" configuration option in both widevine and playready scenarios. It is also possible to add multiple custom http headers by including multiple objects in the "headers" array.

DRM can be configured in the following way:

"drm": {
  "playready": {
    "url": "mydrmserver.com",
    "headers": [{
      "name": "customData",
      "value": "hereismycustomdatastring"
    }]
  }
}

In previous versions, adding "customData" would look like the following:

"drm": {
  "playready": {
    "url": "mydrmserver.com",
    "customData": "hereismycustomdatastring"
  }
}
PropertyDescription
name string
                            
The name of the http header that will be included
value stringThe value of the http header that will be included

drm.fairplay

JW Player includes configuration options for custom Fairplay integrations. For more information and examples regarding custom Fairplay DRM integrations, please view our support article.

PropertyDescription
certificateUrl* string(Required) The path to the certificate which is part of the session data used to initialize the keySession.certificateUrl
processSpcUrl* string | function(Required) The path to the license server (server playback context) which provides the ckc. Expects a direct url to the server. If the url needs to be constructed dynamically, a custom function can be passed to this configuration option which returns the url
extractContentId functionExpects a function that receives the initData uri (converted to a string) from the needkey event, and returns the contentId which is part of the session data used to initialize the keySession
extractKey functionExpects a function that receives the ckc returned by the license server and returns the key used to update the active key session. If the key can only be extracted asynchronously (for example reading bytes from a ‘blob’ response), this function can return a promise
licenseResponseFilter functionExpects a function which takes a single response argument. License response filters intercept license responses before updating the session with the license key.
licenseResponseType stringSpecifies the data type returned by the XHR request to the license server. The default value is 'arraybuffer'. Other options include 'blob', 'json', and 'text'. This option impacts how “licenseRequestMessage” will be processed
licenseRequestFilter functionExpects a function which takes a single request argument. License request filters intercept license requests before 'licenseRequestHeaders' are added.
licenseRequestHeaders arrayExpects an Array of Objects containing header “name” and “value” properties to be included in the request to the license server
licenseRequestMessage functionExpects a function that receives the license key message and returns the message to be sent to the license server. With the default “licenseResponseType” of ArrayBuffer this function passes through keymessage event message property without any changes

drm.clearkey

A basic form of DRM that lists a decryption key inside of your player configuration. This is the least secure form of DRM, though it is the simplest to implement across browsers. There are no additional server resources required to decrypt content with this method. Clearkey is supported in both Chrome and Firefox browsers.

PropertyDescription
key* string
                                      
(Required) The key required to decrypt DRM content
keyId* string(Required) The key ID specified in the mpd's default_KID value