The issue with concurrent WebRTC calls in Chromium is likely related to internal limits on ICE/STUN/TURN handling. Based on your findings, it appears that exceeding three concurrent calls leads to failures in audio negotiation due to missing RTP streams. This could result from resource limitations or Chromium’s handling of multiple ICE candidates.
To address this: 1. Use a TURN server instead of relying solely on STUN. TURN servers relay media traffic and can handle NAT traversal more reliably. Test both hosted solutions (e.g., Google’s TURN service) and custom setups to determine the best fit. 2. Adjust your WebRTC configuration: • Increase iceCandidatePoolSize to optimize candidate allocation. • Set the iceTransportPolicy to prioritize relay candidates and reduce the dependency on local candidates. 3. Explore Chromium settings via chrome://flags. Enabling flags like experimental QUIC protocol support may improve connection handling under high concurrency. While no documented ICE/STUN limit exists, tweaking these settings can help. 4. Reduce active network adapters to minimize STUN requests. Chromium may generate multiple requests for each adapter, so disabling unused adapters (e.g., Wi-Fi if on Ethernet) could help. 5. Increase iceCheckingTimeout to allow more time for connection negotiation. Use chrome://webrtc-internals to debug failed calls and verify ICE candidate pair formation.
If the issue persists with 8+ calls, it could be a Chromium-specific limit or bug. For scaling up to 50-60 calls, consider using an SFU (Selective Forwarding Unit) or MCU (Multipoint Control Unit) to manage connections centrally, as this offloads negotiation and media handling from individual clients.
If none of these steps work, consider filing a detailed bug report to Chromium developers with reproducible steps and logs from webrtc-internals.