From 5e1b18dab3588cab5586f4246e32cea39f6e3bed Mon Sep 17 00:00:00 2001 From: cnderrauber Date: Mon, 15 Jul 2024 15:11:46 +0800 Subject: [PATCH] Add option to disable ice lite (#2862) Some sfu's ice agent implementation has problem to establish ice connection with lite ice agent, add option to let client to disble it in server side. --- go.mod | 2 +- go.sum | 4 ++-- pkg/routing/interfaces.go | 3 +++ pkg/service/roommanager.go | 3 +++ pkg/service/rtcservice.go | 4 ++++ 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 6934cb094..cdeae3a63 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/jxskiss/base62 v1.1.0 github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1 github.com/livekit/mediatransportutil v0.0.0-20240625074155-301bb4a816b7 - github.com/livekit/protocol v1.19.2-0.20240712075845-9e23fdbd0885 + github.com/livekit/protocol v1.19.2-0.20240715070226-90ec75735bdd github.com/livekit/psrpc v0.5.3-0.20240616012458-ac39c8549a0a github.com/mackerelio/go-osstat v0.2.5 github.com/magefile/mage v1.15.0 diff --git a/go.sum b/go.sum index ac2a3a054..0026457b3 100644 --- a/go.sum +++ b/go.sum @@ -167,8 +167,8 @@ github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1 h1:jm09419p0lqTkD github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1/go.mod h1:Rs3MhFwutWhGwmY1VQsygw28z5bWcnEYmS1OG9OxjOQ= github.com/livekit/mediatransportutil v0.0.0-20240625074155-301bb4a816b7 h1:F1L8inJoynwIAYpZENNYS+1xHJMF5RFRorsnAlcxfSY= github.com/livekit/mediatransportutil v0.0.0-20240625074155-301bb4a816b7/go.mod h1:jwKUCmObuiEDH0iiuJHaGMXwRs3RjrB4G6qqgkr/5oE= -github.com/livekit/protocol v1.19.2-0.20240712075845-9e23fdbd0885 h1:M8bbMw5o40krXTHQBeWLIMQ2sh73lu8Ddaay1hc+1OM= -github.com/livekit/protocol v1.19.2-0.20240712075845-9e23fdbd0885/go.mod h1:bNjJi+8frdvC84xG0CJ/7VfVvqerLg2MzjOks0ucyC4= +github.com/livekit/protocol v1.19.2-0.20240715070226-90ec75735bdd h1:aB4NsO0vA/LS6j8m8IIOAVlCvrG79aPz5tSSoq3OQ7g= +github.com/livekit/protocol v1.19.2-0.20240715070226-90ec75735bdd/go.mod h1:bNjJi+8frdvC84xG0CJ/7VfVvqerLg2MzjOks0ucyC4= github.com/livekit/psrpc v0.5.3-0.20240616012458-ac39c8549a0a h1:EQAHmcYEGlc6V517cQ3Iy0+jHgP6+tM/B4l2vGuLpQo= github.com/livekit/psrpc v0.5.3-0.20240616012458-ac39c8549a0a/go.mod h1:CQUBSPfYYAaevg1TNCc6/aYsa8DJH4jSRFdCeSZk5u0= github.com/mackerelio/go-osstat v0.2.5 h1:+MqTbZUhoIt4m8qzkVoXUJg1EuifwlAJSk4Yl2GXh+o= diff --git a/pkg/routing/interfaces.go b/pkg/routing/interfaces.go index d13d734a0..6286cab74 100644 --- a/pkg/routing/interfaces.go +++ b/pkg/routing/interfaces.go @@ -61,6 +61,7 @@ type ParticipantInit struct { AdaptiveStream bool ID livekit.ParticipantID SubscriberAllowPause *bool + DisableICELite bool } // Router allows multiple nodes to coordinate the participant session @@ -130,6 +131,7 @@ func (pi *ParticipantInit) ToStartSession(roomName livekit.RoomName, connectionI GrantsJson: string(claims), AdaptiveStream: pi.AdaptiveStream, ParticipantId: string(pi.ID), + DisableIceLite: pi.DisableICELite, } if pi.SubscriberAllowPause != nil { subscriberAllowPause := *pi.SubscriberAllowPause @@ -156,6 +158,7 @@ func ParticipantInitFromStartSession(ss *livekit.StartSession, region string) (* Region: region, AdaptiveStream: ss.AdaptiveStream, ID: livekit.ParticipantID(ss.ParticipantId), + DisableICELite: ss.DisableIceLite, } if ss.SubscriberAllowPause != nil { subscriberAllowPause := *ss.SubscriberAllowPause diff --git a/pkg/service/roommanager.go b/pkg/service/roommanager.go index 5d0ebc025..c2451e611 100644 --- a/pkg/service/roommanager.go +++ b/pkg/service/roommanager.go @@ -379,6 +379,9 @@ func (r *RoomManager) StartSession( pv := types.ProtocolVersion(pi.Client.Protocol) rtcConf := *r.rtcConfig rtcConf.SetBufferFactory(room.GetBufferFactory()) + if pi.DisableICELite { + rtcConf.SettingEngine.SetLite(false) + } sid := livekit.ParticipantID(guid.New(utils.ParticipantPrefix)) pLogger := rtc.LoggerWithParticipant( rtc.LoggerWithRoom(logger.GetLogger(), room.Name(), room.ID()), diff --git a/pkg/service/rtcservice.go b/pkg/service/rtcservice.go index e6d82426f..15e0af0ed 100644 --- a/pkg/service/rtcservice.go +++ b/pkg/service/rtcservice.go @@ -130,6 +130,7 @@ func (s *RTCService) validate(r *http.Request) (livekit.RoomName, routing.Partic adaptiveStreamParam := r.FormValue("adaptive_stream") participantID := r.FormValue("sid") subscriberAllowPauseParam := r.FormValue("subscriber_allow_pause") + disableICELite := r.FormValue("disable_ice_lite") if onlyName != "" { roomName = onlyName @@ -193,6 +194,9 @@ func (s *RTCService) validate(r *http.Request) (livekit.RoomName, routing.Partic subscriberAllowPause := boolValue(subscriberAllowPauseParam) pi.SubscriberAllowPause = &subscriberAllowPause } + if disableICELite != "" { + pi.DisableICELite = boolValue(disableICELite) + } return roomName, pi, http.StatusOK, nil }