- From: Harald Alvestrand <harald@alvestrand.no>
- Date: Thu, 21 Mar 2013 19:46:01 +0100
- To: public-media-capture@w3.org
That was too weird - trying again, without formatting.... The WebRTC GetUserMedia spec released on March 20 has this device enumeration API on the VideoStreamTrack and AudioStreamTrack: ------------------------------------- interface VideoStreamTrack : MediaStreamTrack { static sequence<DOMString> getSourceIds (); .... }; Explanation: getSourceIds, static Returns an array of application-unique source identifiers. This list will be populated only with local sources whose sourceType is "camera" or "photo-camera" [and if allowed by the user-agent, "readonly" variants of the former two types]. The video source ids returned in the list constitute those sources that the user agent can identify at the time the API is called (the list can grow/shrink over time as sources may be added or removed). As a static method, getSourceIds can be queried without instantiating any VideoStreamTrack objects or without calling getUserMedia(). ISSUE 1 Issue: This information deliberately adds to the fingerprinting surface of the UA. However, this information will not be identifiable outside the scope of this application and could also be obtained via other round-about techniques using getUserMedia(). (end quote) -------------------------- I suggest this is a bit limited, and we should instead offer: <proposal begins> interface MediaStreamTrack { static sequence<SourceInfo> getSourceInfos() } dictionary SourceInfo { DOMString id; // same as “sourceid” in previous proposal DOMString kind; // “video” or “audio” DOMString label; // only present if authorized VideoFacingModeEnum facing; // only for video sources } with the additional text: If the application is authorized to get info from one or more sources, the “label” attribute will be filled in for those sources, with exactly the same value as one would have had if the application had done getUserMedia with a constraint specifying that camera ID. <proposal ends> The interface is on MediaStreamTrack, which allows video and audio sources to be retrieved in a single call, and also allows additional types of source with no API change, if that ever becomes needed. It’s also easily extensible to allow other kinds of information to be returned, if desired. For reference, here’s the description of “label” from the MediaStreamTrack section: label of type DOMString, readonly User agents may label audio and video sources (e.g., "Internal microphone" or "External USB Webcam"). The MediaStreamTrack.label attribute must return the label of the object’s corresponding track, if any. If the corresponding track has or had no label, the attribute must instead return the empty string. ) (Note - section 3 of this spec version has some discussion on when the source is released to the application. This proposal only says that this also releases the label to view.) This extension will allow: - Untrusted applications to quickly determine whether a camera is present or not (satisfies the “does it make sense to offer video calling” requirement) - Trusted applications to create in-app UI that presents a sensible list of devices for the user to choose between - A clear definition of going from “untrusted” to “trusted” Note: It may make sense to have the in-chrome user permission prompt give alternatives: - “give access to all my cameras” - “give access to one specific camera” - “deny access” It’s an UI design decision whether or not all these need to be offered; this shouldn’t be in the spec.
Received on Thursday, 21 March 2013 18:46:33 UTC