From 3cf70b21982928859208decbcdc0790ccfcfb6c7 Mon Sep 17 00:00:00 2001 From: cnderrauber Date: Mon, 9 Sep 2024 16:16:09 +0000 Subject: [PATCH] Disable fast negotiation temporarily after migration (#2991) --- pkg/rtc/transport.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/pkg/rtc/transport.go b/pkg/rtc/transport.go index d61af1e1e..a3785fac7 100644 --- a/pkg/rtc/transport.go +++ b/pkg/rtc/transport.go @@ -1009,7 +1009,7 @@ func (t *PCTransport) Negotiate(force bool) { // no op to cancel pending negotiation }) t.debouncePending = false - t.lastNegotiate = time.Now() + t.updateLastNeogitateLocked() postEvent = true } else { @@ -1017,7 +1017,7 @@ func (t *PCTransport) Negotiate(force bool) { t.debouncedNegotiate(func() { t.lock.Lock() t.debouncePending = false - t.lastNegotiate = time.Now() + t.updateLastNeogitateLocked() t.lock.Unlock() t.postEvent(event{ @@ -1036,6 +1036,12 @@ func (t *PCTransport) Negotiate(force bool) { } } +func (t *PCTransport) updateLastNeogitateLocked() { + if now := time.Now(); now.After(t.lastNegotiate) { + t.lastNegotiate = now + } +} + func (t *PCTransport) ICERestart() error { if t.pc.ConnectionState() == webrtc.PeerConnectionStateClosed { t.params.Logger.Warnw("trying to restart ICE on closed peer connection", nil) @@ -1234,6 +1240,10 @@ func (t *PCTransport) SetPreviousSdp(offer, answer *webrtc.SessionDescription) { } } } + // disable fast negotiation temporarily after migration to avoid sending offer + // contains part of subscribed tracks before migration (needs some time to resolve them). + // browser might have trouble to handle this kind of offer (To be confirmed). + t.lastNegotiate = time.Now().Add(iceFailedTimeoutTotal) t.lock.Unlock() }