From 4240ae39ce1fcdb491b56064687c337bbdb3190f Mon Sep 17 00:00:00 2001 From: davidcforbes Date: Sun, 22 Feb 2026 17:44:52 -0800 Subject: [PATCH] Start media bridge at 183 early media instead of waiting for 200 OK Track buffers go stale during the 6+ second gap between bridge creation (183 early media) and bridge start (200 OK). By the time forward_track starts reading, track.recv() delivers 0-1 buffered packets then stops. Fix: call bridge.start() immediately at 183 creation time. The start() guard (AtomicBool swap) prevents double-starting when 200 OK arrives. Co-Authored-By: Claude Opus 4.6 (cherry picked from commit 26445699b4126babae7dd461be9882051a4b9271) --- src/proxy/proxy_call/session.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/proxy/proxy_call/session.rs b/src/proxy/proxy_call/session.rs index ca9eac1..d97cb2f 100644 --- a/src/proxy/proxy_call/session.rs +++ b/src/proxy/proxy_call/session.rs @@ -1401,6 +1401,19 @@ impl CallSession { ); self.media_bridge = Some(bridge); + + // Start the bridge immediately during early media to prevent + // track buffers from going stale before 200 OK. The start() + // method has a guard that prevents double-starting, so the + // 200 OK start() call will safely no-op. + if let Some(ref bridge) = self.media_bridge { + if let Err(e) = bridge.start().await { + warn!( + session_id = %self.context.session_id, + "Failed to start media bridge during early media: {}", e + ); + } + } } if !call_answered && should_play_local {