Hi, I’m running into a reproducible VP8 simulcast issue in Chrome when a user turns their webcam on/off. I’d like to understand whether this is a known Chrome/libwebrtc issue, a mediasoup-client behavior, or something in my flow.
Environment
-
mediasoup: 3.19.13
-
mediasoup-client: 3.18.1
-
Browsers tested:
-
Chrome 143 → problem occurs
-
Firefox 145 → works correctly
-
Video codec: VP8 with simulcast enabled
-
One WebRtcTransport for sending
-
No SDP munging
The problem
When a user:
-
Enters the room with webcam ON, creating the first VP8 simulcast producer
-
Turns webcam OFF (I close the producer)
-
Turns webcam ON again (new VP8 simulcast producer on the same send transport)
Chrome fails during its internal negotiation with:
InvalidAccessError: Failed to execute ‘setLocalDescription’ on ‘RTCPeerConnection’:
Failed to set local offer sdp: The media section with MID=‘0’ negotiates simulcast
but does not negotiate the RID RTP header extension.
This error happens before any interaction with the mediasoup server — Chrome rejects its own offer inside mediasoup-client.
Important additional observation
-
The same flow works perfectly in Firefox 145.
-
The issue appears only in Chrome 143, which suggests something Chrome/libwebrtc-specific.
Strange behavior
-
If the user joins with webcam OFF, then turns webcam ON → OFF → ON, everything works in Chrome.
-
The error happens only when the first producer is created during join, and then a second is created later on the same RTCPeerConnection.
Reproduction steps (Chrome 143)
-
Create send transport
-
produce() with VP8 simulcast
-
.close() that producer
-
produce() again with VP8 simulcast on the same RTCPeerConnection
-
Chrome throws the error above inside setLocalDescription()
If I use pause/resume instead of closing the producer → no error.
Firefox does not have this issue even when closing/recreating producers.
What I checked
-
No SDP munging
-
No custom RTP header extensions
-
Router uses the default mediasoup rtpCapabilities
-
The failure originates inside Chrome/libwebrtc before any signaling is sent to the server
-
Firefox 145 handles the exact same flow without issues
Questions
-
Is this a Chrome/libwebrtc bug triggered by renegotiating VP8 RID simulcast after closing a sender?
-
Is this a known mediasoup-client v3 behavior or limitation when recreating VP8 simulcast producers on the same transport?
-
Is the recommended approach for webcam toggling to use pause/resume instead of closing producers to avoid renegotiation entirely?
-
Has anyone found a reliable workaround that allows a VP8 simulcast producer to be closed and recreated cleanly on Chrome?