15:00:07 RRSAgent has joined #webrtc 15:00:07 logging to https://www.w3.org/2021/09/20-webrtc-irc 15:00:58 Present+ Dom, BenWagner, BernardA, Harald, Jan-Ivar, TonyHerre, EladAlon 15:01:04 Chair: Harald, Bernard, Jan-Ivar 15:02:52 Agenda: https://www.w3.org/2011/04/webrtc/wiki/September_20_2021#WebRTC_WG_Virtual_Interim 15:02:59 -> https://www.w3.org/2011/04/webrtc/wiki/images/8/86/WEBRTCWG-2021-09-20.pdf Slides 15:03:30 Topic: Next meetings 15:03:56 Bernard: October VI to be scheduled 1st week of October - Doodle poll open till nex tweek 15:04:04 ... then TPAC meetings (joint & solos) 15:05:02 Present+ ArneSchramm, BrianBaldino, GuidoUrdaneta, TimPanton, YouennFablet 15:06:10 Topic: Status of recent CfCs 15:06:31 Bernard: Republishing media capture and streams as CR - completed positively on Sep 17 15:06:33 Present+ Carine 15:06:44 ... Jan-Ivar will summarize the chairs decision on it 15:06:57 ... Another CfC on Transferrable MediaStreamTracks running until Sep 27 15:07:12 ... our next meeting in October will build on this 15:07:35 Topic: WHATWG Streams 15:07:47 Bernard: we have potential dependencies to WHATWG streams 15:08:12 ... a number of discussions in their repo relate to issues we've discussed in terms of our media processing pipelines 15:08:29 Topic: Agenda review 15:08:46 Bernard: main topics: Conditional focus, getViewportMedia, Display surface contraints, echo cancellation 15:09:00 Topic: Conditional Focus 15:09:47 Elad: depending on use cases, switching the focus from the browser to the captured window makes more or less sense 15:10:21 ... focus control is an important part of the user experience, given that making a presentation can be stressful 15:10:50 ... e.g. if you're capturing a window where you're writing text, focus needs to be there 15:11:11 ... but there are situations where the browser can be used directly to control to the captured window 15:11:35 ... the challenge is that the browser cannot determine one situation from another 15:11:55 ... when the capturing application has a lot more situational awareness 15:12:13 ... not necessarily complete knowledge, but at least some 15:13:42 ... I'm proposing an API that associates stream capture with the ability to give a specific limited focus switch opportunity 15:13:56 ... to the capturing application 15:14:46 ... because this is done right after the capture is starting (although before a frame is being catpured), the capturing application has all the context it can get to make its decision 15:15:32 ... the idea is to gives that focus-switching opportunity in a microtask in a promise resolution of the capture request 15:16:10 ... the proposal includes a number of mitigations (e.g. a 1s timeout) to avoid risks of focus-switching attacks 15:17:15 ... the particular API I'm proposing is exposed via a method on a subcall of MediaStreamTrack - that way it's only available when obtained through a captured tab or window 15:17:40 ... we could look at a more finegrained inheritance tree if there is interest 15:18:16 Jan-Ivar: this is a reasonable problem to solve; I have some concerns with the API surface 15:18:36 ... since focus switching is global to the user, it doesn't need to be on a mediastreamtrack subclass 15:18:50 ... it could live e.g. on navigator.mediaDevices 15:19:09 ... I think a microtask is too narrow - we should queue a task instead, this would give the same presentation 15:19:24 ... Without having received a frame, how can app determine whether to switch or not? 15:19:43 Elad: getSettings() on the captured stream can tell you the kind of display surface 15:20:06 ... checking the content of a frame is likely challenging to get right in any case 15:20:18 ... looking just at the metadata is easier 15:21:25 ... re global vs mediastreamtrack, it was partly to protect against attacks based on cloning - but happy to look more into alternatives 15:21:55 ... task vs microtask - can you say more about your concerns about shim-ability? 15:22:17 Jan-Ivar: it's a general principle, and I'm not sure the advantages of a microtask in the first place 15:22:48 Elad: part of it was a concern of backwards compatibility and performance 15:23:15 Jan-Ivar: I think track & microtask can both address these aspects 15:23:27 ... in any case, my main concern is where the API lives at the moment 15:23:41 Youenn: cloning of tracks is known; when you subtype tracks, it starts to be messy 15:23:55 ... what type would be assigned to a cloned track? 15:24:03 ... we should avoid subtypes if possible 15:25:50 ... mitigations of 1s and against busy-looping sound good 15:26:12 ... I need to think more about the 1s delay 15:26:49 Harald: re cloning and MST subtracks - we have one case like that, and I think we should change it 15:27:05 ... we have 2 options: subclassing or making the method returns an error 15:27:15 ... I don't think JS dev care one way or another 15:27:23 ... subclassing feels a bit tidier 15:27:43 Elad: the goal was to reflect our design in the class hierarchy indeed 15:28:26 Youenn: to get there, I think we should first list the use cases where subtypes actually help - just one method feels not enough to consider changing clone() 15:28:50 Elad: 3 methods would fit: captureHandler, @@@ only apply to captured media 15:29:41 Jan-Ivar: I'm opposed to subclassing - I think that API should live in a global space e.g. navigator.mediaDevices.focus 15:29:55 Harald: where will that written up? I would like to see the argument in more detalis 15:30:00 s/alis/ails/ 15:30:22 Elad: I'm hearing interest in the API 15:30:31 Jan-Ivar: interested in solving the problem with a slightly different shape 15:30:57 Youenn: +1 on a different shape, and discussion on the 1s delay; but sounds like a good space to work on 15:31:58 [clarification on the 1s requirement makes Youenn happy] 15:32:13 Topic: getViewportMedia 15:32:38 -> https://github.com/w3c/mediacapture-screen-share/issues/155 getViewportMedia(): Let pages opt-in to capture #155 15:32:57 Elad: getViewportMedia is an API allowing to capture the current viewport (what is visible in the tab launching the API call) 15:33:09 ... equivalent of calling getDisplayMedia and selecting the current tab 15:33:16 ... there is danger associated with self-capture 15:33:45 ... to protect against this, we're requiring crossOriginIsolation, opt-in via a header (most likely document policy, but to-be-confirmed) 15:34:05 ... and only available to top-level docs or priviliged iframes 15:34:10 s/liged/leged/ 15:34:56 ... Jan-Ivar and I have been discussing a lot and have converged on a number of proposals as summarized in the slide 15:35:12 Jan-Ivar: we're proposing that getViewportMedia would capture the entire viewport when called from an iframe 15:35:35 ... and we're proposing using Document Policy with names built on "viewport-capture" 15:37:03 ... the first proposal is basically deferring the approach to cropping to later 15:37:24 RESOLVED: getViewportMedia capture the full viewport when called from an iframe 15:38:26 Harald: re "viewport-capture", is it aligned with the naming convention of Document Policy? 15:39:16 Tim: just noting the two decisions (iframe capturing the full viewport, and naming) are linked 15:40:56 RESOLVED: use viewport-capture as naming basis for Document Policy of getViewportMedia 15:41:05 Harald: these will be confirmed on the mailing list 15:41:23 Elad: I also intend to suggest a cropping API that might complement getViewMedia in the upcoming months 15:42:23 Jan-Ivar: getViewportMedia should require user activation 15:42:28 Dom: +1 15:42:48 Elad: I can imagine certain cases where use activation makes sense, but others where less so 15:43:40 ... e.g. if you open a new tab 15:43:58 Youenn: this feels like a general problem for user activation that is worth discussing in general 15:44:25 ... but given that this is privileged API, user activation feels like a must 15:47:22 Dom: +1 on solving it generically for user activation unless we can demonstrate something specific to capturing 15:47:35 Youenn: note that changing user activation rules is really hard, so we need to get our answer right before shipping 15:48:03 jan-ivar: removing user activation shouldn't as hard as adding it afterwards 15:48:20 Elad: I would want more time to make a decision on that particular bit 15:48:27 Topic: Display surface constraint 15:48:39 -> https://github.com/w3c/mediacapture-screen-share/issues/184 Revisit: Let getDisplayMedia() influence the default type choice in the picker #184 15:49:03 Elad: getDisplayMedia doesn't let influence user's choice 15:49:48 ... user's choice is already being influenced though, by virtue of having a 1st item in the list of choices 15:49:54 ... Chrome has Screen-first 15:50:08 ... Safari has only choice (so a major influence) 15:50:14 ... FF is evolving 15:50:34 ... Influence could be wielded positively - towards the safer choice, or the more relevant one 15:50:59 ... a lot of Web developers have expressed interest in allowing influence or limit user's choice: 15:51:11 ... - save clicks (if the app knows they only want tab, or only want windows) 15:51:25 ... - apps want to capture audio - only available on a subset of capture sources 15:51:37 ... - tabs provide higher FPS 15:52:03 ... - the app knows from context - e.g. allowing to favor slides over other content when doing a presentation 15:52:21 ... - avoid risk with over sharing 15:53:01 ... The proposal I'm making is to add a hint as part of the contraints, e.g. "browser: ideal" 15:53:51 ... the user agent may choose how to apply that hint - from using it to prioritize, to ignoring it or adding warnings in case the UA determines it's not safe to apply the hint 15:54:07 ... [showing the specific text proposal in #184] 15:54:28 ... all other contraints are still processed after the user made their choice, only that one gets processed before 15:54:38 ... it's only a hint, it cannot limit user's choice 15:54:49 s/browser: ideal/ideal: browser/ 15:55:16 ... e.g. Chrome would show the list of tabs in preference when "browser" is hinted 15:56:04 Jan-Ivar: in the github discussion, we mentioned additional mitigations - e.g. not listing the requesting tab/window in the list of tabs 15:56:14 ... would like to see some of these ideas reflected in the text 15:56:35 ... min & exact constraints are disallowed in gDM, so it would have to be "ideal" 15:56:57 ... I think it makes sense to use a hint to steer these selectors UI 15:57:22 ... for clarification, "influence/limiting" requirements discussed earlier were about the app, not the user agent 15:57:56 Harald: re removing the calling tab, would it be only for this usage of the hint, or any use of gDM? 15:58:12 Jan-Ivar: I think they need to be considered before we add this 15:58:37 Elad: my recollection was we would encourage the UA to warn of risks of self-capture rather than removing the option altogether 15:59:34 ... there are other ways of adding friction that doesn't require removing the option completely 15:59:52 ... removing it completely might create risks of oversharing via sharing of the entire screen 16:00:28 Jan-Ivar: I think we can probably converge on mitigations for self-capture 16:00:50 ... ideally, I would like normative language 16:01:10 Present+ SergioMurillo 16:01:27 Youenn: should we allow a hint for capturing the entire screen? that's the riskiest 16:01:36 ... let's focus on hinting towards capturing less 16:02:20 ... In general, I dislike constraints - can we add a dedicated parameter instead of reusing the contraints syntax? 16:02:44 ... this may open further extensibility down the line (e.g. highlight tabs from a given origin?) 16:03:12 ... can you share more about Chrome's plans in terms of mitigations against self-capture and its dangers? 16:03:38 Elad: we haven't prototyped the warning mechanism yet 16:03:52 ... re constraints, I have no objection to using a parameter instead of constraints 16:04:25 ... re removing "screen" - it's interesting, but if that is the default when no hint is given, this isn't really helping 16:04:37 Youenn: that default behavior is specific to Chrome 16:05:08 ... Safari only allows screen, but we will have a picker at some point where screen won't be the default 16:05:22 ... and I don't think apps should have a way to default to screen 16:05:43 Jan-Ivar: FF already doesn't default to screen, and +1 to youenn of not allowing (or just ignoring) screen as a constraint 16:06:07 Elad: the user agent would already be free to ignore the hint 16:06:42 ... for Chromium, getting visibility on dev's intent would be useful in migrating away from that default 16:07:16 Present+ SongXu 16:07:27 Present+ ThomasGuilbert 16:08:01 Bernard: in terms of the requests from developers, is audio capture only avaiable on screen? 16:08:13 Elad: no, it's available on tab, and screen on windows 16:09:34 Bernard: re high-FPS capture - is that typically tab? 16:09:39 Elad: in Chromium, yes 16:10:04 ... but it's in general, a way for developers to steer toward what they know will work for their use cases 16:10:20 Bernard: is "screen"-level capturing key to any of these requests? 16:11:12 Elad: right; but note that "screen" could be used to capture from a different monitor 16:11:22 Jan-Ivar: but all monitors are dangerous 16:11:54 Elad: so I'm hearing support except for the the screen-hint 16:12:46 TimP: I dislike heuristics-based picker - it makes it a nightmare to test and makes everything unpredictable 16:13:05 Elad: the mention for heuristics was for apps to use, not the UA 16:14:24 Jan-Ivar: supporting, but with stronger language on warnings for self-capture 16:14:41 Topic: Echo Cancellation 16:15:00 -> https://github.com/w3c/mediacapture-extensions/issues/31 Echo cancellation: Need to specify the source of the echo cancellation reference signal #31 16:15:11 -> https://github.com/w3c/mediacapture-extensions/pull/32 Specify constraint echoCancellationReferenceSinkId #32 16:15:22 Harald: this is a request coming from our audio team 16:16:15 ... echo cancellation is about removing the audio picked up by the microphone in the room to keep only the audio generated *in* the room 16:16:31 ... it's in general complicated - a complicated part is knowing what to remove 16:17:02 ... current implementation in Chrome just looks at what's coming it via the peerconnection 16:17:22 ... this has proven insufficient and we want to revise this 16:18:20 ... if we want to remove audio output, you can hit issues with specific headphones or setups 16:18:45 ... from the application perspective, you want to identify what output has been used that is most relevant to echo cancellation and feed that to the algorithm 16:19:03 ... to keep it simple, we have an enumaration of output devices via sinkIds 16:19:39 ... the proposal is to re-use this sinkid in the contraint for echo cancellation 16:20:47 TimP: +1 to do something in this space 16:21:02 ... will it help if you mix WebAudio in? 16:21:22 ... i.e. when the audio output comes from WebAudio processing 16:21:44 Harald: yes, it should cover this (as long as the output makes it to the speaker) 16:22:00 Jan-Ivar: Mozilla doesn't believe this API is needed to do correct echo cancellation 16:22:25 ... why does the UA needs JS input on this? The UA already know which headset is being used 16:23:05 ... it's not clear what getting input from the app is useful here 16:23:28 Harald: which audio output is currently used by the echo cancellation? 16:23:40 Jan-Ivar: I believe we have access to the rendered output (incl out of WebAudio) 16:23:53 ... Paul Adenot is our key person on this 16:24:14 Harald: would like his opinion on the headcase 16:24:32 Youenn: +1 to Jan-ivar - the UA should already have access to the all info it needs 16:24:57 ... and it has more info that apps would have on this 16:25:53 bernard: Harald, you said chrome currently uses sum of all audio outputs from peerconnection 16:26:09 ... is the intent here to improve the chromium implementation or to let them do better echo cancellation? 16:26:23 harald: this is not for app-based echo cancellation 16:27:25 bernard: I've heard requests from apps to do have an adjustable echo cancellation - e.g. an echo cancellation transform stream 16:27:45 Harald: that is orthogonal to this proposal 16:28:00 ... echo cancellation can't be modeled as a transform stream: it's a 2 input objects 16:28:11 ... it can be modeled as process that takes 2 audio inputs 16:28:28 youenn: you could still do 1 input / 1 output with an additional parameter 16:29:03 ... in the transform stream creation with the reference stream 16:29:22 Harald: interesting thing to do, but not this proposal 16:30:07 TimP: there are situations where you don't want to cancel part of the stream being output - e.g. background music 16:30:20 ... with the room accoustics 16:30:52 ... maybe a rare use case, but one we've stumbled upon it for immersiveness 16:31:00 harald: you could turn echo cancellation off? 16:31:07 timP: but that generates other issues 16:32:34 Sergio: I don't think this proposal would help solve the Chrome issue 16:33:48 ... there are 3 different issues being discussed: echo cancellation in Chrome, new echo cancellation tuning use cases (that would need clarification/refinement), and exposing echo cancellation separately from WebRTC (maybe in Web Audio) 16:34:11 Harald: I'm hearing opposition to making an API of the specific proposal because the UA should be able to figure it out 16:35:10 ... I find it interesting that only browser output should be cancelled - if you have another app than the browser producing audio, shouldn't it be removed too? 16:35:44 Jan-Ivar: RNNoise has been exploring some of this; but echoCancellation: true is likely focused on the meeting use case 16:36:00 Youenn: the OS can also provide user-configurable echo cancellation styles 16:36:56 Guido: the motivation for Chrome is to help figure which of the output devices should be used as the reference signal for echo cancellation 16:37:22 ... if there are several audio output devices with one being preferred by the app 16:37:52 Harald: I'd like to invite comments on the issue on whether this API is needed or not 16:38:00 ... I haven't seen much comments on the shape of the API 16:38:20 ... if we were to conclude there was such a need, this API may be OK 16:38:26 ... but no consensus on the need for such an API 16:39:46 Topic: Wrapping up 16:40:14 Bernard: any CfC needed based on our discussions? 16:40:31 Jan-Ivar: re getViewportMedia, should we put this in a new doc or an existing one? 16:43:08 Dom: having a single document couple their process progress 16:43:22 elad: also keeping them separate helps making clear how distinct they are 16:43:37 youenn: it also helps in terms of separating the test cases in different folders 16:45:09 harald: sounds like convergence towards a separate spec 16:45:14 jan-ivar: would still prefer a single doc 16:45:27 Topic: October meeting 16:45:51 Bernard: next meeting will be devoted to mediacapture-transform - proposed content and agenda was shared on the list 16:46:09 -> https://lists.w3.org/Archives/Public/public-webrtc/2021Sep/0030.html Preview of October Virtual Interim slide deck 16:47:47 ... there is overlap between mediacapture-transform and WHATWG streams issues 16:48:11 Youenn: I will try to mark more explicitly issues in MC-T that are linked to WHATWG streams 16:50:20 Bernard: part of what I thought might be useful to hear is where these upstream WHATWG stream issues are on the roadmap (if at all) 16:50:51 Jan-Ivar: the new proposal we want to present is streams-based, but improvements over the existing one 16:50:57 ... still needs some fixes in WHATWG streams 16:52:32 ... I have linked demos in the slides for some of the issues we're trying to address 16:54:10 TimP: it would be good to start these presentations with use cases to scope our discussions 16:54:39 Jan-Ivar: the slides Youenn and I developed includes goals of the proposals 16:54:55 Harald: Media Capture Transform starts with use cases 16:55:09 Bernard: Streams have been adopted to use streams to manage pipelines 17:00:22 Youenn: please send early feedback on the proposals 17:00:33 RRSAgent, draft minutes 17:00:33 I have made the request to generate https://www.w3.org/2021/09/20-webrtc-minutes.html dom 17:00:41 RRSAgent, make log public 17:04:53 RRSAgent, draft minutes 17:04:53 I have made the request to generate https://www.w3.org/2021/09/20-webrtc-minutes.html dom 17:05:44 Meeting: WebRTC September 2021 virtual interim 17:05:56 RRSAgent, draft minutes 17:05:56 I have made the request to generate https://www.w3.org/2021/09/20-webrtc-minutes.html dom