15:03:18 RRSAgent has joined #webrtc 15:03:18 logging to https://www.w3.org/2020/03/30-webrtc-irc 15:03:29 Meeting: WebRTC Virtual Interim 15:03:35 Chair: Bernard, Jan-Ivar, Harald 15:03:40 Scribe: dom 15:03:43 hta has joined #webrtc 15:03:56 Topic: WebRTC Features at risk 15:04:05 Bernard: a few unimplemented features not yet marked at risk 15:04:09 ... 3 issues filed related to that 15:04:24 ... first one is Issue 2496 - the voiceActivityFlag exposed in SSRC, not implemented anywhere 15:04:32 ... any disagreement to marking it at risk? 15:04:36 Henrik: SGTM 15:05:01 Bernard: we have one unimplemented MTI per issue 2497, partialFramesLost 15:05:10 ... should we remove it from the MTI list? 15:06:08 Jan-Ivar: no objection to unmark that one; will we get implementations for the other ones? 15:07:05 Henrik: they need to be moved from one dictionary to the other - they've been implemented, they just need to be moved into a different object 15:08:01 JIB: it's not clear to us yet how easy it will be to implement in Firefox; pointers to upstream webrtc.org hooks would help 15:08:13 RESOLVED: remove MTI marker on partialFramesLost 15:08:40 Bernard: last one is multiple DTLS certificates, not implemented anywhere 15:09:12 HTA: the goal was to help support signed certificates, which is completely unspecified 15:10:15 Dom: so if we remove support for it, the idea would be to say the spec only uses the first certificate in the list 15:11:02 TimP: wasn't the background of this support for multiple kind of certificates? 15:11:17 Bernard: with full support for DTLS 1.2, that's no longer relevant 15:11:46 Bernard: I'm hearing consensus on all of these 15:11:53 Topic: ISSUE-2495 When is negotiation complete? 15:12:14 JIB: this emerged while writing tests for WPT, but is applicable beyond testing 15:12:48 ... "Perfect negotiation" is the pattern we recommend in the spec that helps abstract away the negotiation from the rest of the application logic 15:14:06 ... having a negotiationended event would help avoid glare, simplify the logic 15:14:26 ... the obvious approach to detect the end of negotiation is racy 15:16:04 jianjunz has joined #webrtc 15:16:32 ... there are workaround, action-specific spin-tests (while loops) 15:16:46 ... but that's bad, leading to timeouts 15:17:23 ... I've also tried another workaround by dispatching my own negotiated event at the exact right time 15:17:40 ... this is slightly better, but we can still miss cases 15:18:30 ... can we do better? I have 3 proposals 15:18:47 ... fire a negotiationcomplete from SRD(answer) if renegotiation isn't needed 15:19:29 ... one downside is that subsequent actions may delay the event if further negotiations is needed in some edge cases 15:20:22 ... Proposal B is a boolean attribute for negotiationneeded - needs careful implementation in relation to the negotiationneeded event 15:20:29 ... it's also delayed by subsequent actions 15:20:57 ... Proposal C: an attribute exposing a promise for negotiationcomplete 15:21:45 ... it's better because it's not delayed by subsequent actions (by replacing promises as new negotiations get started) 15:22:21 Henrik: compared to proposal A? 15:23:01 JIB: imagine you call addTransceiver-1 & addTransceiver-2, you have to wait until addTransceiver-2 before the event fires (which you don't in proposal C) 15:23:39 Henrik: you can build your own logic if you care about partial negotiations - what you want to know in general is "am I done or not"? 15:23:59 HTA: I question the question - why should I care if negotiation is complete? 15:24:28 ... what you have here is indeed a problem, but what the app cares about is whether the transceiver is connected to a live channel or not 15:24:42 ... you don't have this problem with datachannels since you have an onopen event 15:25:06 ... if we want to solve this at all (I would prefer not adding any API at this point), I think we should look at a signal on the transceiver availability 15:25:23 Bernard: don't you get that from our existing states, e.g. via the transports? 15:25:38 Harald: we have it with currentDirection, but without an event, it has to be polled 15:26:37 JIB: I think apps do need to know whether the transceiver is ready or not, and having that done with a timeout is not great 15:26:52 HTA: what I'm saying is what matters is the readiness of the transceiver, not the state of the negotiation 15:27:05 ... if we want to add anything here, it should be a directionchange event to the transceiver 15:27:26 TimP: it could be done with proposal C which indicates "what" is complete (i.e. which transceiver is ready) 15:27:38 ... otherwise, I agree you want to know what it is you got 15:27:49 JIB: you would get that via JS closure 15:30:33 Henrik: I think this is a "nice-to-have" - useful for testing & debugging; but I think it's a problem that can be solved with the existing API 15:30:53 JIB: I don't think this can be polyfilled, given that negotiationneeded is now queued 15:31:53 ... negotiationneeded can be queued behind other operations in the PC 15:32:39 Henrik: you can detect this for each of your negotiated states by observing which changes are actually reflected (with different logic for each type of negotiation) 15:32:50 ... this would be nicer, but I don't think it's needed 15:33:04 JIB: you mentioned setStreams - it cannot be observed locally 15:33:58 ... another advantage of the promise is that it lets you determine if you're still on the same "negotiation train" by comparing promises 15:35:00 Youenn: it would be interesting to see if libraries built on top of PC are implementing that pattern 15:35:12 ... this might be a good way to determine its appeal 15:35:37 Henrik: it would be great for debugging for sure, esp in the age of perfect negotiation 15:37:32 Youenn: so let's wait to see what apps adopting perfect negotiation before committing to this 15:37:51 Conclusion: keep for post 1.0 (in webrtc-extension?) 15:38:06 Topic: ISSUE 2502 When are effects of in-parallel stuff surfaced? 15:40:36 Henrik: the singaling/Transceiver states defined in JSEP and the API can't be the same to the cost of racy behavior 15:41:19 ... which means the requirements imposed by JSEP on these states create ill-defined / inconsistent behaviors 15:42:21 ... Proposals to address this: Proposal A: we make addTrack dependent only on WebRTC states, not JSEP states 15:42:32 ... this is probably what the spec says, not what implementations do 15:43:20 ... Proposal B: we make addTrack depend on a "JSEP transceiver", but would be racy and create implementation specific behaviors 15:43:38 JIB: I agree there is a race in JSEP 15:43:53 ... JSEP was written without thinking about threads at all 15:45:02 ... the problem is not really about whether we're in a JS thread or not 15:45:08 ... we have to make copies of things 15:45:32 Henrik: my mental model is that WebRTC JS shallow objects refer to JSEP objects 15:46:03 ... the only problem is with addTrack because of recycling of transceivers 15:47:23 JIB: the hygienic thing would be to copy state off from JSEP when looking at transceivers. Is that proposal A? 15:47:30 Henrik: it's implicit in proposal A 15:48:59 JIB: the only problem with that with your example on slide 17 - this would leave a hole e.g. in the context of perfect negotiation 15:49:55 Henrik: I think that's a better alternative than starting to meddle with internal JSEP objects 15:50:18 ... the hole here is that if you're unlucky, you need another round of negotiation 15:51:09 ... and in that situation, you would be in a racy scenario in the first place 15:51:24 HTA: the code of slide 17 is not compatible with perfect negotation 15:51:46 Henrik: I think proposal A is the only sane approach 15:52:08 HTA: this sounds ready for a pull request 15:52:42 JIB: I think the spec is currently racy given "JSEP in parallel" so it's more than an informative change 15:53:38 RESOLVED: getTransceivers() SHALL NOT be racy 15:53:47 Topci: Media Capture and Streams 15:53:54 SubTopic: Issue 671 new audio acquisition 15:53:59 s/Topci/Topic/ 15:54:10 Sam: Sam Dallstream, engineer at Microsoft 15:54:19 ... this is a feature request / issue on the spec 15:54:43 ... at the spec stands today, it is hard to differentiate streams meant for speech recognition vs communication 15:55:14 ... the current implementations are geared towards communication, which sometimes is at odd with the needs for speech recognition 15:55:30 ... e.g. in comms, adding noise can be good, but it hurts with speech recognition 15:56:14 ... slide 22 shows the differences of needs between the two usages, extracted from ETSI specs 15:56:23 s/22/22 and 23 15:57:23 ... the first proposal to address this would be a new constraint (e.g. "category") that allows to specify "default", "raw", "communication" "speechRecognition" 15:57:45 ... it translates well to existing platforms: windows, iOS, Android have similar categories 15:58:18 ... the problem is that it competes with content-hint in a confusing way - content-hint is centered around default constraints AND provide hints to consumer of streams 15:58:38 ... whereas this one is setting optimization on the stream itself (e.g. levels of echo canceling) 15:59:05 ... A second proposal is to modify the constraints to make them a bit more specific, and add a new hint to content-hint 15:59:22 ... the advantage is that it fits the current content-hint draft, with more developer freedom 15:59:47 ... but it may be hard to implement though 16:00:22 ... Would like to hear if there is consensus on the need, and get a sense of the direction to fulfill it 16:01:08 Henrik: for clarification, for echoCancellation, it's not turning it off, it's tweaking it for speech recognition 16:01:27 Sam: right - right now echoCancellation it's a boolean (on or off) 16:02:01 HTA: but then how does it fit well well with the existing model? 16:02:36 Sam: I meant it's easier for API consumers, but you're right it conflicts with other constraints 16:03:01 Bernard: this is not about device selection here 16:03:13 JIB: indeed, most of this is done in software land in any case 16:03:23 Henrik: right, here it's more about disable/enabling feature 16:04:16 JIB: what's the use case that can't be done by gUM-ing & turn off echoCancellation, gainAutoControl, ambientNoise? 16:04:31 Bernard: it's not on & off 16:05:00 TimP: e.g. in speech interactions, you don't want the voice AI to hear itself 16:05:39 Sam: Alexa right now turns off everything and then adds their own optimization for speech recognition 16:06:03 ... so this can already be done, but the idea is to allow built-in optimizations so that not everyone has to do their own thing 16:06:20 Youenn: do systems provide multiple echo canceller? 16:06:31 ... I don't think you can do that in MacOS 16:06:43 Sam: that's why the second proposal isn't as straightforward 16:07:04 s/Mac/i 16:08:09 Henrik: the advantage of these categories is that they vague enough that implementations can adjust depending on what the underlying platforms provide 16:08:19 ... but then it's not clear exactly what the hint does 16:08:35 HTA: I would expect a lot of variability across platforms in any case 16:08:47 Henrik: as is the case for echoCancellation: true 16:09:01 HTA: indeed (as the multiple changes of the impl in Chrome show) 16:09:38 Henrik: it sounds like it is hard-enough to describe, implementation-specific enough that it should be a hint 16:10:08 JIB: I think that's fair to say that the audio constraints have been targeted a the communications use case 16:10:26 ... not sure how much commitment there is for the purpose of speech recognition 16:11:07 Sam: right 16:12:08 Henrik: with interop in mind, echoCancellation: true worked because everyone did their best job at solving it, not doing it the same thing 16:12:50 ... to get that done with this new category, we would need the same level of commitment and interest from browser vendors 16:13:20 ... the alternative is turning everything off and doing post process in WebAudio/WASM 16:13:45 TimP: another category beyond comm, speech-rec here is broadcast 16:14:09 ... it shouldn't be a two-states switch 16:14:27 JIB: anything here that couldn't be solved with WebAudio / AudioWorklets 16:14:43 Sam: I would need to take another look at that one 16:14:53 HTA: you would still need a "raw" mode 16:15:17 Youenn: maybe also look at existing open source implementation of ambient noise and whether they share some rough parameters 16:17:28 Sam: it sounds like leaning towards 2nd proposal 16:17:45 Dom: maybe first also determine what can be done in user land already with Web Audio / Web Assembly 16:18:01 ... if this is already doable there, then maybe we should gain experience with libraries first 16:18:26 HTA: given we already have a collection of hints in content-hint that have been found useful, it's kind of easy to add it there 16:19:28 Bernard: would this applies up to gUM? 16:19:33 HTA: yes, that's already how it works 16:19:55 JIB: if we're thinking adding a new hint, we may need new constraints specific to speech-recognition 16:21:13 [discussion around feature detection for content-hints] 16:21:59 SubTopic: ISSUE 639 Enforcing user gesture for gUM 16:22:21 Youenn: powerful APIs are nowadays bound to user gesture 16:22:37 ... if we were designing gUM today, it would be as well 16:22:44 ... but that's not Web compatible to change now 16:23:01 ... can we create the conditions to push Web apps to migrate to that model 16:24:06 ... PR 666 proposes to require user gesture to grant access without a prompt 16:24:29 ... I've looked at a few Web sites; whereby.com works with the restrictions on 16:24:36 ... it wouldn't work in Hangout or Meet 16:25:37 ... Interested in feedback on the approach and availability to help with webrtc app developers outreach 16:26:36 Youenn: the end goal would be that calling gUM without user gesture should be rejected 16:26:57 ... user gesture is currently an implementation-dependent heuristic - this is being worked on 16:27:17 Henrik: I think we would need it to be better defined 16:27:31 ... it is also linked to 'user-chooses' 16:27:56 Youenn: the situation is very similar to getDisplayMedia where Safari applies the user gesture restriction 16:28:14 ... it could be the same with gUM 16:28:33 JIB: I like the direction of this; we could describe it as privacy & security issue 16:28:49 ... with feature-policy, there is a privacy escalation pb through navigation 16:29:36 ... jsfiddle allowed all feature policies, so from my site I could have navigated to my jsfiddle, got priviledged there before navigating back with an iframe 16:29:45 ... so that sounds like an important fix 16:29:54 ... the prompting fallback sounds interesting 16:30:20 ... denying on page load might be harder to reach 16:30:43 ... it's not clear that same-origin navigation should be blocked 16:31:01 Youenn: user gesture definition is still a heuristic, these could fit into that implementation freedom 16:31:11 HTA: how much legitimate usage would we break? 16:31:39 ... before progressing this, we should have a deployed browser with a counter to detect with/without user gesture 16:32:21 Youenn: Webex and Hangout call it on pageload, so that would make the counter very high 16:32:34 HTA: so will someone get data? 16:32:50 Youenn: I don't think Safari can do this; would be happy if someone can do this 16:32:56 ... I can reach to top Web site developers 16:33:11 HTA: would anyone at Mozilla interested in collecting this data? 16:33:39 JIB: based on our user gesture algorithm? I'll look, but can't quite commit resources to this at the moment 16:34:07 Conclusion: more info needed 16:34:49 Topic: Next meeting 16:35:00 HTA: probably in April / May 16:35:03 RRSAgent, draft minutes 16:35:03 I have made the request to generate https://www.w3.org/2020/03/30-webrtc-minutes.html dom 16:35:25 RRSAgent, draft minutes v2 16:35:25 I have made the request to generate https://www.w3.org/2020/03/30-webrtc-minutes.html dom 16:35:28 RRSAgent, make log public 16:37:01 i/Topic: WebRTC/Topic: WebRTC/ 16:37:13 s/Topic: WebRTC F/SubTopic: WebRTC F 16:37:32 s/Topic: Issue-2495/SubTopic: Issue-2495 16:37:45 s/Topic: Issue 2502/SubTopic: Issue 2502 16:37:46 RRSAgent, make log public 16:41:01 Present: Harald, Bernard, Jan-Ivar, Youenn, TimPanton, DomHM, SamDallstream, Florent, Henrik, Jianjun 16:41:07 RRSAgent, draft minutes v2 16:41:07 I have made the request to generate https://www.w3.org/2020/03/30-webrtc-minutes.html dom 18:57:33 hta has left #webrtc