- From: Cullen Jennings <fluffy@iii.ca>
- Date: Fri, 21 Feb 2014 17:39:03 +0800
- To: Jan-Ivar Bruaroey <jib@mozilla.com>
- Cc: "public-media-capture@w3.org" <public-media-capture@w3.org>
I probably would have supported this API had it been proposed a year ago but at this point I don’t see any advantage of it and I’m not seeing much consensus to change to it. On Feb 21, 2014, at 5:13 AM, Jan-Ivar Bruaroey <jib@mozilla.com> wrote: > (Hopefully fixes messed-up indentation) > > Constraints went general at every turn. What if we went the other way? > > Roc's MediaRecorder proposal http://lists.w3.org/Archives/Public/public-media-capture/2014Feb/0001.html was dismissed for not being compatible with constraints in gUM, so it seems there's no way around addressing gUM. > > Here's how to solve gUM with dictionaries, while keeping functional parity. > > The goal is to learn from constraints yet rid the spec of them entirely, as nothing less will simplify. > > dictionary UserMediaSettings { > boolean video; > boolean audio; > DOMString peerIdentity; > long width; > long height; > double aspectRatio; > double frameRate; > VideoFacingModeEnum facingMode; > double volume; > unsigned long sampleRate; > unsigned long sampleSize; > boolean echoCancelation; > > // Dictionary may be extended through gUM-specific IANA registry. > }; > > dictionary Request { > { > DOMString require; // explained below > DOMString prefer; // explained below > }; > > dictionary UserMediaSettingsRequest : Request { > { > boolean video; > boolean audio; > DOMString peerIdentity; > (unsigned long or UnsignedLongRequest) width; > (unsigned long or UnsignedLongRequest) height; > (double or DoubleRequest) aspectRatio; > (double or DoubleRequest) frameRate; > (VideoFacingModeEnum or sequence<VideoFacingModeEnum>) facingMode; > (double or DoubleRequest) volume; > (unsigned long or UnsignedLongRequest) sampleRate; > (unsigned long or UnsignedLongRequest) sampleSize; > boolean echoCancelation; > > // Dictionary may be extended through gUM-specific IANA registry. > }; > > dictionary UnsignedLongRequest { > unsigned long min; > unsigned long max; > unsigned long ideal; > }; > > Clients may list the names of keys they require. Example: > > var request = > { > require: "width, height", > width: { min: 640, ideal: 1280 }, > height: { min: 480, ideal: 768 }, > aspectRatio: 16/9, > frameRate: 60, > facingMode: "user", > }; > navigator.getUserMedia(request, success, failure); > > If they do, getUserMedia will fail if required keys are either missing, unknown or unsatisfied. > > There is no order by default, instead sources are ranked by how many settings they satisfy, with the UA breaking a tie for the default choice (which end-users may ultimately override). > > Clients who prefer an order may do this: > > var request = > { > require: "width, height", > prefer: "aspectRatio", > width: { min: 640, ideal: 1280 }, > height: { min: 480, ideal: 768 }, > aspectRatio: 16/9, > frameRate: 60, > facingMode: "user", > }; > navigator.getUserMedia(request, success, failure); > > which will pick a 16:9 environment-facing 75Hz camera over a user-facing 60hz 4:3 camera, without requiring 16:9. > > getUserMedia will not fail if preferred keys are missing, unknown or unsatisfied. > > MediaStreamTrack re-absorbs the affected functionality: > > interface MediaStreamTrack : EventTarget { > > UserMediaSettingsRequest getInherentCapabilities (); > UserMediaSettings snapshotCurrentSettings (); > void applySettings (UserMediaSettingsRequest settings, > VoidFunction successCallback, > ConstraintErrorCallback errorCallback); > attribute EventHandler onconflict; > > readonly attribute DOMString kind; > readonly attribute DOMString id; > readonly attribute DOMString label; > attribute boolean enabled; > readonly attribute boolean muted; > attribute EventHandler onmute; > attribute EventHandler onunmute; > readonly attribute boolean _readonly; > readonly attribute boolean remote; > readonly attribute MediaStreamTrackState readyState; > attribute EventHandler onstarted; > attribute EventHandler onended; > MediaStreamTrack clone (); > void stop (); > }; > > More than just renaming, there is no universal constraint concept, no Constrainable interface, no object-based constraint object, and no co-mingled domain-spanning data definitions outside of WebIDL. > > Things are well defined in context using standard WebIDL. > > MediaRecorder may borrow what little it needs or invent its own API. > > .: Jan-Ivar :. > > >
Received on Friday, 21 February 2014 09:39:05 UTC