Whome
Whome

Reputation: 10400

Dashjs and persistence license, how to handle an expired/obsolete license sessionId on playback?

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.

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);
});

Upvotes: 0

Views: 113

Answers (0)

Related Questions