- From: Rich Tibbett <richt@opera.com>
- Date: Mon, 27 Aug 2012 11:54:05 +0200
- To: Harald Alvestrand <harald@alvestrand.no>
- CC: "public-media-capture@w3.org" <public-media-capture@w3.org>
Let's take a look at the example you provide in your draft below: getUserMedia({ video: { mandatory: { minWidth: 1024, minHeight: 768 } } }, successCallback, errorCallback); Let's assume for a moment that this _may_ work only small proportion of the time. Once we start applying more constraints that number continues to fall exponentially. What the above code is suggesting is to support an exclusive design approach rather than an inclusive design approach - where if a user doesn't meet developer-decided expectations they will be flat out rejected without further explanation or regard. My question on your code above is: what if you have successfully obtained the HD video above and then you realize that the user is actually on a really slow network that would not be capable of streaming this HD video? You're going to want to scale that video down to something more amenable to the current internet connection. What I'd like to therefore see instead is something similar to the following: getUserMedia({ video: true } }, successCallback, errorCallback); function successCallback(stream) { // attempt to scale up to HD resolution (if it is supported // on this device) stream.videoTracks[0].width = 1024; stream.videoTracks[0].height = 768; // setup and start streaming the video (out of scope) } During the course of streaming, if you want to subsequently downgrade the pixel density of the video, at any time, to account for e.g. varying connection speeds or e.g. screen-in-screen display, you should be able to do something akin to the following: stream.videoTracks[0].width *= .5; stream.videoTracks[0].height *= .5; The great thing about this approach is, as Adam pointed out on the recent conference call, that the web page can report in detail why a web application is not willing to work with a camera media stream provided to that web page. Even though the web browser provided a camera stream to the web app as requested the application can decide not to work with it if they choose and they can say ('You browser doesn't support HD video' or 'You're web camera is not capable of 30 fps', etc). So for example, if a web application only supports HD video, which I would argue is a _very poor_ design approach for something like the web, a developer could enforce that behavior in their web application with something similar to the following code: function successCallback(stream) { // attempt to scale up to HD resolution (if it is supported // on this device) stream.videoTracks[0].width = 1024; stream.videoTracks[0].height = 768; // this application ONLY supports HD video. Abort if we can't // modify the current stream to HD resolution if(stream.videoTracks[0].width !== 1024 || stream.videoTracks[0].height !== 768) { console.log("You must have a HD Camera to use this app. Aborting."); return; } // setup and start streaming the video (out of scope) } Of course, what a conscientious web developer would do is implement the first snippet which I'll reproduce here: function successCallback(stream) { // attempt to scale up to HD resolution (if it is supported // on this device) stream.videoTracks[0].width = 1024; stream.videoTracks[0].height = 768; // setup and start streaming the video (out of scope) } ...which says: I _really_ want to stream HD video if that's a supported option. _Otherwise, I'll fallback to whatever resolution the web cam supports_. As we've seen above, a web application can enforce any particular capabilities on to a web cam stream to be mandatory but that occurs after getUserMedia invocation has already successfully returned a web camera stream. The implication here is that we can support all of the available use cases. The only difference seems to be one of user experience. If a web application only supports HD video resolutions and refuses to fallback to any stream of lesser quality then that is to be considered a failing of the developer/service. The side effect of this approach is to make web developers fully aware that if they do not intend to work within the capabilities of the majority (read: 99%+) of their user's hardware then there will be penalties for doing so in the form of having to inform their users that they're not willing to work with any provided camera streams because they don't meet some pre-determined, idealized capabilities the initial developers had in mind. I'd like to see our efforts moving in this direction away from the intentional exclusion of web users with lesser hardware capabilities such as those emerging slowly on to the web from e.g. the developing world or those with lesser hardware capabilities or those that can't or don't keep up with having the latest and greatest gadgets all of the time. Both inclusive and exclusive types of services remain implementable in this approach. Ultimately it is up to developers to decide which category they want to be in and implement their apps/services accordingly. Market forces will then decide whether those services succeed or not. Web applications that are adaptive and have flexibility built-in to their streaming capabilities should win. Exclusionary web apps/services that require 'ideal' user hardware and remain inflexible to changing user hardware trends and environments should lose. - Rich Harald Alvestrand wrote: > [technical contributor hat on] > Since I'm more comfortable with the I-D submissions process than > anything else, I decided to write an internet-draft detailing a proposal > for constraints to use for resolution manipulation. > A copy of the text version attached. > > Comments appreciated. > > -------- Original Message -------- > Subject: New Version Notification for > draft-alvestrand-constraints-resolution-00.txt > Date: Sat, 25 Aug 2012 23:03:33 -0700 > From: internet-drafts@ietf.org > To: harald@alvestrand.no > > > > A new version of I-D, draft-alvestrand-constraints-resolution-00.txt > has been successfully submitted by Harald Alvestrand and posted to the > IETF repository. > > Filename: draft-alvestrand-constraints-resolution > Revision: 00 > Title: Resolution Constraints in Web Real Time Communications > Creation date: 2012-08-26 > WG ID: Individual Submission > Number of pages: 7 > URL:http://www.ietf.org/internet-drafts/draft-alvestrand-constraints-resolution-00.txt > Status:http://datatracker.ietf.org/doc/draft-alvestrand-constraints-resolution > Htmlized:http://tools.ietf.org/html/draft-alvestrand-constraints-resolution-00 > > > Abstract: > This document specifies the constraints necessary for a Javascript > application to successfully indicate to a browser that supports > WebRTC what resolutions it desires on a video stream. > > > > > > The IETF Secretariat > > > > >
Received on Monday, 27 August 2012 09:54:42 UTC