- From: Harald Alvestrand <harald@alvestrand.no>
- Date: Mon, 19 Nov 2012 14:20:40 +0100
- To: "public-media-capture@w3.org" <public-media-capture@w3.org>
- Message-ID: <50AA3228.90706@alvestrand.no>
Moving this discussion to media-capture list, since that's where it belongs. -------- Original Message -------- Subject: Re: Synchronous getUserMedia proposal Resent-Date: Mon, 19 Nov 2012 13:13:41 +0000 Resent-From: public-webrtc@w3.org Date: Mon, 19 Nov 2012 14:13:08 +0100 From: Harald Alvestrand <harald@alvestrand.no> To: public-webrtc@w3.org Entering the stream early, even though the date is late... there was an alternate proposal being floated in Lyon. MediaStreamEventThingy getUserMedia(MediaConstraints constraints, optional SuccessCallback, optional ErrorCallback) interface MediaStreamEventThingy : EventTarget { MediaStream theStream; // in state "muted" until success attribute EventHandler onsuccess; attribute EventHandler onfailure; } if SuccessCallback is given, this is 100% the same as setting onsuccess to function(e) { callback(e.stream) }, and similarly for failure. This lets existing code go on working. This (a result object + onsuccess / onfailure handlers) is a pattern that I've observed elsewhere (in IndexedDB, for instance). Not being creative is a Good Thing. Note: People who want to shoot themselves in the foot will do videoTag.srcObject = GetUserMedia(constraints).theStream but this is incrementally more difficult than the "simply return a stream" option, so it's at least no worse. On 11/05/2012 11:41 AM, Adam Bergkvist wrote: > On 2012-11-02 19:32, Martin Thomson wrote: >> In its simplest form: >> >> MediaStream getUserMedia(MediaConstraints constraints); >> >> This returns a stream that provides no content (open option: a tainted >> stream that can only be displayed locally). >> >> Consent is indicated with a new onconsent event on the stream; failure >> reuses the onended event. A new reason parameter is added to the >> onended event indicating the reason (this includes all existing onended >> reason codes, if any, plus all getUserMedia error codes). >> >> The major complaint with this is that it leads to an >> inaccurate/misleading expectation about the usability of the stream. >> That expectation can lead to the assumption that consent is granted, >> which would be a bad assumption. > > This approach is not flawless, but to me it seems like the most > reasonable one at the moment. > > We already have the concept of a stream that is dispatched to > JavaScript but the source is not ready to provide data yet. This > currently happens when you receive a stream over a PeerConnection and > all the tracks are muted until data arrives over the network. I think > gUM() with a return value could be treated similarly, and local data > is suspended until the user grants permission. > > In the network case, a media description is used to create the stream > and the receiving side and it's pretty capable of describing future > stream content. In our local case, the user may only grant one media > component. Perhaps ended track state is good enough to solve this. > > I think we'll freak people out if a tainted stream is delivered at > once. Even though page authors can't access the content or transport > the stream, they can mix the camera view into the page content and > that may make people uncomfortable (depending on the page they're > visiting). > > /Adam >
Received on Monday, 19 November 2012 13:21:15 UTC