- From: Anant Narayanan <anant@mozilla.com>
- Date: Wed, 18 Jan 2012 23:06:56 -0800
- To: public-media-capture@w3.org
The current getUserMedia draft contains a very simple 'options' object passed as the first argument that allows the web application to simply specify whether it needs audio, video, or both. Scenario 2.1 ("Check out this new hat!") in the document recently sent out by Travis can be better served if there was a way for the web application to specify that it needs a snapshot from the "front" camera. This is one example, and one can think of several other criteria that a web application would like to specify in advance, in order to provide a better user experience. However, exposing fine grained control over media hardware to web applications has serious security and privacy implications. Enumeration of available devices, for example, will provide several bits of data that will allow third parties to more easily fingerprint users. ** Tim proposed a "Hints" object as an argument to the addStream() method as a way for the application to specify what expectations it requests of the stream. http://lists.w3.org/Archives/Public/public-webrtc/2011Oct/0047.html I propose that the same object be re-used as an (optional) argument to getUserMedia() to allow the application to *request* certain characteristics of the MediaStram it wants to receive. These are merely requests because the UA is not obligated to fulfill them, and of course, the user may over-ride them at any time. Thus the application cannot be guaranteed to receive a MediaStream with the same characteristics it asked for. However, some applications will need a minimum set of requirements in order to be able to function. I propose that we leave it up to the application to detect if the resulting stream has the characteristics it wants, and provide the user with an appropriate message (and perhaps retry with another call to getUserMedia()) if it does not. ** Further, I propose that there should be no differentiation between a user denying a request or a request failing because of unavailable hardware, or any other unexpected reason. This should have a minimal impact on the user experience as the failure case for all of these can be handled in a similar manner by the application. ** To put all of this concretely, the proposed getUserMedia remains the same as the existing signature: void getUserMedia(MediaStreamOptions options, NavigatorUserMediaSuccessCallback? successCallback, optional NavigatorUserMediaErrorCallback? errorCallback); The MediaStreamOptions object is a well-defined JavaScript Object: { "audio": false, "video": false, "hints": { "audio": { "channels": "1 | 2" "application": "general | voip | music" }, "video": { "orientation": "front | back" } } } Essentially, the "hints" property is the equivalent of the Hints object proposed earlier on the WebRTC list. I suggest we start with a minimal set of hints, two for audio and one for video; and derive a process for adding new property and hint types. The reasoning for separating out the hints object into it's own property instead of in-lining it with the first two boolean properties is to simplify the common case of when the application does not want to provide any hints: getUserMedia({"video": true}); as opposed to an application that specifically wants the front-facing camera with stereo audio: getUserMedia({ "audio": true, "video": true, "hints": { "audio": {"channels": 2}, "video": {"orientation": "front"} } }); The behavior in the latter case would be to have the UA present the front facing camera in the authorization screen by default, while allowing the user to over-ride it (i.e. by switching the preview to the back camera, or by only choosing to provide mono audio, or no audio at all). The error callback would only be called if either video or audio were requested and could not be provided, but not if any of the requested properties in the hints object could not be met. The error code is always 'PERMISSION_DENIED' as currently specified in the spec irrespective of whether it was because of user action or hardware failure. ** I look forward to your comments and critique! Thanks, -Anant
Received on Thursday, 19 January 2012 07:07:33 UTC