- From: Jan-Ivar Bruaroey <jib@mozilla.com>
- Date: Tue, 17 Dec 2013 14:38:01 -0500
- To: Justin Uberti <juberti@google.com>, Harald Alvestrand <harald@alvestrand.no>
- CC: "public-webrtc@w3.org" <public-webrtc@w3.org>
- Message-ID: <52B0A819.8070706@mozilla.com>
On 11/26/13 12:17 PM, Justin Uberti wrote: > On Tue, Nov 26, 2013 at 7:33 AM, Harald Alvestrand > <harald@alvestrand.no <mailto:harald@alvestrand.no>> wrote: > > Thanks for putting together this analysis! > > > On 11/26/2013 03:33 PM, Adam Bergkvist wrote: > > Constraints in the WebRTC specification. > > The spec currently uses constraints in three ways: > 1. Constructor argument > 2. Arugment to method modifying an object (e.g. updateIce()) > 3. Arugment to method performing an action on an object (e.g. > addStream()) > > The first two usages seem to work OK. 1) is similar to > constructing a Constrainable object and then calling > applyConstraints() and 2) is pretty much applyConstraints() > with a different name. 3) is trickier. Even though the call is > made on a Constrainable object, the constraints are associated > with an operation made on the Constrainable object and not the > object itself. I think we should avoid this kind of usage. > > > To my mind, the operations in 3) should be grouped into two groups: > > - Those that "really" apply the constraint to a newly created > object that has, up to now, been hidden. In the case of addStream, > I think we "found" the newly created object at our last meeting. > > - Those that don't have a constrainable object (either hidden or > overt) to apply the constraint to. In these cases, I question the > value of this usage, and agree that options dictionaries are > likely to be better. > > > To evaluate each constraint, I've used the following two > questions. If the answer is yes to both of these questions > then a settable property should not be a constraint. > > 1. Is there a set of possible values that are the same for all > browsers? > 2. Will this settable property succeed if applied at the > correct state? I.e., it shouldn't fail because a value is out > of the range of what the browser is capable of. > > Even though the answer to question 2 may be "no", there might > still be a reason to use a regular settings dictionary. > > # Constraints > > ## IceTransports > Used with PeerConnection() Constructor and updateIce() > > Controls which types of candidates the ICE agent is allowed to > use. > > The possible values are "none", "relay" and "all". If a > browser, for some special reason, is configured to not support > all these values, that might be a reason to have it as a > constraint. > > Proposal: Move to RTCConfiguration? > > > I agree that RTCConfiguration seems like a better home for this > ICE-related property, since RTCConfiguration already holds the other > ICE-related properties. As a result, I think that updateIce() should > probably become setConfiguration() or updateConfiguration(). > > Note though that we may still need some way to pass in global settings > to the PeerConnection, e.g. the identity to use for DTLS. Therefore, > we may still need a settings dictionary in addition to the > RTCConfiguration (unless we want to make RTCConfiguration the sole > global-settings object). +1 on updateConfiguration() and making RTCConfiguration the sole global-settings object. > ## OfferToReceiveVideo/Audio > Used with createOffer() > > Used to express a preference for receiving a media type (even > though the media line is not added as a result of addStream()). > > Proposal: Move to CreateOfferOptions dictionary > > ## IceRestart > Used with createOffer() > > Force generation of new ICE credentials. > > Proposal: Move to a CreateOfferOptions dictionary > > ## VoiceActivityDetection > No usage documented. > > Enables VAD, if available. > > Proposal: Should be a constraint on the DooHickey object. > > > As defined right now, this constraint to createOffer controls the > inclusion of the CN (RFC 3389) codecs in the offer, which are used > when doing VAD with codecs that don't have built-in CN, e.g. G.711. > That seems like something we may need to retain, even if we have some > other property on the MediaStreamTrackSender that controls whether CN > is *actually* used for the specified track. In other words, proposal: Move to a CreateOfferOptions dictionary. > ## RequestIdentity > Used with PeerConnection() Constructor, createOffer() and > createAnswer() > > Indicates whether an identity should be requested. > > Proposal: Move to RTCConfiguration and > CreateOfferAnswerOptions dictionary > > # addStream() Method > > I think we should remove the MediaConstraints argument here > since it's an operation of type 3) mentioned above. It's also > a question about what precision we can have on the constraints > since a MediaStream can contain several tracks and it's likely > that the script would like to address constraints to > individual MediaStreamTrack objects. We're probably better off > with having constraints on the DooHickey object. > > > I think it would make sense to have addStream constrain the > DooHickey (whatever we choose to call it), in the same way that > getUserMedia() constrains the resulting MediaStreamTracks. > > > While your logic is reasonable, I'm still not sure a constraint makes > sense here, especially since we don't have a great example of how this > should be used. (And, of course, there is the pending proposal to > refactor addStream into addTrack.) I would suggest omitting it, or > making it a dictionary, until we have a better idea regarding the usage. +1. .: Jan-Ivar :.
Received on Tuesday, 17 December 2013 19:38:31 UTC