- From: David Dorwin <ddorwin@google.com>
- Date: Wed, 13 Nov 2013 15:56:24 +0800
- To: "public-html-media@w3.org" <public-html-media@w3.org>
- Message-ID: <CAHD2rsivErLm1i+cgMy3s7-5mxsgnizMSpJpTZ9-3tZx9WMKUQ@mail.gmail.com>
This e <https://www.w3.org/Bugs/Public/show_bug.cgi?id=21798>mail provides a framework and suggestions for resolving Bug 21798<https://www.w3.org/Bugs/Public/show_bug.cgi?id=21798>- Revisit MediaKeyError codes. I think we should have the following goals: - Codes should be for things that would allow the application do one of the following: - Adapt/respond to enable playback to continue - Give the user a useful/actionable message. - Codes should be commonly useful across implementations. - Codes should generally be for things that are only known to the user agent/CDM. (In contrast, there are other ways to report errors known to the server.) - Codes should be described in sufficient detail that they can interpreted unambiguously by different implementers and it is clear how an application should respond. - Start with codes we know will be useful. We can always add them later based on implementation experience. With that in mind, I’ve identified the following categories of errors I think we must include. Some may make sense to split into separate codes, and I’ve mentioned potential individual cases where applicable. I’ve also included the expected application behavior for each, which I think is an important consideration for any error code. 1. Unknown/Other - “An unspecified error occurred. This value is used for errors that don't match any of the following codes.” 1. Expected application behavior: General failure message. It is not possible to recover since there is no specified cause. 2. Output [protection] 1. The current description is “There is no available output device with the required characteristics for the content protection system.” That seems like a subset or inaccurate description of cases that should be covered. 2. Is it useful to differentiate the case where the error resulted from a display change (new display, player window moved, etc.)? (An application might be able to infer this based on the amount of time it has been playing without such a separation.) 3. Expected application behavior: Inform the user of the problem and/or try a different license, possibly using alternate streams. (The response may be different depending on whether the error resulted from a change.) 3. Expired 1. The key/license is no longer valid. 2. This could be broken up into multiple scenarios: 1. Renewal failed 2. The time window has passed 3. Number of plays exceeded 4. Instructed to stop by license server 3. Expected application behavior: Inform the user there was a problem (renewing, rental expired, etc.). 4. If we use a single error code, the application will need to derive the messaging based on knowledge of the application, licensing, etc. 4. Key System/CDM cannot be used 1. There are potentially several classes of causes that could potentiall be separate codes: 1. Key System (CDM) is disabled (by the user) 1. I can imagine this being useful as it allows applications to provide the user with specific instructions, but it also enables fingerprinting and exposes something about a user that is probably concerned about privacy. 2. Identifiers are disabled (by the user) 1. Similar issues to above. 3. CDM could not be found, failed to load (i.e. due to dependencies), has not been initialized/enabled. 1. Similar to or could be merged with to “Key System (CDM) is disabled”, though the desired messaging for each scenario would be very different. 2. Expected application behavior: Inform the user that there is a problem and possibly general text about how to address it. 1. For the latter, it may be useful to at least differentiate user controllable/resolvable issues vs. more complex issues (i.e. CDM failed to load). 3. If we want to use a single code, we might just use “client” (where client refers to the CDM). Maybe there is an even better name. I think the following would also be useful: 1. Platform capabilities not available 1. Similar to Output [Protection], but this device can never meet the license requirements. 2. Expected application behavior: Try a different license, possibly using alternate streams. 2. Initialization failure (needs a better name) 1. Some implementations have various individualization, etc. steps. 2. Expected application behavior: Inform the user, possibly telling them to try again or contact the device manufacturer. Another possibility - this really depends on how we want to handle such delays. 1. Deferred/Delayed (more of a status than an error) 1. This mostly relates to initial use [on an origin], which may take longer in some implementations. 2. The code is an indication that the operation is not possible now but should be soon. As a status, it just means the operation (likely createSession()) is pending. Alternatively, the error could be fatal and the application should try again (calling createSession() again). 3. Expected application behavior: This is mostly a hint that the application should not time out in cases where message or ready events may not be fired soon. The following codes are currently in the spec but not included above. If someone would like to make an argument for one of these, please consider the goals above and the “expected application behavior”. - Client - “The Key System could not be installed or updated.” - Since CDMs should not be installed, the first part of the error definition is obsolete. It’s unclear what would cause a “not updated” error. - We could reuse “client” for the “Key System/CDM cannot be used” class above. - Service - “The message passed into update indicated an error from the license service.” - What would be reported here that a) couldn’t be reported directly to the app and b) isn’t in the list above? - Hardware Change - “A hardware configuration change caused a content protection error.” - What would cause this to be fired? Are there cases other than the Output error? Would this be detected on the client or server? Is this common enough to warrant its own code? - Domain - “An error occurred in a multi-device domain licensing configuration. The most common error is a failure to join the domain.” - It seems to be TBD how “domain keys” would be supported. If this is handled at the application level, do we need a specific domain error? Or is this something different?
Received on Wednesday, 13 November 2013 07:57:12 UTC