Persistent license on Dashjs4.x(latest) See issue #3169. I was able to proofOfConcept and works on Win10 EdgeChromium. How should I handle a license expiration or obsolete drmSessionId? My test license has an expiration of 15min.
- Start a playback, laurl is invoked on first playback, license was created with persist:true flags
- Store drmSessionId (local storage, app variable, ...) for later use
- Stop playback, wait, start 2nd time playback
- Set
dashjs.protectionData.sessionId, sessionTypebefore playback to reuse an existing offline license - Start playback within 15min expiration -> playback works without an laurl requests
- Start playback after 15min expiration -> License has expired or other errors.
Questions
How to handle an expired or obsolete sessionId used in a protData config?
This raises an exception but what is the clean way of reinit a playback witn an empty sessionId config value?
How can I check for EME license sessionId still valid before even starting a playback?
// various error messages
[Stream] DRM: KeyStatusChange error! -- License has expired
[Stream] DRM: unable to create session! --Error generating key request -- NotSupportedError
[Stream] DRM: unable to create session! --Could not load session (IIQgEOogigurOuL4bCQ7nQ==)! TypeError
// Dashjs configuration object with an offline license sessionId:
"com.microsoft.playready": {
"serverURL": laUrl
, "priority":1
, "sessionType": "persistent-license"
, "sessionId": "IIQgEOogigurOuL4bCQ7nQ==" // reuse an existing drmSession
, "persistentState": "optional", "distinctiveIdentifier": "optional"
, "videoRobustness": "2000"
, "audioRobustness": "2000"
, "systemStringPriority": [ "com.microsoft.playready.recommendation","com.microsoft.playready" ]
}
// log sessionId and later reuse in a config object
self.player.on(dashjs.MediaPlayer.events.KEY_SESSION_CREATED, function(evt) {
if (!evt.data) return; // data=DrmSession object
var sessionType = evt.data.getSessionType();
if (sessionType==='persistent-license') { // "temporary", "persistent-license"
var sessionId = evt.data.getSessionId(); // "IIQgEOogigurOuL4bCQ7nQ=="
console.log("DRMKeySession type="+sessionType+ ", id="+ sessionId); //FIXME: store sessionId for later use
}
});
self.player.on(dashjs.MediaPlayer.events.KEY_STATUSES_CHANGED, function(evt) {
// evt.error.code, .message
// code=110, message="DRM: KeyStatusChange error! -- License has expired"
// code=113, message="DRM: unable to create session! --Error generating key request -- NotSupportedError"
console.log("KeyStatusesChanged", evt);
});