15:56:00 RRSAgent has joined #webrtc 15:56:00 logging to http://www.w3.org/2015/09/10-webrtc-irc 15:56:06 Zakim has joined #webrtc 15:57:51 RRSAgent, make logs public 15:59:46 Agenda: https://www.w3.org/2011/04/webrtc/wiki/September_9_-_10_2015#Sept_10 16:00:27 Meeting: WebRTC F2F 16:00:42 Chairs: Harald, Stefan, ErikL 16:00:54 I have made the request to generate http://www.w3.org/2015/09/10-webrtc-minutes.html vivien 16:00:57 Can you guys hear us? 16:01:00 Erik_L has joined #WebRTC 16:01:17 It seems you guys cannot hear us 16:01:21 as in the room 16:01:24 but we can hear you 16:03:09 burn has joined #webrtc 16:06:24 DrAlex has joined #webrtc 16:06:28 adamR has joined #webrtc 16:08:48 sherwinsim has joined #webrtc 16:09:08 started getting static when people talk in the room 16:09:31 yep I hear it too 16:09:35 sherwinsim, FYI all remote speakers are muted in WebEx don't forget to unmute yourself if you want to talk and even better use "q+" on IRC to indicate you want to talk 16:10:04 still static-y correlated to someone talking 16:10:14 victor_pascual has joined #webrtc 16:10:16 static for me too from the room -- jan-ivar was clear (no static) 16:10:28 was good initially 16:10:33 probably originating from Bernards end 16:11:01 I think that's likely 16:11:36 can you guys talk again? 16:11:40 bernard was clear 16:11:47 RRSAgent, draft minutes 16:11:47 I have made the request to generate http://www.w3.org/2015/09/10-webrtc-minutes.html vivien 16:11:48 it's gone for me -- the static 16:11:50 it's good now 16:11:55 it went away 16:12:50 jib joining caused it to start again 16:13:21 mathieu has joined #webrtc 16:13:28 stefanh has joined #webrtc 16:13:40 tedh has joined #webrtc 16:14:01 dom has joined #webrtc 16:14:50 Varun has joined #webrtc 16:15:05 Varun has left #webrtc 16:15:06 ShijunS has joined #webrtc 16:15:30 varun has joined #webrtc 16:15:42 Still happening with jib gone this time 16:16:06 dom_ has joined #webrtc 16:16:13 DanD has joined #webrtc 16:16:15 scribenick: dom_ 16:16:33 Topic: error reporting for pc 16:16:34 jib has joined #webrtc 16:17:02 Shishir-CTXS has joined #webrtc 16:17:03 peter: initiql intention of onerror was to signal dtls errors 16:17:16 ... now covered by the new connection state 16:17:20 -> https://www.w3.org/2011/04/webrtc/wiki/images/1/14/WebRTC_1.0_objects_at_2015_f2f_%282%29.pdf slides 16:17:40 static continues, though we can hear the mic. Room speakers will need to speak up. Really more distortion than static per se 16:17:58 ... PR 92 offers warning / fatalerror event that would report other type of errors 16:18:12 justin: these errors would be not actionable by the app 16:18:14 (reviewing PR 292 on slides 13) 16:18:20 s/PR 92/PR 292/ 16:18:25 ... only point would be logging and we already have entry points for that 16:18:30 s/slides/slide/ 16:18:38 ... it would be just free form text 16:19:00 mathieu: some times things don't work with no indication as to what is not working 16:19:24 ... I wonder if such a mechanism could not help detect these issues 16:19:38 martin: you would still get in a failed state 16:19:59 ekr: we get reports from people "things are busted" 16:20:25 ... it would be nice tho have a hook for the app to be told where things are clearly wrong 16:20:32 ... but I don't feel strongly about it 16:21:21 ekr: there are e.g. some NSS errors we could bubble up with this 16:21:40 ... we could as well bubble them up in the console 16:22:05 martin: that's what is done with XHR with CORS errors 16:22:24 cullen: debugging idp errors is a nightmare at the moment 16:23:06 martin: I don't think the two points (warning/fatalerror) are particularly needed since the pc would go to the failed state 16:23:38 justin: it used to be that we didn't have callbacks on some errors; but now we have the right transition states so I don't think we need this 16:25:23 dom: I don't feel anybody is pushing for it, so I'd say we drop it 16:25:31 mathieu: issue with just reporting in console is only applicable for errors in the development env 16:25:49 dom: I'm not hearing much support, and we have plenty of other work to do, suggest to drop 16:26:04 hta: show of hands of who want this? 16:26:17 [a couple of hands up] 16:26:41 RESOLUTION: we drop PR 292 (generic error management) 16:27:09 DanB: for the record, the people who raised their hand are people with experience trying to get people to debug their app 16:27:42 Topic: SessionDescription accessors 16:27:43 adambe has joined #webrtc 16:27:45 -> https://www.w3.org/2011/04/webrtc/wiki/images/5/57/SessionDescription_accessors.pdf slides 16:28:02 [Justin presenting] 16:28:14 I was trying to raise my hand but things moved on before I could. ANd hard to hear people speaking away from the mic due to distortion and volume 16:28:48 justin: this is for getting access to the pending and current remote session description 16:29:19 ... currently, you can only get either the current or the pending description 16:29:21 q? 16:29:25 ... not the 2 simultaneously 16:30:01 ... PR #225 proposes to offer both current and pending description, with pending null if none are pending 16:30:48 vivien: sure. I wasn't asking it to be spoken into the room. I was noting it for the record here since things had already moved on. I was trying to vote per the request but before I could decipher what was said and type it people had decided. FYI 16:31:02 ... Jan Ivar has an alternative proposal 16:31:05 ShijunS has joined #webrtc 16:31:19 ... stable vs "last-set" 16:32:39 ... [review of pros/cons] 16:32:46 ekr: I prefer #225 16:32:59 what was decided regarding jan-ivar's suggestion (to add slides)? I don't see it in the notes and that discussion happened during the worst of the static. 16:33:05 cullen: the way to look at this is that we messed un in our initial design 16:33:25 ... #225 gets out of our mess with a clearer set of values that can be easily understood 16:33:43 hta: anyone who prefers Jan-Ivar model? 16:33:48 [no one speaks up] 16:34:45 RESOLVED: No change to session description accessors (ie leave 225 as is) 16:35:20 Topic: dropped media 16:35:37 [martin presenting] 16:36:03 @@martin-slides 16:36:30 reviewing https://github.com/w3c/webrtc-pc/pull/283 16:36:49 Martin: the basic premise is that stuff arrive even though you didn't negotiate it 16:37:03 ... for debugging purposes, you want to know when media arises 16:37:35 ... you might also want to generate an offer/answer in this case but less important 16:38:28 ... it might be that the other side has a defect (e.g. sending media in the wrong codec) 16:38:49 ekr: I thought this was about race conditions rather than defects - defects can go to the console 16:39:13 ... e.g. receiving media before receiving the answer 16:39:36 ... it's likely to happen when you using @@@ 16:39:45 ... let's use this as our guidign use case 16:40:23 s/ign/ing/ 16:41:37 martin: the PR needs to explains more what to do with the event in case of renegotiation 16:43:42 cullen: as long as you receive packets that match your initial offer, you should be able to deal with the received media even if the signaling hasn't closed the looped yet 16:44:20 ekr: there are 3 cases: the defect, the race condition, @@@ 16:46:22 justin: we should fast forforward the content when the stream gets actually created (?) 16:46:37 mathieu: why do you care about getting media that early? 16:46:46 ... how do you populate the mediastream? 16:47:04 cullen: offer/answer is a 2-ways handshake 16:47:39 ... imagine a re-offer - the remote media will change as soon as that offer is received, before the answer comes back 16:48:12 ekr: this can only genuinely happen when your offer is not behind a NAT 16:49:13 cullen: we assume that the ICE and DTLS channels have already been set up 16:49:32 ... I agree that the mediastream setup would be tricky 16:50:23 alex: so what do you do with the media before the answer has been received? 16:50:45 justin: as soon as you have sent the offer, you should be able to play the media 16:51:07 alex: how long would you keep up with that un-signalled media? 16:51:25 bernard: the answer has also the DLTS fingerprint - how do we manage that? 16:51:40 justin: let's keep this as a separate issue 16:52:22 ... I think for the renegotiation case, we need to move to a situation where we have a rtpreceiver as soon as you have sent the offer 16:53:32 cullen: so we want to close this PR and replace this with an early rtpreceiver 16:53:55 justin: there is still the question of what the msid should be 16:54:58 ... the question about how to deal with the case where the dtls fingerprint isn't solved yet though 16:55:44 ... we shouldn't have different security properties based on whether an event fires 16:56:07 ekr: a partially validated state isn't something we want to go in 16:56:21 ... we could buffer the data as an acceptable situation 16:56:34 ...s/situation/solution/ 16:57:09 justin: unauthenticated media should not surfaced to the app - it should be either buffered or dropped 16:58:17 mathieu: with renegotiation based on changing certificates, how does this impact the buffering of unhandled media? 16:58:48 justin: I think it's the same bucket as the initial dtls fingerprinting 16:59:41 justin: do we need to deal with errant media? 17:00:02 cullen: the ietf spec says that if you're getting rtp that doesn't match your offer, you drop it 17:00:30 justin: I want this to be very explicit 17:00:52 justin: we also need to determine what happens with SSRC changes 17:00:58 ... suggest we punt this to the IETF 17:01:22 Topic: ICE pool size 17:01:37 cullen: we have had agreement on this for a long time, but without a specific proposal 17:01:55 https://github.com/w3c/webrtc-pc/pull/289 17:02:06 ... PR 289 proposes to add a new attribute to the pc to define the ICE pool size with a default to 0 17:02:44 ... a non-0 value allows to gather ice candidates faster, to the cost of generating more ICE traffic 17:03:09 justin: main question is whether you can set this only initially or can change it later 17:03:18 ... [reading from jsep] 17:03:32 ... so we may need to have this in setConfiguration as well 17:03:41 ... in which case this PR is not sufficient 17:04:23 peter: what happens if I have 2 transports and set the pool size to 10? 17:04:49 justin: there will be 8 candidates that won't be used but will be kept warm 17:05:59 hta: the semantics of having candidates in the pool need to be described somewhere 17:06:21 ... but beyond that, is the control surface exposed on the right object? is is the right api? 17:07:52 mathieu: what happens if you create 3 m-lines and then set the pool size to 1? 17:08:05 ekr: sounds like a no-op 17:08:39 justin: the only thing needed here is to add the property to setConfiguration 17:09:01 cullen: I've added a comment to a PR 17:09:09 justin: should we use short or long? 17:09:35 hta: I recall the advice is to use long unless there is a specific restriction to the underlying value space 17:10:06 Topic: review of CSRC proposal 17:10:59 virginie has joined #webrtc 17:11:05 [bernard presenting] 17:11:12 [review PR 300] 17:12:19 martin: the voiceFlag - do we need this? 17:12:45 cullen: it is often not very reliable, but wrote it up in case someone want it badly 17:12:59 martin: I think we should remove voiceFlag 17:13:45 hta: so with the timestamps: we collect this data? 17:13:57 Present: Shijun Sun, Bernard Aboba, Adam Roach, Martin Thomson, Erik Rescorla, Justin Uberti, Cullen Jennings, Ted Hardie, @@@Citrix, Peter Thatcher, @@@Google, Varun Singh, Dan Druta, Mathieu Hofman, Alexandre Gouaillard, Alan Johnston, Daniel Burnett, Dominique Hazaël-Massieux, Vivien Lacourba, Stefan Håkansson, Harald Alvestrand, Erik Lagerway 17:14:03 On the phone: Adam Bergkvist, Jan-Ivar Bruaroey, Marie Reavy, Randell Jesup, Sherwin Sim, Victor Pascual 17:14:08 cullen: the spec proposes a magic value of 10s of collection 17:14:55 justin: why are we using these timestamps rather than using the immediate average? 17:15:35 bernard: we looked at this in ORTC; the idea with this approach is to avoid having people poll very frequently to get an accurate picture 17:16:08 justin: 10s for a real-time display sounds odd 17:16:19 cullen: 1s woud work better for you? 17:16:28 [agreement that 1s is sensible] 17:17:03 hta: audioLevel - is that the latest value? 17:17:14 cullen: I'm editing the PR as we speak 17:17:55 justin: if there are no csrcs, @@@ 17:19:04 cullen: we could add a requirement for the browser to compute the audioLevel when not available from the mixer 17:19:21 [agreement that this would be a good addition] 17:23:47 can someone try leaving and re-entering, and/or check mic hardware there? THe noise is making it really, really hard to follow remotely 17:33:11 tedh has joined #webrtc 17:33:45 [break ends] 17:35:25 Topic: addmedia and warmup 17:38:21 The spreadsheet should be here: 17:38:22 https://docs.google.com/a/google.com/spreadsheets/d/14FSqawzGQCLq9pvd5mCQW5vyB-B-TIpJoHjZbPQcORg/pubhtml 17:38:29 can someone verify that this works? 17:39:52 [Peter reviews use cases worked with the various warmup proposals] 17:40:59 ... with createNullMedia, there is no way to know if the other side has stopped except reading the SDP 17:41:12 ... not clear either how to deal with 187 17:41:50 ... I've also added the race condition use case 17:43:26 cullen: 2nd and 3rd feel quite similar 17:43:42 ... I suggest we should first decide between 1 vs 2/3 17:43:51 ... and then pick between 2 and 3 17:44:18 martin: based on the earlier discussion, I'm happy to go with 3 17:44:45 ... I don't think there is any signficiant value in patching stuff up 17:45:03 ... the early media use case is compelling enough 17:46:19 [several people agree 3 is right] 17:46:34 hta; we should define addTrack in terms of addMedia if we go with 3 17:46:44 s/;/:/ 17:47:10 mathieu: if you're already receiving video and you addTrack video to send 17:47:32 ... you have to create a new receiver, or can you reuse it? 17:47:40 ... what's the behavior of addtrack? 17:47:47 q? 17:48:33 adam: currently addtrack reuses the sender even if the receiver is in use 17:49:25 adamB: if we define addTrack in terms of addMedia, how do we deal with the mediastream arguments? 17:50:03 hta: addTrack would be defined as addMedia and then replaceTrack 17:50:22 martin: I'm a little uncomfortable with the notion of having 2 or 3 ways of doing the same thing 17:50:37 hta: I've no problems if they are only shorthands 17:50:54 martin: but we need to make sure they have the same semantics 17:51:28 peter: it's true that we would have to define how to deal with the streams in addTrack - but doesn't have to be doable in javascript 17:51:44 justin: how do you put a track on hold? 17:51:54 peter: that's not part of this PR 17:52:25 martin: this was initially described as frobing the send/receive attributes 17:53:25 ... I'm somewhat unhappy with the abstraction but we need to be able to do that 17:53:52 justin: we need to make sure we get in the right direction and this won't crumble when we add these additional use cases 17:54:24 cullen: I think we can agree this is the right direction and still need to polish it to address all the use cases 17:54:54 stefan: how does this fit with our goal to go to 1.0? we need to set a clear deadline 17:55:44 martin: I think we should merge with what we agree on, and do the follow-up in a subsequent PR 17:56:36 ... we also need to understand the lifetime of identifiers 17:57:18 justin: so we're proceeding with a couple of pull requests; we need to list explicitly the issues that will need to be addressed 17:57:26 ... this includes the msid for early media 17:57:39 ... what else needs to be addressed? 17:57:56 stefan: there is also dealing with the mediastream arguments in addTrack 17:58:28 peter: this is only an issue if we need to make addTrack implentable in JavaScript 17:58:48 ... we could also set an additional parameter to the dictionary arguments of addMedia 17:59:21 mathieu: one concern: "media" is a terrible overloaded term 17:59:49 peter: we had a suggestion of RTCSdpMediaSection 18:01:28 ... so, we know we don't want addMedia, we want something else TBD 18:01:43 ... How do we deal with removeTrack? 18:02:18 hta: we remove the track from the sender 18:02:39 justin: it would be the equivalent of setting send to false 18:02:59 peter: so removeTrack is not sending anymore but still receiving? 18:03:08 ... I was kind of hoping we would get rid of it 18:03:36 hta: if we define it as replaceTrack(null), then we should define replaceTrack(null) as doing what we need 18:05:44 peter: I'm not sure what's the benefit of removeTrack 18:06:15 peter: so addTrack is "send/receive' 18:06:28 ... and removeTrack is stop sending? 18:07:41 Topic: WebRTC objects 18:07:57 [peter presenting updated pull request for connectionState] 18:08:38 -> https://docs.google.com/presentation/d/1ywVYamOdAh2N4H2uutdQoxc28yc49qHBbVJqH4xpf74/ Peter's slides WebRTC Objects - recap day 2 18:08:48 peter: what state do you get in when all the transports close? should we go back to 'new'? 18:09:05 martin: I think we need an additional 'closed' state 18:10:54 cullen: we could rename 'new' to mean 'not yet connected' and then use it also for all closed 18:11:22 adamR: how about 'idle'? 18:12:36 justin: I'd be fine with using 'new'; prefer to 'idle' 18:13:13 dom: we could start with 'closed' as websockets? 18:13:18 justin: don't like it 18:13:24 [coin flip] 18:13:31 peter: 'new' it is 18:13:48 peter: moving on the PR 273 18:14:54 ... propose an enum with the attribute degradationPreference 18:15:05 martin: might want to bikeshed on this in the PR 18:16:14 peter: on to codec reordering 18:17:55 AndyH has joined #webrtc 18:20:22 [agreement this is the right approach] 18:20:40 peter: on to rtpsender.getCapabilities 18:21:54 ... this would allow to determine whether a browser can e.g. join an existing conference in a given codec 18:22:34 ekr: this is better than to go through createOffer but it's a very marginal improvement 18:23:00 martin: it might actually help us with the codec preference use case 18:26:55 ekr: given that we have RTPSender, this looks good 18:27:59 jan-ivar: I think the name getCapabilities() is confusing since we use it for constrainable interfaces 18:28:13 martin: I don't think that's a problem 18:28:20 ... why is this is on sender? 18:28:26 not that it matters to the discussion, but we do have some level of resource reservation for hardware codecs in mobile. However, it may not be tied properly to the Promise/etc. 18:28:34 peter: you want it on receiver too? 18:29:35 martin: yes; checking the receiver in general might be better for the use case we described 18:30:24 Stefan: we still don't have a proposal for reordering pre-negotiation 18:31:30 martin: I can work on a proposal once we have the two proposals for codecs merged 18:31:36 Topic: Simulcast 18:31:39 -> https://www.w3.org/2011/04/webrtc/wiki/images/a/a7/Simulcast_in_WebRTC.pdf "Simulcast in WebRTC 1.0" slides 18:33:13 bernard: based on my understanding, we only talk about simulcast from the perspective of the sender 18:34:13 ... we have 3 options: have an option in createOffer (from adamR), use RtpSender.setParameters (from Peter), or stay with what we have (track cloning) 18:35:24 ... in the last option, you track clones for each of your variation 18:36:20 ... the browser might want to optimize and detect this as a simulcast, but in the dumb case, it would create 3 m-lines 18:36:40 ... advantage is that you don't have to change anything in the spec 18:37:27 ... you have per-encoding control through the constraints 18:37:52 ... some apps are already doing this - not sure their devs are very happy with it 18:38:42 varun: if you monitor the tracks, you can adjust 18:38:58 alex: I'm not sure that getStats() give you the right info for that at the moment 18:39:33 ... having a way to indicate to the browser that you want these tracks to be linked would be better 18:40:12 bernard: we said we would get different m-linees; looking at the bundle draft, it wasn't clear whether they could share the same payload type 18:40:58 cullen: if they come with different constraintsm they would have to be different payload type; not so for the bitrate 18:42:09 cullen: having to have the JavaScript adjust the bitrate over time will interfer with congestion control; doesn't seem good 18:43:18 martin: the problem with this option is that we don't have a clear signal from the browser side to properly optimize this 18:43:33 [adamR presenting "option A'] 18:44:10 adamR: all this does is to add a maxSimulcastCount on RtpSender to give the signal 18:44:23 martin: this would have to go through setParameters 18:44:27 adamR: ok 18:44:49 justin: this looks like OfferToReceiveVideo 18:45:19 ... it sounds like it brings a lot of implicitness 18:45:34 ... it delegates the negotiation to the other side (the SFU) 18:45:48 s/... it/Cullen: / 18:46:43 adamR: it's fairly simple to spec out 18:47:00 ... but it doesn't give a lot of control 18:47:35 ... there was also the approach that Harald suggested: always send e.g. 3 18:51:40 [Peter presenting Option B] 18:52:10 Peter: you use setParameters() to add add more encodings 18:52:34 hta: this assume you don't need to indicate simulcast before doing createOffer 18:52:44 peter: it doesn't change the SDP 18:52:56 cullen: it's not consistent with the IETF documents 18:53:12 ... you can't send stuff you haven't negotiated 18:54:28 ... if you receive 2 ssrc from the same port, the ietf say discard one of them 18:54:53 ... we would need to signal that this is simulcast 18:55:00 cullen: this is no longer rtp 18:55:06 adamR: nor SDP 18:55:49 cullen: I think it's a great API surface, but it needs to interact correctly with SDP 18:56:11 peter: I don't want to go there in 1.0 18:56:32 bernard: you could trigger onnegotiationneeded when setting this? 18:56:52 peter: no other setParameters has this effect 18:57:27 justin: backing up a little, what we want is a workable solution for the 1.0 timeframe 18:57:55 ... this proposal doesn't have dependencies on unfinished drafts as option A 18:58:17 ... it relies on SFU that expect this 18:59:15 bernard: how about an hybrid of A and B? you define your number of simulcast count ahead of the negotiation and then use this proposal to avoid the dependencies on the SDP draft 18:59:37 cullen: what's blocking the SDP simulcast draft? 19:00:00 adamR: there are controversies around overloading the payload type? 19:00:17 cullen: could we get this settled by the end of Yokohama? 19:00:22 justin: feels unlikely 19:01:31 cullen: the API surface looks OK, but not signalling this in SDP is wrong 19:02:07 peter: but the hybrid approach would address this right? 19:02:29 martin: why not just fix the simulcast draft? 19:02:47 justin: it creates a dubious dependency 19:03:28 hta: I would object to add a dependency to another unfinished draft 19:03:39 mathieu has joined #webrtc 19:03:42 justin; getting simulcast right is complicated 19:03:53 s/;/: 19:04:03 justin: there are a lot of details that are hard to get right 19:04:12 bernard: this has been going on for a decade 19:05:19 alex: if we were going for that hybrid approach with an SDP close to the current draft, without putting a hard dependency to the draft to avoid the delay, would that be acceptable? 19:05:28 justin: if that's possible yes 19:05:44 adamR: but that means this group is starting to define SDP semantics 19:07:13 hta: we could define the API surface without depending on the protocol wire 19:08:06 ... what's important to me is that you can ship a conformant implementation without @@@ 19:10:47 justin: it feels like we don't have a mature proposal for 1.0 19:11:05 cullen: I think we need this for 1.0 19:11:34 ekr: I think we should figure out how far we are to consensus before getting in the in/out discussion 19:12:35 bernard: current status (option C) is not completely satisfactory 19:12:49 ... option A relies on the MMUSIC draft 19:13:29 ekr: is the only problem with C that the browser can't be smart about it? 19:13:49 ... its major advantage is that it doesn't require any new SDP 19:14:12 ... could we reuse that SDP with the other proposals? 19:14:22 bernard: there is a gotcha there 19:14:33 ... @@@ 19:15:16 peter: we could go to an option D where you clone tracks and then frob the framerate scale 19:15:47 justin: option C is not compatible with scalable coding, so it's a non-starter for me 19:16:12 cullen: agree 19:16:46 hta: it's also perfectly possible to define this as an extension spec 19:17:14 ... and bake it separately from the spec 19:18:13 dom: +1 19:18:33 cullen: would not be happy with this given that browsers are shipping something in this space 19:18:52 ekr: what are the obstacles on converging? 19:20:07 justin: I would be much more confident that we could make progress in a separate spec 19:20:28 ... clearly it's nowhere near a slam dunk in terms of consensus 19:22:38 ted: do we already know whether an extension spec would go toward a or b today? 19:23:19 justin: I would prefer B 19:23:42 dom: I think option A is basically optimized for 1.0 shipping 19:24:00 ... so if we were going to an extension spec, B would seem the logical focal point 19:26:34 justin: B' seems to be the right approach 19:26:41 mreavy has joined #webrtc 19:27:07 cullen: B' sound good, but I want this in 1.0 19:27:49 stefan: who would object to have it as a separate draft? 19:27:53 cullen: I would 19:28:04 hta: having a separate draft doesn't prevent bringing in back 19:28:31 Keith has joined #webrtc 19:29:59 ted: as an rtcweb co-chair, I wanted to ask if requesting MMUSIC to have an interim before the Yokohama meeting so that they can have input before your TPAC meeting 19:30:28 [nods] 19:31:06 erik: we don't have consensus, which means simulcast is out for now 19:31:19 hta: there seems to be consensus on B' being the right starting point 19:33:02 cullen: how about we merge something with indications there is no consensus yet? 19:33:53 hta: I don't want to wait until this gets decided before we finalize the in/out 19:34:14 ... if mmusic says they can have an interim, we could delay till TPAC 19:34:24 ... if not, it's out 19:34:51 cullen: I think the out decision would have te be made by the the WG, not automatic 19:36:18 ekr: we should work on PR, see where the MMUSIC is going, and decide whether the proposal has consensus, there is consensus it's not ready, or there is no consensus, and then make a decision on a call 19:36:41 hta: we could say we should schedule a call once we have an answer from MMUSIC 19:38:32 hta: we would need a baked proposal 1 week before the call 19:38:39 hear 19:38:54 ted: there needs to be a 2 weeks advance notice for the MMUSIC interim 19:39:26 ... plus the time for logistics, earliest would be 4 weeks 19:40:10 erik: so we say it's out? 19:40:24 cullen: no, it's not yet decided whether it's in or out 19:41:04 danB: it's the same as others: until we have a ready PR, it's not going to be merged 19:41:23 erik: so it's undecided 19:42:35 stefan: when should we plan to have our a call? 19:42:44 dom: let's settle this offline 19:52:38 Zakim has left #webrtc 20:15:27 tedh has joined #webrtc 20:31:55 [meeting resumes] 20:33:05 dom has joined #webrtc 20:33:28 varun has joined #webrtc 20:33:36 scribe: varun 20:33:37 session starting. 20:33:46 Topic: in and out webrtc 1.0 20:34:15 stefanh: discussing PRs that are accepted 20:35:36 stefanh: discussing 291 20:36:05 petert: for 291, nothing needs to be messaged. confirm? 20:36:42 stefanh: 271, warmup is part of the transceivers. 20:37:19 adamR: related to 279, are we deprecating the offerToReceive? 20:37:29 justinu: yes. 20:37:54 stefanh: 300, is going address CSRC issues. 20:38:08 stefanh: 284, review ICE errors offline. 20:39:58 martint: will read and confirm if 284 looks good. 20:40:02 mathieu has joined #webrtc 20:41:32 stefanh: we haven't confirmed if we like addMedia as the name of the API 20:42:24 justinu: there is a distinction if people have reviewed the PR and looks good, and names and nits need to be fixed 20:42:36 stefanh: RtpSenderInit, in or out? 20:43:00 petert: has been outdated with transceivers. close PR. 20:43:33 stefanh: are we done? i.e., no more features to be added. 20:45:12 cullen: are we done? we are need diagnostics and stats to be added. 20:45:35 janivar: PR 301 is still needed. 20:46:32 ericr: not overly worried, if we are missing some information with getStats. 20:46:59 burn: can we make the decision: better error reporting and stats is not considered new features, just simple enhancements 20:47:25 dom has joined #webrtc 20:47:36 Topic: Media capture 20:48:20 dom: Mediacapture went to LC. some comments are still pending. 20:48:34 dom: l18n looked okay 20:48:54 dom: comments on error reporting was raised. 20:49:07 Actually, I said better error reporting and conformance statements (not stats per se) are not considered new features 20:50:18 dom: got comments from Privacy WG, not entirely sure if this LC or not. therefore still waiting for clarification. 20:50:41 dom: TimedText WG, input was to clarify scope 20:51:07 dom: Also got input from Audio WG. 20:51:38 AdamR: volunteered to write the audio output... 20:52:31 topic: how to handle new constraint extensions. 20:52:37 -> https://www.w3.org/2011/04/webrtc/wiki/images/f/f3/Constraints_handling.pdf slides 20:52:48 I have made the request to generate http://www.w3.org/2015/09/10-webrtc-minutes.html vivien 20:52:59 stefanh: discussion about registry if this is the right way forward or not. 20:54:17 stefanh: recapping requirements 20:56:46 ericr: why are we using meeting time to discuss this. 20:57:14 martint: this is largely a management problem, it depends where you want to document this. 20:57:29 cullen: how would this work? 20:57:48 martint: find the right venue to get this done. 20:58:41 ericr: 4 people want this, and they will figure out what they want. 20:59:07 cullen: what if they do not want to come to this organization. 20:59:22 dom: we could use company prefixes 21:00:05 cullen: but we want other people to also be able to use the same constraints. 21:00:36 cullen: I am okay for setting the bar as specification needed, but someone should make this proposal. 21:01:55 ericr: registries are needed(?) when there are volume of people wanting to reserve a code point or implement something 21:02:19 cullen: we know that we do not want to have collision in the namespace 21:03:03 dom: there is a clear IPR process for W3C, but not the same outside it. 21:03:45 dom: let's just do what we have been doing for other W3C process for example, attributes, etc. We could just follow that. i.e., make it specification needed. 21:04:13 hta: Perhaps we need to go through the process of: do we need a registry? is IANA appropriate? 21:05:00 dom: it was not clear if the registry has complete list or list of what needs to be done to be compliant 21:05:53 ericr: the good thing about using a registry is that it lists all the attributes in one place. and you can see the links of the documents, that define them. 21:06:31 martint: we have several documents that use the constraints, e.g., depth, screen capture, etc 21:07:02 burn: I wrote a draft that will have all this information. 21:07:26 ericr: I would like the chairs to resolve this. 21:07:44 hta: show of hands for 1) registry or no registry. 2) IANA or not IANA. 21:08:39 burn: the registry document says: specification needed not necessarily a w3c recommendation. 21:08:57 ericr: w3c recommendation is a high bar. 21:09:40 I agree with ekr 21:10:03 No registry 21:10:04 hta: asking the question (1) registry or not registry: 8 vs 5 21:10:09 I voted we do not need registry 21:11:57 hta: we have to decide, we don't seem to have consensus. 21:12:16 ggb has joined #WebRTC 21:12:35 dom: there is an alternative, that chairs can make a decision. and those who feel strongly can object 21:13:27 dom: let's take the formal vote 21:14:05 cullen: we might have to get a Yes/No question. so the question would have to be framed that way 21:14:32 hta: so a PR will be created that will add the registry and the vote will be to accept the PR 21:15:33 topic: Timed Media WG synchronization of work 21:16:10 dom: we could decide to move some of our work, all of our work, or none of our stuff. Related to media capture, media capture from element, screen capture. etc 21:16:14 -> https://lists.w3.org/Archives/Public/public-media-capture/2015Sep/0006.html "Timed Media WG discussion" email from Dom 21:16:39 dom: is there any opinions? 21:17:40 mathieu: I see potential for that group to take on work related to recording but not really clear if something from here should move. 21:17:59 martint: capture from element could move 21:18:44 cullen: Cisco cannot join timed media WG because of IPR issues, so I would recommend not moving screen capture to that group. 21:19:08 s/ericr:/ekr:/r 21:21:00 dom: what would happen to the work is started there, if there is interest to do it here ... 21:21:21 hta: is there anyone here who expects to be working in Timed Media WG? 21:21:36 hta: --- no one raised hands --- 21:21:37 what was the result of that hand-raising? 21:21:49 topic: WebRTC NV 21:22:13 -> https://www.w3.org/2011/04/webrtc/wiki/images/2/2c/WebRTC_NV.pdf slides 21:22:19 hta: this is the new charter text, during the recaharter process. 21:23:10 hta: what comes next: predict the stumbling blocks so that we do not stumble. 21:24:12 hta: 1.0 and NV are going to interoperate. 21:24:46 hta: SDP is not required. However, it must expose everything for SDP to be created. 21:25:29 ekr: I dont think that this is really true: i.e., being able to do SDP via NV. 21:26:02 @jib: vote IIRC. 21:26:11 @jib: formal vote IIRC. 21:26:42 hta: what are the contentious issues. 21:27:07 bernard: non-mux, parallel forking. 21:27:39 cullen: is this something we would need an API or what would be the resolution? 21:28:06 bernard: it was tricky not necessarily contentious. 21:29:00 bernard: modes of SVC. 21:30:43 ekr: PERC 21:31:55 ekr: people may ask for pluggable congestion control for datachannels 21:32:58 ekr: so something to think about are application replaceable components, since the design of ORTC looks like something that can be glued together. 21:33:38 hta: codec version control? 21:33:44 ekr: what is it? 21:34:56 ekr: we are under the impression that we will enable vc-x when we are ready 21:35:37 ekr: hence, I believe the expectation is to have pluginnable codec. 21:36:06 martint: this is similar to font 21:36:22 justinu: fonts are not executable... 21:36:32 martint: font files are turing complete. 21:37:26 petert: getStats() might be contentious 21:38:43 ekr: the amount of control that you can have on the unsecured client side. that needs to be re-considered? 21:39:48 hta: we want to do simple additions, but should we dream bigger? 21:39:58 FYI: pluggable codecs are quite doable. Hardest is dealing with negotiation aspects and config and packetization, but the pluggable codec could provide a JS module that handles some of this to the browser, or we just define some APIs at the plug interface for handling that. Not every possible codec is doable, but most should be. 21:40:19 ekr: we have done a lot of work for v1.0, I believe v1.1 should be a relatively quick turnaround. 21:40:24 tedh has joined #webrtc 21:40:54 juberti: v1.1 is not the end, there will be v1.2, v1.5, ... 21:41:42 ekr: reason to do NV is to get rid of things that were problematic to do in v1.0. 21:43:08 adambe: perhaps, yes. I dont see it on the screen 21:43:30 I have a warning about low bandwidhth/cpu/etc instead of video 21:43:42 same here 21:44:00 it tires to reload now and then 21:44:16 same here 21:44:31 burn: people have requested extensions. Some of the extensions are fundamental. When we started WebRTC it was for real-time communication. Perhaps we need to revisit this from those use-cases 21:45:08 hta: we got a use-case to playback things faster than real-time, for media processing. However, we should be cognizant about the goals of the WG. 21:45:36 hta: "We (chairs) need to make a plan to make a plan to execute a plan". 21:46:53 hta: running ahead of time, doing slides from 15xx session 21:47:09 topic: capture from element (no slides) 21:47:47 https://github.com/w3c/mediacapture-fromelement 21:48:09 Issue #11 21:49:08 martint: we were running a timer, when the item would get the canvas. This made the graphics people unhappy, because it was doing extra draws. 21:50:50 hta: if nothing happens in the canvas, what is the timecode on the frame when something happens. 21:52:02 martint: we get the timecode when we get the data. i.e., we have a flag on the canvas. when the flag changes, it pulls the frame and gets that timecode. 21:52:28 mathieu: the screencapture does the same thing, so there shouldnt be an issue. 21:52:48 martint: exactly, except screencapture runs at the framerate. 21:53:15 martint: there is an interesting bit here. when the origin is not clean, it will not capture anything. 21:54:02 mathieu: what happens when there are multiple draws in a single render loop. 21:54:46 martint: in a JS code, you have several draws or a promise that does micro tasks. But this thing only calls when it is in steady state. 21:55:14 martint: if you want something more complex then you need to manually do frame capture. 21:55:31 discussing issue #12 21:55:56 Capturing my comment: This is better than the original spec. Also, it's similar to a screencapture - you don't want to generate no-difference frames 21:56:19 martint: in the main spec, when capturing from the video element, the tracks would appear or disappear based on when they are played. 21:56:31 (that was to issue #11) 21:56:52 martint: i.e., if you had multiple audio tracks, you'd get a copy of those tracks and not the mixture of those. 21:59:17 martint: explaining the diff... 21:59:53 burn: if the stream is paused. would there be a paused? 22:00:50 martint: Yes, if 10s of mute, then there is no data for that. However, there is mute flag which would mean that there is no data for that period. 22:01:20 martint: explaining what happens when you do seek into those mute periods. 22:02:03 mathieu: then there is a way to plug mediastreams into peerconnection. 22:02:16 I understood martin to say that 10s of mute will turn into 10s of silence/black/etc. in the capture 22:03:04 @burn: was that due to the flag or actual silence data/black screen. 22:03:30 correct my notes if needed. 22:04:12 it would match the user experience of n seconds of silence/black 22:04:38 martint: I would like someone to have a look at this. Andreas is implementing most of this. 22:05:49 https://docs.google.com/presentation/d/1oraNTbn4XMCiWlJ-O7iJ5DwT1U0ycT3plJq00pToFHc/edit?usp=sharing 22:06:38 Topic: getStats 22:06:49 scribe: burn 22:08:09 jib: dictionaries have copy semantics, so what you get back is base class and not deeper object 22:10:55 ... second issue is that getter is legacy tech. recommendation is to use maplike which give you keys that are useful for looking up other stuff 22:11:34 ... this change would be breaking, but now would be a good time to make the change 22:11:46 cullen: which version of webidl contains maplike? 22:12:00 jib: es6 has maplike. it's already in webidly. 22:12:06 webidl 22:12:43 hta: compatibility with getter interface is easy. just define a legacy getter. 22:12:45 jib: agreed 22:13:28 varun: how much effort would this take for the browsers to support this? Don't want incompatbility. 22:14:02 jib: we already have binding code. in PR 301 we have support for it. For FF should be easy 22:14:09 -> https://heycam.github.io/webidl/#idl-maplike maplike in the webidl editors' draft 22:14:38 hta: don't know about maplike in Link 22:15:36 hta: effort is small. does group like this? specifically users of getStats. What do you think of this API change? 22:16:03 varun: we already have two code branches, so if you can converge that would help. maplike is fine if all support it. 22:16:15 mathieu: definietly seems easier for enumeration 22:16:46 cullen: this is a problem area for us too (the changing implementations) 22:17:00 martin: we accept patches 22:17:17 jib: adapter.js could polyfill better here 22:17:35 justin: hopefully adapter.js will get smaller . . . 22:18:45 hta: looks like we should accept maplike. see 3 approaches on webidl: 1. webidl should fix dictionaries. 2. replace dictionary with interface 3. the proposal from jib, to define an idl type that is the union of all idl types 22:19:07 jib: one webidl expert said the union type was a good idea 22:19:34 jib: could be done with a typedef 22:20:11 hta: doesn't solve problem. can't have one-line typedef that says this dictionary and all sub-dictionaries. that union would currently have something like 30 units. 22:20:32 cullen: how would it work to add the 31st? 22:20:44 hta: yes, that wouldn't be included automatically 22:20:59 jib: being able to return a union of all the classes sounds like a good thing. 22:21:44 hta: suggest going with object solution but note that we would like webidl support for the descendent dictionary union 22:21:46 I'm in favor of this PR (no surprise) 22:21:51 jib: that's what 301 does 22:22:07 hta: everyone okay with object? 22:22:13 (no objectiotns) 22:23:33 erik: what do we want to do for tpac? 22:23:47 justin: let's figure out who has what work to do. peter do you have anything? 22:24:57 peter: i have some slides showing a possible path from where we are to a model where you can control everything without peerconnection. could be input for 1.1. 22:25:24 cullen: what will happen as these issues resolve? what happens after last call comments are resolved 22:25:53 dom: we will ask the WG to review it. Hopefully this will happen within a few weeks. 22:26:33 hta: hope for a gUM revision that is "finished" that the group can review in a few weeks and go to CR before TPAC 22:27:29 peter has joined #WebRTC 22:27:35 https://docs.google.com/presentation/d/1508OJ_fhHjAkxxvM2_efa1EMsMQPi51zc2zHZ6kksvE/edit#slide=id.gba167d382_0_5 22:28:05 dom: for those of you with google docs, spreadsheets, etc please send a pdf of them for archives 22:29:18 (peter shows slides 1 - 3) 22:29:48 peter: iceTransport would have gather and start methods 22:29:59 ekr: how do you bind multiple ice transports in a single context 22:30:07 peter: on the last slide 22:30:39 Then for dtlsTransport, there are start and stop methods 22:30:48 ekr: will you show params for these later? 22:30:52 peter: maybe 22:31:08 hta: on iceTranport, where is pool size? 22:31:24 mathieu: why can't you just start gathering and make that the pool size 22:31:34 cullen: sounds like a great config option 22:31:58 hta: goal of option in 1.0 is to make a pool that transports can pull from. 22:32:22 peter: ortc has a way to do this 22:32:57 ekr: let's say i have an ice transport and put a dtls transport on top of it. what's the behavior we can expect? 22:33:15 peter: dtlsTransport would know the state of ICE 22:33:42 justin: start doesn't mean send, it just means start working 22:34:12 ekr: is the model such that the dependencies between them are automatically managed? 22:34:15 bernard: yes 22:35:05 peter: rtpSender - setTransport handles bundle/unbundle 22:35:42 mathieu: what about rtptransciever? 22:35:53 peter: not needed here because there is no SDP 22:36:29 peter: send starts the sender. for RTPReceiver, you have a receive() method 22:36:46 hta: are these always connecetd to a transport but you can change it? 22:36:49 peter: yes 22:37:30 cullen: if i have transports over different interfaces, can I move a stream with no interruption? 22:37:35 bernard: sholud be able to 22:37:46 ekr: would you do it as two separate transports? 22:37:59 bernard: if ICE is as capable as we want, no? 22:38:52 Peter: RTP example. gather ice candidates, start transports, the send and receive 22:39:06 justin: something like 10 methods to provide all this control 22:40:07 jib: don't see promises here. was that intentional? 22:40:09 peter: yes 22:40:24 ekr: what must be synchronous? 22:40:58 ... seems like some state info is missing 22:41:08 justin: state info is already (still) here from 1.0 22:42:23 peter: sctpTransport + DataChannel - a dataTransport is an SCTPTransport. Need to be able to get and signal SctpCapabilities. Can have more than one association. 22:43:12 adamb: regarding promises, how does a track get returned for receiver.receive ? 22:43:50 justin: you don't get media until O/A finishes, but track exists from addTrack as today 22:44:04 jib: how do you learn of failures? 22:44:09 bernard: they all have onerror 22:44:43 peter: dataChannel example. create and start ice, dtls, sctp,. datachannel itself just like today 22:45:43 peter: (very busy dictionary slide) want more info on ice candidates and codecs is primary change 22:45:57 adambe: why can't current dictionaries look like this? 22:46:04 ... (today) 22:46:42 peter: i first tried to create this, but I thought it might conflict with current object use for iceCandidate 22:47:00 ... if it's safe to add these, then I'm happy to :( 22:47:13 hta: could just make all of them readonly, existing ones too. 22:47:50 martin: making these interfaces would be terrible. 22:48:43 ... I have a PR that will remove the interface and replace it with the dictionary. We could have rules for where we look for this info. 22:48:47 peter: I will make a PR. 22:50:03 ... (and a few other things slide) there would be a getStats and onerror on everything. Need RTCDTMFSender, something for identity, and a way to say that iceTransports belong together and need to be checked in a certain order. 22:50:40 martin: do you add them or does it act as a factory? 22:50:55 ekr: you should be pacing your gathering and checks 22:51:30 justin: this allows grouping for different sessions as needed. 22:52:01 hta: two different ways to do this. (missed these) 22:52:27 peter: with optional index can decouple creation and checking order 22:52:57 justin: this provides freezing control but not necessarily global pacing. also provides grouping for bandwidth estimation purposes. 22:53:19 cullen: if global pacing is useful in needs to apply across the browser and not just here 22:53:44 ekr: yes and no. we don't do it that way. we pace individual PCs and then have a global circuit breaker 22:54:56 justin: global pacing the browser needs to enforce overall. this API provides local context and control. 22:55:14 jib: you had signaling in your example, is theer onnegotiaionneeded? 22:55:26 justin: up to the app to do itself if/when it wants to. 22:55:43 martin: you could make your own SDP and O/A if you cared to 22:56:17 cullen: might need info to negotiate what codec details need to be set 22:56:30 peter: codec capability info contains all of this. 22:57:35 ... there is a preferredPayloadType to make it easier to figure out which payload type to choose 22:58:26 bernard: very useful when you have capabilities and not settings to exchange. when you call receive you need to know what payload type the other side is going to choose. 22:59:22 martin: this dictionary is very close to the setting object structure. why don't you just call this payloadtype so you can pass it in to the setter. 22:59:34 ... ssrc? 22:59:46 peter: if you have mid you don't need ssrc 23:00:26 ekr: does this support the combinatorial explosion of profiles, fec parameters, etc.? 23:00:38 peter: there is no good way to express that 23:01:37 martin: implementatnios will support listing some subset of capabilities down the road. there are many variations of possible capabilities 23:01:45 ekr: what are the defaults? 23:02:09 peter: don't know 23:03:22 ekr: are these dictionaries special in some way or can I synthesize them myself? 23:03:45 martin: can you just change values before sending it to the browser? 23:04:00 peter: if the values are consistent with the capabilities, then that's fine 23:05:08 ekr: if they were interfaces and constructed there wolud be a disincentive to mess with the values. We will see apps that will hardcode h.264 and vp8 in the list of codec capabilities. 23:05:16 ... this would be harder with interfaces. 23:06:47 jib: since you have onerror, instead of having a method that has an interface that takes a bunch of attributes, just have a bunch of attributes that are read at the end of the event loop 23:07:08 ... we didn't have onerror before, so it's the presence of that handler that would make this feasible. 23:08:17 hta: we are at the end of our session. We resolved some things and are going to encourage people to work hard on over the coming weeks, not months. Chairs will take responsibilty for moving the registry decision onward. 23:08:30 tedh has joined #webrtc 23:08:55 stefan: do you all have time to put into all of this over the coming weeks? It seems that there is a short list of people who have to do all this. Martin, Justin, Peter in person. 23:09:03 Peter: No problem. 23:09:41 justin: is there a list of which areas people need help with so others can volunteer to help? 23:10:02 martin: yes, a list of important items with whose responible would be really helpful. 23:10:09 justin: is travis still busted? 23:10:30 dom: I fixed the link checker bug, but I'm wokring on something less brittle. 23:11:05 ekr: can you restart travis? 23:11:07 dom: yes 23:11:36 ... i will look into this. ignore travis for the moment. 23:12:38 dom: tpac registration. don't forget. you have to rejoin the group if you haven't. (your company) 23:13:07 stefan: thanks to Microsoft for hosting. 23:13:40 [meeting adjourned] 23:13:46 RRSAgent, draft minutes 23:13:46 I have made the request to generate http://www.w3.org/2015/09/10-webrtc-minutes.html vivien 23:34:16 jesup has left #webrtc 23:47:39 adamR has joined #webrtc