- From: Jan-Ivar Bruaroey <jib@mozilla.com>
- Date: Tue, 15 Oct 2013 18:02:54 -0400
- To: "public-webrtc@w3.org" <public-webrtc@w3.org>
- Message-ID: <525DBB8E.5040901@mozilla.com>
Hi all, Here's some feedback after cleaning up constraints for createOffer/Answer in PeerConnection in Firefox. They're in engineering-style bullet-points, so my apologies in advance for the terseness (these are all requests for spec changes). These are probably more controversial than the feedback I just posted for gUM in media-capture, so I'll jump right in: 1. About the settings passed to createOffer/Answer & addStream: These are not really constraints IMHO! * I see constraints as defined in gUM by their /reduction/ algorithm on some starting pool of similar-propertied things, candidates. Applying this model to the abstract "capabilities" of PeerConnection seems like a stretch that would need a lot of upside to justify the complexity and confusion it adds upfront (like the inverse logic, and whether these things and gUM-constraints are interchangeable) * Differences from gUM constraints: o There is no "audio" or "video" top-layer, we jump right into mandatory vs. optional. o There's no pool of similar-propertied things to reduce, so the reduction algorithm for optional constraints doesn't fit, and the array construct serves no purpose (other than that the whole category is not-mandatory) o The mandatory algorithm boils down to "use these settings (which you must support)". Very simple. o Once unknown keys have been checked for, there's no difference between mandatory and optional internally, which boils down to a flat struct of settings. o OfferToReceiveVideo, OfferToReceiveAudio and VoiceActivityDetection are effectively features you turn ON in most cases, not limiters or reducers. + This manifests itself as a problem in the optional case where it's not clear how to handle failures of something that is "optional", does it fire the error-callback or does it proceed without error? This doesn't come up in gUM. * The last thing I said about a request being "optional" doesn't even make sense, which is the next problem: In place of the reduction algorithm, which doesn't fit here, we/I succumb to attempts at intuiting downstream uses for the mandatory vs. optional distinction, which in itself is troubling. The big one is: o "Otional" means "Do this if you can" * But say the system runs out of ways to receive video because we are receiving 50 videos already, does this setting being specified as "optional" mean we fire the error callback or push through silently? - Regardless of your answer, you must admit you are far removed from the gUM constraints algorithm. 2. MediaStreamConstraints seems mis-named. It appears to house PeerConnection-specific settings, like OfferToReceiveVideo etc. not settings for MediaStreams. Here's what I propose we do instead for PeerConnection: * Declare createOffer/Answer/addStream to take a 'Settings' /dictionary/. o This dictionary has /mandatory/ and /optional/ members like today, except that optional is another dictionary not an array. * Remove any mention of these being constraints (which they are not), and o spell out a simple "unknown mandatory settings fail (and mandatory trumps optional)" algorithm. This would pretty much work with what we have already. Thoughts? .: Jan-Ivar :.
Received on Tuesday, 15 October 2013 22:03:22 UTC