diff --git a/pkg/rtc/participant.go b/pkg/rtc/participant.go index 55fd04df4..8e64941af 100644 --- a/pkg/rtc/participant.go +++ b/pkg/rtc/participant.go @@ -81,6 +81,7 @@ type ParticipantParams struct { AdaptiveStream bool AllowTCPFallback bool TCPFallbackRTTThreshold int + AllowUDPUnstableFallback bool TURNSEnabled bool GetParticipantInfo func(pID livekit.ParticipantID) *livekit.ParticipantInfo ReconnectOnPublicationError bool @@ -977,20 +978,21 @@ func (p *ParticipantImpl) setupTransportManager() error { SID: p.params.SID, // primary connection does not change, canSubscribe can change if permission was updated // after the participant has joined - SubscriberAsPrimary: p.ProtocolVersion().SubscriberAsPrimary() && p.CanSubscribe(), - Config: p.params.Config, - ProtocolVersion: p.params.ProtocolVersion, - Telemetry: p.params.Telemetry, - CongestionControlConfig: p.params.CongestionControlConfig, - EnabledCodecs: p.params.EnabledCodecs, - SimTracks: p.params.SimTracks, - ClientConf: p.params.ClientConf, - ClientInfo: p.params.ClientInfo, - Migration: p.params.Migration, - AllowTCPFallback: p.params.AllowTCPFallback, - TCPFallbackRTTThreshold: p.params.TCPFallbackRTTThreshold, - TURNSEnabled: p.params.TURNSEnabled, - Logger: p.params.Logger, + SubscriberAsPrimary: p.ProtocolVersion().SubscriberAsPrimary() && p.CanSubscribe(), + Config: p.params.Config, + ProtocolVersion: p.params.ProtocolVersion, + Telemetry: p.params.Telemetry, + CongestionControlConfig: p.params.CongestionControlConfig, + EnabledCodecs: p.params.EnabledCodecs, + SimTracks: p.params.SimTracks, + ClientConf: p.params.ClientConf, + ClientInfo: p.params.ClientInfo, + Migration: p.params.Migration, + AllowTCPFallback: p.params.AllowTCPFallback, + TCPFallbackRTTThreshold: p.params.TCPFallbackRTTThreshold, + AllowUDPUnstableFallback: p.params.AllowUDPUnstableFallback, + TURNSEnabled: p.params.TURNSEnabled, + Logger: p.params.Logger, }) if err != nil { return err diff --git a/pkg/rtc/transportmanager.go b/pkg/rtc/transportmanager.go index c7dfcc57d..de7c0a32b 100644 --- a/pkg/rtc/transportmanager.go +++ b/pkg/rtc/transportmanager.go @@ -34,22 +34,23 @@ const ( ) type TransportManagerParams struct { - Identity livekit.ParticipantIdentity - SID livekit.ParticipantID - SubscriberAsPrimary bool - Config *WebRTCConfig - ProtocolVersion types.ProtocolVersion - Telemetry telemetry.TelemetryService - CongestionControlConfig config.CongestionControlConfig - EnabledCodecs []*livekit.Codec - SimTracks map[uint32]SimulcastTrackInfo - ClientConf *livekit.ClientConfiguration - ClientInfo ClientInfo - Migration bool - AllowTCPFallback bool - TCPFallbackRTTThreshold int - TURNSEnabled bool - Logger logger.Logger + Identity livekit.ParticipantIdentity + SID livekit.ParticipantID + SubscriberAsPrimary bool + Config *WebRTCConfig + ProtocolVersion types.ProtocolVersion + Telemetry telemetry.TelemetryService + CongestionControlConfig config.CongestionControlConfig + EnabledCodecs []*livekit.Codec + SimTracks map[uint32]SimulcastTrackInfo + ClientConf *livekit.ClientConfiguration + ClientInfo ClientInfo + Migration bool + AllowTCPFallback bool + TCPFallbackRTTThreshold int + AllowUDPUnstableFallback bool + TURNSEnabled bool + Logger logger.Logger } type TransportManager struct { @@ -710,7 +711,7 @@ func (t *TransportManager) OnReceiverReport(dt *sfu.DownTrack, report *rtcp.Rece } func (t *TransportManager) onMediaLossUpdate(loss uint8) { - if t.params.TCPFallbackRTTThreshold == 0 { + if t.params.TCPFallbackRTTThreshold == 0 || !t.params.AllowUDPUnstableFallback { return } t.lock.Lock()