- From: Martin Thomson <martin.thomson@gmail.com>
- Date: Tue, 5 Feb 2013 11:56:56 -0500
- To: "public-media-capture@w3.org" <public-media-capture@w3.org>
As requested in the meeting, this is how you request two video streams: var video1 = new VideoStreamTrack(constraints1); var video2 = new VideoStreamTrack(constraints2); var stream = new MediaStream([video1, video2]); navigator.getUserMedia(stream, successCb, errorCb); Furthermore, you can implement the old/existing API with the following monkey patch, and therefore I'm inclined to remove the option to pass constraints... var theRealGUM = navigator.getUserMedia; navigator.getUserMedia = function(constraintsOrStream, success, error) { if (! constraintsOrStream instanceOf MediaStream) { var tracks = []; if (constraintsOrStream.audio) { tracks.push(new AudioStreamTrack(constraintsOrStream.audio)); } if (constraintsOrStream.video) { tracks.push(new AudioStreamTrack(constraintsOrStream.video)); } var stream = new MediaStream(tracks); theRealGUM(stream, success, error); } else { theRealGUM(constraintsOrStream, success, error); } }; On 6 December 2012 12:36, Martin Thomson <martin.thomson@gmail.com> wrote: > Option 3 required that users create MediaStreamTrack objects of > specific types using the new operator. > > var audio = new AudioStreamTrack(...); > var video = new VideoStreamTrack(...); > var stream = new MediaStream([audio, video]); > navigator.getUserMedia(stream, successCb, errorCb); > > EKR wants to ensure that users who aren't constrained by the sorts of > constraints that lead to the need for this synchronous option aren't > forced to go through the extra steps. > > navigator.getUserMedia({audio:true, video:true}, successCb, errorCb); > > This is trivially possible with an overload/union type: > > partial interface navigator { > void getUserMedia(GetUserMediaInput shape, > GetUserMediaSuccessCallback success, GetUserMediaFailureCallback > failure); > } > typedef (MediaStreamConstraints or MediaStream) GetUserMediaInput; > callback GetUserMediaSuccessCallback = void (MediaStream stream); > callback GetUserMediaFailureCallback = void (GetUserMediaError error); > interface GetUserMediaError : Error { > // not sure what goes here in addition to the other stuff > } > > The success callback includes the same stream you provided as input, > or a newly created one that is based on your input constraints. Same > API. > > Constraints are attached to tracks in the /higher effort/ API using > MediaTrackConstraints, which is nicer and enables things like getting > multiple cameras. MediaStreamConstraints becomes the low-road option > for getUserMedia. > > I briefly considered having getUserMedia return the MediaStream that > it creates, which would enable the creation of a placeholder using the > existing API, which would get us option 1 as well, but that seemed a > little over the top. > > --Martin
Received on Tuesday, 5 February 2013 16:57:23 UTC