Setup using multiple DRM solutions
Overview
Using the Bitmovin player in a multi DRM configuration is very simple. You can add multiple DRM configurations (e.g., Widevine configuration, PlayReady configuration, TVKey configuration etc.) to the player configuration and you can also set all the advanced options for each DRM configuration. An example multi DRM configuration could look like the following:
var conf = {
key: 'YOUR-PLAYER-LICENSE-KEY-HERE',
source: {
dash: 'DASH_MANIFEST_URL',
hls: 'HLS_MASTER_PLAYLIST_URL',
drm: {
widevine: {
LA_URL: 'https://mywidevine.licenseserver.com/',
prepareMessage: function (keyMessage) {
return keyMessage.message;
}
},
playready: {
LA_URL: 'https://myplayready.licenseserver.com/',
customData: 'INSERT-YOUR-CUSTOMDATA'
},
access: {
LA_URL: 'https://myaccess.licenseserver.com/',
authToken: 'INSERT-YOUR-BASE64-ENCODED-AUTH-TOKEN'
},
primetime: {
LA_URL: 'https://myprimetime.licenseserver.com/'
},
fairplay: {
LA_URL: 'https://fairplay.licenseserver.com/',
certificateURL: 'https://fairplay.licenseserver.com/certificate-url'
},
tvkey: {
LA_URL: 'https://tvkey.license.server/api/license',
headers: {
'AuthKey': 'YOUR-TVKEY-TOKEN'
}
},
}
}
};Controlling DRM Key System Priority
By default, the player negotiates with the browser to select an available DRM key system. On some platforms, browser updates may change which key system takes priority (e.g., Chrome on Windows may select PlayReady over Widevine).
To explicitly control the order in which key systems are attempted, use the preferredKeySystems property on the DRM configuration:
var conf = {
key: 'YOUR-PLAYER-LICENSE-KEY-HERE',
source: {
dash: 'DASH_MANIFEST_URL',
hls: 'HLS_MASTER_PLAYLIST_URL',
drm: {
preferredKeySystems: [
'widevine', // Try Widevine first
'playready' // Fall back to PlayReady
],
widevine: {
LA_URL: 'https://mywidevine.licenseserver.com/',
prepareMessage: function (keyMessage) {
return keyMessage.message;
}
},
playready: {
LA_URL: 'https://myplayready.licenseserver.com/',
customData: 'INSERT-YOUR-CUSTOMDATA'
}
}
}
};When to use this: If you observe unexpected DRM key system selection after a browser update (e.g., PlayReady being used on Chrome where Widevine was previously selected),
preferredKeySystemslets you enforce a consistent priority order.
Widevine
var conf = {
key: 'YOUR-PLAYER-LICENSE-KEY-HERE',
source: {
dash: 'DASH_MANIFEST_URL',
hls: 'HLS_MASTER_PLAYLIST_URL',
drm: {
widevine: {
LA_URL: 'https://mywidevine.licenseserver.com/',
prepareMessage: function (keyMessage) {
return keyMessage.message;
}
}
}
}
};Playready
var conf = {
key: 'YOUR-PLAYER-LICENSE-KEY-HERE',
source: {
dash: 'DASH_MANIFEST_URL',
hls: 'HLS_MASTER_PLAYLIST_URL',
drm: {
playready: {
LA_URL: 'https://myplayready.licenseserver.com/',
customData: 'INSERT-YOUR-CUSTOMDATA'
}
}
}
};Fairplay
var conf = {
key: 'YOUR-PLAYER-LICENSE-KEY-HERE',
source: {
dash: 'DASH_MANIFEST_URL',
hls: 'HLS_MASTER_PLAYLIST_URL',
drm: {
fairplay: {
LA_URL: 'https://fairplay.licenseserver.com/',
certificateURL: 'https://fairplay.licenseserver.com/certificate-url'
}
}
}
};Adobe Primetime
var conf = {
key: 'YOUR-PLAYER-LICENSE-KEY-HERE',
source: {
dash: 'DASH_MANIFEST_URL',
hls: 'HLS_MASTER_PLAYLIST_URL',
drm: {
primetime: {
LA_URL: 'https://myprimetime.licenseserver.com/'
}
}
}
};Adobe Access
var conf = {
key: 'YOUR-PLAYER-LICENSE-KEY-HERE',
source: {
dash: 'DASH_MANIFEST_URL',
hls: 'HLS_MASTER_PLAYLIST_URL',
drm: {
access: {
LA_URL: 'https://myaccess.licenseserver.com/',
authToken: 'INSERT-YOUR-BASE64-ENCODED-AUTH-TOKEN'
}
}
}
};TVKey
var conf = {
key: 'YOUR-PLAYER-LICENSE-KEY-HERE',
source: {
dash: 'DASH_MANIFEST_URL',
hls: 'HLS_MASTER_PLAYLIST_URL',
drm: {
tvkey: {
LA_URL: 'https://tvkey.license.server/api/license',
headers: {
'AuthKey': 'YOUR-TVKEY-TOKEN'
}
}
}
}
};Updated 11 days ago