- From: Jan-Ivar Bruaroey <jib@mozilla.com>
- Date: Fri, 01 May 2015 12:11:57 -0400
- To: "Cullen Jennings (fluffy)" <fluffy@cisco.com>, Peter Thatcher <pthatcher@google.com>
- CC: "public-webrtc@w3.org" <public-webrtc@w3.org>
- Message-ID: <5543A5CD.2080301@mozilla.com>
Agree we need this stuff, and I love dictionaries, but IMHO this web API surface is turning into a mess. The ideal surface for a parameter is: foo.bar foo.setBar() / foo.getBar() is some kind of c++ sickness. foo.setParameters({..., bar: }) / foo.getParameters().bar is a kick in the mouth to JavaScript. Synchronization? JS is entirely event-driven, so: var foo = {}; Promise.resolve(() => console.log(foo.bar + foo.fum); // "big deal" foo.bar = "big"; foo.fum = " deal"; WebIDL attributes are powerful, and existing idioms - like Events - go to great lengths to use them (as should we): e.g. var bar = new FooEvent({ bar: 42 }).bar; I love promises too. Love them. But the following is a kick in the mouth to ... I don't know, mouths: var fooParameters = foo.getParameters(); fooParameters.bar = "big"; fooParameters.fum = " deal"; foo.setParameters(fooParameters).then(() => console.log("all set!")); We should not let implementation dictate API, and We should need well-understood and explicit reasons before resorting to something this deplorable (see constraints). Comments inline. On 4/30/15 8:53 PM, Cullen Jennings (fluffy) wrote: > Looks reasonable to me. > > I think it needs to get just a bit more complicated so there is a way > to add new members to the RtpParameters dictionary in the future but > still have a way for applications to know which members are understood > by the browser they are running it. if (foo.bar !== undefined) // attribute supported by browser > On 4/21/15 7:06 PM, Peter Thatcher wrote: >> While talking to Stefan about the possibility of per-RtpSender >> control of VAD, and thinking about all the recent discussion around >> MSID, I realized that there was a common need to add parameters to >> addTrack. >> >> I propose we add a dictionary parameter "RtpSenderInit", like we have >> DataChannelInit that contains parameters for >> PeerConnection.createDataChannel without making the parameter list a >> mess. +1 >> IDL that would retain current semantics could look like this: >> >> >> partial interface PeerConnection { >> RtpSender addTrack(MediaStreamTrack track, RTCRtpSenderInit init); >> } >> >> dictionary RTCRtpSenderInit { >> sequence<MediaStream> streams; >> } AFAIK a key motivation behind the InitDict pattern is to support cloning like this: var foo = new Foo({ bar: 42 }); var foo2 = new Foo(foo); console.log(foo2.bar); // 42 Working backwards from that suggests RtpSender attributes and InitDict members should line up. >> A more advanced form, if we choose to add more parameters later, >> could look like this: >> >> dictionary RTCRtpSenderInit { >> // These are based on our discussion of MSID. >> DOMString label; >> sequence<DOMString> synchronizationGroups; >> >> // The initial RtpParameters to use, as if you call .setParameters >> immediately after >> // calling addTrack. >> RtpParameters parameters; >> } Why do we need two classes of properties (RtpParameters vs. other RtpSender arguments)? What would dictate where a new feature goes? >> ​dictionary RtpParameters { >> // This is based my discussion with Stefan. >> boolean voiceActivityDetection; >> }​ >> >> >> >> Let's continue the discussion around voiceActivityDetection, >> synchronizationGroups, and label/ID on separate threads, but for this >> thread, I'd like to ask the group: Does it look like a good idea to >> follow the createDataChannel(..., DataChannelInit) pattern by having >> addTrack(..., RtpSenderInit)? >> >> >> I'm in favor of it because: >> 1. We'd avoid with a mess of parameters in addTrack over time. >> 2. It gives the app to specify initial RtpParameters (such as VAD, >> potentially). >> 3. It follows the same pattern we already have for >> createDataChannel, which has been successful in adding many options >> without making the parameter list a mess. >> 4. It gives us more flexibility in our work around IDs and labels. >> >> Thanks, >> Peter We should look at imageCapture [1] which seems to have iterated on this subject. I was initially going to call it out here as a bad example, except it appears to have improved since last I looked. .: Jan-Ivar :. [1] gmandyam.github.io/image-capture
Received on Friday, 1 May 2015 16:12:27 UTC