-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow playback with LICENSE_REQUEST_FAILED #3051
Comments
This is exactly what we recommend at Widevine. I am not familiar with the details of PlayReady licenses or policies, and I had assumed something similar was possible.
This error shouldn't stop playback in and of itself. It gets dispatched from You can look more deeply at such an error to match
function isLicenseRequest403(error) {
return error.code == shaka.util.Error.Code.LICENSE_REQUEST_FAILED &&
error.data[0].code == shaka.util.Error.Code.BAD_HTTP_STATUS &&
error.data[0].data[1] == 403;
}
I'm not sure if ABR will react correctly to having all the keys, but having some of them be expired. (If not, we should probably file it as a separate bug and fix it. But ideally you wouldn't have to rely on this technique anyway.)
You should definitely not do this, in my opinion. One detail you should note is that before we get keys, we will assume that at least the lowest res keys will be available to us later, and we will start streaming on that assumption. If the subset you return excludes these particular keys, playback could break. |
Thanks @joeyparrish So a couple of observations, and if you have time could validate my plan. When the DRM request fails - https://github.com/google/shaka-player/blob/master/lib/media/drm_engine.js#L1252 A second state issue is the Roughly implementing both of the above changes still does not allow playback. I note that seeking will still attempt to make license requests for the failed license requests. So I am wondering if I need to remove 'drmInfo' from various bitrates or even just remove the bitrates altogether as we do not want bitrates that we cannot play in any bitrate selectors. Thoughts? |
Oh, I see. I overlooked
Looking more closely, there appear to be two purposes to
I think you're on the right track, though, by deleting the failed session. When we dispatch key status updates, the delete(session);
if (areAllSessionsLoaded_()) {
this.allSessionsLoaded_.resolve();
this.keyStatusTimer_.tickAfter( ... );
} That way, if the successful sessions completed earlier, and you just removed the last failed session, the key statuses are sent to the There is one more edge case, though. If we had no sessions to begin with, we should consider "all sessions loaded" to be true. This would be needed for storing clear content offline. But if all sessions failed (even if we only had one to start with), we should consider "all sessions loaded" to be false. So maybe something like this on failure: if (this.activeSessions_.size == 1) {
this.allSessionsLoaded_.reject(err);
} else {
this.activeSessions_.delete(session);
if (areAllSessionsLoaded_()) {
this.allSessionsLoaded_.resolve();
this.keyStatusTimer_.tickAfter( ... );
}
} I'm still a little nervous that maybe this will cause us to assume any failure is okay so long as something else worked, which would not always be true. But I think we could probably come up with a solution to that, too. Does this help? |
Thanks @joeyparrish Here is what I have done so far, #3052 |
Hi @joeyparrish I am pretty sure that because of how the Anticipating a need to reproduce this without a license server I have pushed a simple way to inject failure. #3052 I would grateful for a nudge in a new / better direction. |
@TheModMaker @joeyparrish just commenting to say that we see the same/similar issues with our solution for PlayReady. Can I also comment on the priority of this task? Given that it seems very difficult to deploy content with seperate 4K adaptation sets since license agreements mean we must omit keys /reject license requests from clients not supporting the defined robustness requirments (SL3000). This issue means we have no fallback/compatibility recourse when using ShakaPlayer e.g. restrict playback to SD (or SD/HD) only since even when we manually configure bitrate and/or max height settings the content wont play back on SL2000 based clients since the drm session is stuck waiting on the omitted key Hopefully, you can reconsider the level of attention this issue is receiving... Thanks. |
I'm setting this to P1 (top non-emergency priority). |
Have you read the Tutorials?
Yes
Have you read the FAQ and checked for duplicate open issues?
Yes
What version of Shaka Player are you using?
v3.0.5
Please ask your question
How should the PlayReady license server allow playback of SD bitrates only?
I have packaged content with widevine and playready headers using shakapacker using a different content key per bitrate. I can successfully playback content using both key systems.
Widevine is packaged using multiple KIDS in the PSSH across all bitrates
Playready is packaged with a single KID in the PSSH
Very similar to
https://shaka-player-demo.appspot.com/demo/#audiolang=en-US;textlang=en-US;uilang=en-US;asset=https://media.axprod.net/TestVectors/v7-MultiDRM-MultiKey/Manifest.mpd;panel=ALL_CONTENT;panelData=drm:PLAYREADY;build=uncompiled
All content plays across all bitrates.
Widevine
Playready
DRM.LICENSE_REQUEST_FAILED
How are others solving this?
Cheers
The text was updated successfully, but these errors were encountered: