Description
Calls sometimes have one-way or no audio because bridge_pcs() eagerly starts forwarding from pre-existing transceiver tracks that can become stale.
Root Cause
bridge_pcs() in media_bridge.rs starts forward_track forwarders from pre-existing transceivers found at bridge startup. These tracks can become stale after the PeerConnection processes internal events, resulting in no audio being forwarded. The Track events from pc.recv() carry live track instances and fire almost immediately.
Fix
Log pre-existing transceivers but do not start forwarders from them. Wait for Track events instead, falling back to pre-existing transceivers only after a 200ms timeout if no Track events fire.
File: src/proxy/proxy_call/media_bridge.rs
Fix commit: davidcforbes/rustpbx@9a8fff5
Description
Calls sometimes have one-way or no audio because
bridge_pcs()eagerly starts forwarding from pre-existing transceiver tracks that can become stale.Root Cause
bridge_pcs()inmedia_bridge.rsstartsforward_trackforwarders from pre-existing transceivers found at bridge startup. These tracks can become stale after the PeerConnection processes internal events, resulting in no audio being forwarded. The Track events frompc.recv()carry live track instances and fire almost immediately.Fix
Log pre-existing transceivers but do not start forwarders from them. Wait for Track events instead, falling back to pre-existing transceivers only after a 200ms timeout if no Track events fire.
File:
src/proxy/proxy_call/media_bridge.rsFix commit: davidcforbes/rustpbx@9a8fff5