- 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