W3C WebRTC
WG Meeting
October 21, 2025
8 AM - 10 AM
1
Chairs: Jan-Ivar Bruaroey
Youenn Fablet
Guido Urdaneta
W3C WG IPR Policy
2
Welcome!
3
About this Virtual Meeting
4
W3C Code of Conduct
5
Virtual Interim Meeting Tips
This session is (still) being recorded
6
Understanding Document Status
7
Issues for Discussion Today
Time control:
8
WebRTC-pc remote track mute (Henrik)
Start Time: 08:10 AM
End Time: 08:20 AM
9
#3077: Should the remote track mute in response to replaceTrack(null)?
What is a muted track?
🌈 QUIZ TIME 🌈
So, if my track isn’t producing frames, does that mean it’s muted?
10
#3077: Should the remote track mute in response to replaceTrack(null)?
What are UAs doing?
Problems with #1:
Spec language implies Quiz answer #2.
11
#3077: Should the remote track mute in response to replaceTrack(null)?
Want to detect “frames not flowing”? Just poll getStats().
Proposal 1:
12
#3077: Should the remote track mute in response to replaceTrack(null)?
Spec also says to mute when:
Problems:
Proposal 2:
13
WebRTC-extensions�receiver.on[c/s]srcchange event (Henrik)
Start Time: 08:20 AM
End Time: 08:40 AM
14
PR #243: Add onssrcchange/oncsrcchange events to RTCRtpReceiver (Henrik)
Recap:
At the November 2024 WG meeting we decided to add events that fire when the SSRC or CSRC value changes.
15
PR #243: Add onssrcchange/oncsrcchange events to RTCRtpReceiver (Henrik)
The noted concern:
Reasons not to be concerned:
The idea that one of the APIs can replace the other when they fire at different points in time and for different reasons is wrong.
16
PR #243: Add onssrcchange/oncsrcchange events to RTCRtpReceiver (Henrik)
Proposal: Land the PR.
17
Discussion (End Time: 08:40)
18
WebRTC-extensions 5G network slicing (Youenn)
Start Time: 08:40 AM
End Time: 09:00 AM
19
20
21
22
23
Discussion (End Time: 09:00)
24
SFrame processing model (Youenn)
Start Time: 09:00 AM
End Time: 09:30 AM
25
26
m=audio 50000 RTP/SAVPF 10 11
a=sframe
a=rtpmap:10 opus/48000/2
a=rtpmap:11 CN/8000
27
const transceiver = pc.addTransceiver("video");
const sframeOptions = { ... };
// Native SFrame transformn
transceiver.sender.transform = new SFrameTransform(sframeOptions);�// Script SFrame transformn
transceiver.sender.transform = new RTCRtpScriptTransform(worker, { type:"sframe" });
pc.ontrack = e => e.receiver.transform = new SFrameTransform(...);�pc.onnegotiationneeded = () => {� // Renegotiate with SFrame enabled, if needed
}
28
29
Discussion (End Time: 09:30)
30
MediaCapture-main/extensions (Jan-Ivar)
Start Time: 09:30 AM
End Time: 09:55 AM
31
MediaCapture-main/extensions (Jan-Ivar)
32
Issue 1058 - Clarify what "system default" means
Spec says: "User Agents are encouraged to default to using the user's primary or system default device for kind (when possible)."
Can’t mean UA default or above sentence is circular. Means OS default: Browsers expose inherent/changed OS settings through enumerateDevices() order + devicechange
Picking “BRIO” in Firefox picker: vs. Chrome picker:
33
Issue 164: Detect speech on muted microphone
Privacy: the mic is still on during mute (!)
Users shouldn’t need to trust websites to
not record them during “mute”.�
Will work poorly with UA mute & PEPC
https://github.com/WICG/PEPC/issues/62
Proposal:
�const stream = await navigator.mediaDevices.getUserMedia({
audio: {detectSpeechActivity: true}
});
const [track] = stream.getAudioTracks();
if (track.getSettings().detectSpeechActivity) { // feature detection
track.onspeechactivity = () => track.enabled || alert("Are you talking? Your mic is off.");
}
34
Discussion (End Time: 09:55)
35
Wrapup and Next Steps
Start Time: 09:55 AM
End Time: 10:00 AM
36
Next Steps
37
Thank you
Special thanks to:
WG Participants, Editors & Chairs
38