- 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