15:02:00 RRSAgent has joined #webrtc 15:02:04 logging to https://www.w3.org/2025/04/22-webrtc-irc 15:02:04 Zakim has joined #webrtc 15:02:04 RRSAgent, make log public 15:02:05 Meeting: WebRTC April 2025 meeting 15:02:05 Agenda: https://www.w3.org/2011/04/webrtc/wiki/April_22_2025 15:02:05 Slideset: https://docs.google.com/presentation/d/1weRIFjbNC0Nf-8xUIKP1Fs98HHVB-JyaVmxDXg_xVbg/edit#slide=id.g2bb12bc23cb_0_0 15:02:05 Chairs: Guido, Jan-Ivar, Youenn 15:02:05 Present+ Guido, Youenn, Sameer, Jan-Ivar, Dom, RichardBarnes, 15:02:05 Recording is starting 15:02:25 Meeting: WebRTC April 2025 meeting 15:02:25 Agenda: https://www.w3.org/2011/04/webrtc/wiki/April_22_2025 15:02:25 Slideset: https://docs.google.com/presentation/d/1weRIFjbNC0Nf-8xUIKP1Fs98HHVB-JyaVmxDXg_xVbg/edit#slide=id.g2bb12bc23cb_0_0 15:02:25 Chairs: Guido, Jan-Ivar, Youenn 15:02:27 Present+ Guido, Youenn, Sameer, Jan-Ivar, Dom, RichardBarnes, 15:02:27 Recording is starting 15:03:05 Present+ OlgaSharonova 15:04:17 Present+ Carine 15:05:59 Topic: -> https://github.com/w3c/mediacapture-main/ Media Capture and Streams 15:05:59 Subtopic: Issue #1019 What is the purpose of requiring a successful gUM call before enumerateDevices? 15:05:59 [slide 11] 15:09:02 [slide 12] 15:10:59 Jan-Ivar: the proposal is a bit different from what I expecte 15:11:03 s/te/ted 15:11:20 ... it's common to ask for camera & microphone in a lobby UX prior to the meeting 15:11:46 ... the Zoom flow is a good use case to solve 15:12:02 ... I'm not sure about tying it to permissions with all browsers supporting one-time permission 15:12:24 ... some users may prefer to never persist a permission 15:12:34 Youenn: you're suggesting to relax the room further? 15:12:51 Jan-Ivar: right - this would solve the zoom flow not just in Chrome but also in Firefox 15:13:40 ... the issue is to detect a video conferencing web site where mic/camera sharing is kind of expected; less so on other sites 15:13:46 Present+ ShinJun 15:14:00 ... e.g. it could be a Web site where mic & camera have been exposed in the past 15:14:12 ... (or expose both always) 15:15:20 ... I don't like the dependency on persistent permissions 15:16:47 Youenn: my goal was trying to solve a specific issue, not opening new privacy holes - we had something like you described before and got push back that this created surprises 15:17:14 ... this proposal was narrowly focused on improving interop 15:17:58 Jan-Ivar: what if added "UA may expose camera devices if they can detect cameras have been used in the past"? 15:18:05 Youenn: I could go with that 15:18:44 Guido: Youenn's proposal is an improvement; I think exposing cameras would be surprising to end users, but would be OK if it's a MAY 15:19:10 ... clarification: is it active usage of gUM or a successful gUM call occured? 15:19:41 Youenn: I meant the latter (with edge cases to take into account as the current spec does) 15:20:50 Guido: +1 to the change, but let's make sure we leave UA freedom on determining when to persist permissions 15:22:57 ... let's adopt this and leave time for implementation experience 15:23:15 Dom: so you would be comfortable with implementing this for gathering implementation experience 15:23:17 Guido: yes 15:23:43 Jan-Ivar: we have a compat issue, where the "Zoom" experience behaves differently between browsers with and without persistent permission 15:23:54 ... that's where my proposal for the "MAY" clause comes from 15:24:06 ... I'm happy to iterate on more specific language 15:24:33 Youenn: we can also discuss with the Zoom folks to understand their needs 15:25:47 Guido: I'm not sure the status of "returning users" differs when there is no permission 15:26:19 Jan-Ivar: my focus is on the differences between users with persistent and one-time permissions (and reducing them) 15:27:17 Guido: I think persistent permissions is a signal of trust that we shouldn't try to override 15:28:19 Jan-Ivar: in order to get a user to give permission to a mic/camera, you need to let the user pick it, but if they can only be listed if permission has been granted, this is a catch-22 15:28:23 Present+ PatrickRockhill 15:28:53 Jan-Ivar: we end up getting user reports on subpar experience for the non-persistent permission workflow 15:28:59 ... hence my desire to improve it 15:29:41 RESOLVED: #1019 is ready for a PR with a partial solution as per the proposal, with a MAY for additional relaxing and clarification on successful gUM 15:29:47 Subtopic: Issue #1035 - Support multiple echoCancellation modes 15:29:47 [slide 13] 15:32:55 [slide 14] 15:33:39 Youenn: a prototype would be nice 15:34:07 ... I think there was discussion about removing some audio sources from echo cancellation 15:34:16 ... which would require a more complex Web Audio API 15:34:41 Guido: the problem is that this only work for audio sources within the Web app - it could come from another web app or another application altogether 15:34:54 ... so it wouldn't solve all the use cases, and would come with more complexity 15:36:48 ... my main question is whether supporting the use case of cancelling remote participants or all audio sources is worth doing 15:36:54 Youenn: that seems worth pursuing 15:37:40 Jan-Ivar: it seems useful 15:38:28 ... I'll want to consult with more audio folks at Mozilla 15:38:55 Guido: I'll prepare an initial proposal to iterate on 15:39:09 Youenn: in mediacapture-extensions 15:39:24 RESOLVED: Proceed with a mediacapture-extensions pull request to address this use case 15:39:31 RRSAgent, draft minutes 15:39:32 I have made the request to generate https://www.w3.org/2025/04/22-webrtc-minutes.html dom 15:39:41 Subtopic: Issue #1036 - HTMLVideoElement.currentTime is increasing differently on different UAs 15:39:41 [slide 15] 15:41:58 Guido: my impression is that this a Chromium bug 15:42:13 ... I think it's supposed to work the way Safari and Firefox are implementing it 15:42:58 Youenn: I'll file a bug 15:43:25 RESOLVED: Firefox and Safari's behavior is correct and the spec doesn't need an update 15:43:43 Topic: -> https://github.com/w3c/webrtc-encoded-transform WebRTC Encoded Transform 15:43:43 Subtopic: Issue #230 - Clarification on "not processing video packets" requested 15:43:43 [slide 19] 15:43:53 Present+ BrianBaldino 15:45:38 [slide 20] 15:47:37 Harald: rejecting as part of the audio receiver is that it will never change 15:48:28 ... the inactive transceiver is problematic; not sure there is a point in rejecting a request for a key frame 15:48:37 Youenn: I don't have a use case 15:49:29 Jan-Ivar: this LGTM 15:49:39 RESOLVED: proceed with proposal A 15:49:47 Subtopic: Issue #244 - Add audioLevel to RTCEncodedAudioFrameMetadata 15:49:47 [slide 21] 15:51:39 Youenn: SGTM - it would be apply to both Sender and Transceiver 15:51:41 Guido: right 15:51:52 RESOLVED: prepare a PR 15:52:11 Topic: SFrame 15:52:11 [slide 24] 15:52:16 Present+ PeterThatcher 15:54:53 [slide 25] 15:56:53 Richard: we're interested in SFrameTransform for our WebEx Web client 15:57:34 Subtopic: -> https://github.com/w3c/webrtc-encoded-transform/issues/214 Issue #214 - Evaluate how to expose SFrame packetization format to RTCScriptTransform and SFrameTransform 15:57:39 [slide 26] 15:59:48 Harald: a year ago we had a proposal for adding encoded frames to O/A through a property to indicate the packetization mode to use 16:00:21 ... if we have a specific packetization mode for SFrame, using that encoding format allows to use a ScriptTransform that is compatible with SFrame 16:00:35 ... and the native SFrameTransform would work 16:00:45 Youenn: a single value per transform sounds better than per frame 16:01:37 Harald: the proposal for multiple payload types in ScriptTransform describes how to deal with this 16:01:44 Youenn: this sounds promising, we should revive that effort 16:02:36 Richard: ScriptTransform could impact packetization in many other ways beyond what can be taxonomized 16:03:03 ... I wonder if the better solution is not to make this possible via ScriptTransform at all, and leave the proper approach to SFrameTransform 16:03:26 Youenn: having a way to signal the packetization allows for a nicer migration path from ScriptTransform 16:04:14 Richard: wrt dichotomoy between payload type vs media type, I think both need to be exposed 16:04:34 ... the transform needs to know both 16:05:05 Youenn: indeed; right now we're exposing the payload type which is equivalent to the media type; but SFrame changes this 16:05:17 Richard: +1 to attaching it to the Transform 16:05:55 Jan-Ivar: supporting of working on SFrame, and to favoring per transform vs per frame 16:06:53 Youenn: let's try to make Harald's proposal work 16:07:29 Harald: I've been working on this - it has required major refactoring on the payload code in libwebrtc 16:08:14 ... I don't think starting with a Boolean would help 16:08:28 Youenn: maybe an enum we can extend with additional values to support more use cases 16:08:57 Harald: the list of possible transforms is shorter than the list of codecs 16:09:20 ... it would express to the media stack the class of frame it should assume for packetization 16:11:01 -> https://github.com/w3c/webrtc-encoded-transform/pull/186/files Add description of an API for controlling SDP codec negotiation 16:11:26 RESOLVED: use PR #186 as the starting point for this discussion 16:11:54 [slide 27] 16:13:26 Harald: installing an SFrameTransform should obey normal SDP O/A rules 16:13:36 ... ie if you want to send SFrame, that should be included in your SDP 16:13:46 ... and if the other side doesn't support receiving it, you should not send it 16:14:03 ... SFrame would be treated like any other codec 16:14:39 Youenn: when you remove a codec, the engine will select the next one; SFrameTransform can be set before or after negotiation 16:15:05 Harald: we should require that SFrameTransform sets the negotiation needed flag 16:15:34 Richard: we need to ensure that if an app expects to use SFrame content, it is only sent if it is so 16:16:08 Jan-Ivar: treating SFrame as a codec for a negociation it makes sense, but you wouldn't want the UA to choose whether it's on or off 16:16:18 Richard: but that's consistent with requiring re-negotiation 16:16:32 Youenn: but you'll need to be negotiate both the media type and the sframe payload type 16:16:55 Harald: on the sender side, we have a similar case with RED 16:17:22 ... if you negotiate both RED and Opus with RED first in your prioirty list, you get RED-encoded Opus 16:17:35 ... if it comes second, it's only signaling ability to receive 16:17:55 ... for SFrame, we would have to say it has to appear before the media type it would be used on 16:18:45 Youenn: I agree on the sending side; on the receiving side, not sure 16:19:14 Harald: I'm not sure how to describe the risk of receiving non-encrypted frames 16:19:36 Richard: this feels symetric though - there are also expectations on what I receive is encrypted 16:20:05 Jan-Ivar: endpoints in an SFrameTransform are allowed to do a lot kind of things; the new API Harald is proposing would be optional in any case 16:20:32 Youenn: so we seem to have agreement on the sender side with dropping frames; not clear on the receiving side yet 16:21:00 ... we could start working on that part, before coming back to the WG with the receiving side 16:21:21 Richard: I don't think there are any valid use cases for negotiated both encrypted and not encrypted 16:21:45 s/negotiated/negotiating 16:22:32 Youenn: both the payload type and media types would need to be negotiated in the current proposal 16:23:00 ... we could have a new a-line to say we're only interested in sframe (e.g. a=sframe-only) 16:23:12 s/.../Peter:/ 16:23:25 Richard: this sounds worth raising the topic to AVTCore 16:23:45 Harald: with the payload type negotiation for Sframe - it's a hop by hop payload type 16:24:43 ... we need to resurface this discussion 16:26:29 Richard: with an SFrameTransform, you should only send sframe-encrypted packets / only process sframe-encrypted received packets 16:27:53 Youenn: ideally we would define SFrameTransform as a subcase of SCriptTransform 16:28:58 Dom: SFrameTransform gets you more (better packetization, possibly better trust signal) over what's currently possible with ScriptTransform 16:29:10 Youenn: and possibly we can make these properties also available to ScriptTransform 16:31:56 Harald: we may want to consider requiring setting an SFrameTransform ahead of negotiation 16:32:16 Youenn: please bring your ideas to issue #214 16:32:18 [slide 28] 16:32:54 Youenn: SFrame can be used per frame or per packet 16:33:15 ... currently SFrameTransform only works per frame, but there is a value to the per packet approach 16:33:35 Richard: in WebEx, we do it per media payload for a couple of reasons: 16:33:42 ... * it's simpler to set up (?) 16:34:15 ... * esp for videos, it requires getting the whole frame - losing one packet means losing the frame, and frames can only be processed when all packets have been received 16:34:52 ... the proposal would be to add support for per-packet to ScriptTransform 16:35:40 [slide 29] 16:38:49 Jan-Ivar: leaving ScriptTransform aside, couldn't this be handled transparently with SFrameTransform with a constructor switch? 16:39:04 Youenn: that's the SFrameTransformOptions proposal 16:39:33 ... this would work from an implementation perspective, but it kind of breaks the model of WebRTC encoded Transform 16:40:10 Peter: the API might be more complicated - both options may need to be negotiatable 16:40:25 ... a bit like bundling in WebRTC-pc 16:40:51 Jan-Ivar: that ties back to my question on whether SDP negotiation is really needed vs making it possible out of band 16:42:08 Youenn: my question is first and foremost on the model of WebRTC Encoded Transform which a per-packet approach changes, possibly adding more complexity 16:43:48 Jan-Ivar: we're supportive of supporting per-packet SFrame, possibly through a switch 16:44:01 ... pending more clarity on the additional complexity 16:44:33 Harald: I'm not supportive of mixing these things - shoehorning per-packet in particular in the ScriptTransform model 16:44:50 ... per-packet things should be hammered out in the RTPTransport API 16:45:21 ... When it comes to the SFrameTransform, I'm not as critical - I don't think a switch is right way; a different SPacketTransform API would work better 16:46:33 Jan-Ivar: is it not possible to have SPacket feeding input into a ScriptTransform pipeline? 16:46:59 Youenn: yes, this would work: the depacketizer would decrypt, construct the frame and pass it to ScriptTransform 16:47:37 Youenn: re SPacketTransform, would this fit into the existing sender transform API, or something completely different? 16:47:58 Harald: I think the former should work 16:48:12 Youenn: the two interfaces would share a lot of similar needs / error management 16:48:47 Jan-Ivar: this feels like something we can bikeshed 16:48:59 Youenn: probably with a mix-in interface for shared properties and methods 16:50:17 Youenn: separately, it seems to me it would be much simpler if SFrame packetization was codec specific 16:50:28 ... I'll raise an issue to continue that discussion 16:50:42 RRSAgent, draft minutes 16:50:43 I have made the request to generate https://www.w3.org/2025/04/22-webrtc-minutes.html dom 18:28:31 Zakim has left #webrtc