diff --git a/go.mod b/go.mod index 6a3fbf6be..657207fa6 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,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-20230326055817-ed569ca13d26 - github.com/livekit/protocol v1.5.3 + github.com/livekit/protocol v1.5.4-0.20230413111958-5fea69067bbc github.com/livekit/psrpc v0.2.11-0.20230405191830-d76f71512630 github.com/mackerelio/go-osstat v0.2.4 github.com/magefile/mage v1.14.0 diff --git a/go.sum b/go.sum index c1ae9002f..69bad2832 100644 --- a/go.sum +++ b/go.sum @@ -241,8 +241,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-20230326055817-ed569ca13d26 h1:QlQFyMwCDgjyySsrgmrMcVbEBA6KZcyTzvK+z346tUA= github.com/livekit/mediatransportutil v0.0.0-20230326055817-ed569ca13d26/go.mod h1:eDA41kiySZoG+wy4Etsjb3w0jjLx69i/vAmSjG4bteA= -github.com/livekit/protocol v1.5.3 h1:xCzKeQss4Fp3tYW21q4E2mvJ2vwQqxxfnymBHmvt9Gg= -github.com/livekit/protocol v1.5.3/go.mod h1:YPmFvsD0cr7KlC7wsoLTLwCAAJun/ovCDBCvUnWvdwo= +github.com/livekit/protocol v1.5.4-0.20230413111958-5fea69067bbc h1:15IrYsN4PRgrH2MldkYgnTqqNxgRgjVGLjEtwurphCQ= +github.com/livekit/protocol v1.5.4-0.20230413111958-5fea69067bbc/go.mod h1:YPmFvsD0cr7KlC7wsoLTLwCAAJun/ovCDBCvUnWvdwo= github.com/livekit/psrpc v0.2.11-0.20230405191830-d76f71512630 h1:Rm5KLZgQxWnTidY+H8MsAV6sk1iiFxeXqPFgSLkMing= github.com/livekit/psrpc v0.2.11-0.20230405191830-d76f71512630/go.mod h1:K0j8f1PgLShR7Lx80KbmwFkDH2BvOnycXGV0OSRURKc= github.com/mackerelio/go-osstat v0.2.4 h1:qxGbdPkFo65PXOb/F/nhDKpF2nGmGaCFDLXoZjJTtUs= diff --git a/pkg/routing/interfaces.go b/pkg/routing/interfaces.go index 20c090809..566d2a2b4 100644 --- a/pkg/routing/interfaces.go +++ b/pkg/routing/interfaces.go @@ -34,16 +34,17 @@ type MessageSource interface { } type ParticipantInit struct { - Identity livekit.ParticipantIdentity - Name livekit.ParticipantName - Reconnect bool - ReconnectReason livekit.ReconnectReason - AutoSubscribe bool - Client *livekit.ClientInfo - Grants *auth.ClaimGrants - Region string - AdaptiveStream bool - ID livekit.ParticipantID + Identity livekit.ParticipantIdentity + Name livekit.ParticipantName + Reconnect bool + ReconnectReason livekit.ReconnectReason + AutoSubscribe bool + Client *livekit.ClientInfo + Grants *auth.ClaimGrants + Region string + AdaptiveStream bool + ID livekit.ParticipantID + SubscriberAllowPause *bool } type NewParticipantCallback func( @@ -117,7 +118,7 @@ func (pi *ParticipantInit) ToStartSession(roomName livekit.RoomName, connectionI return nil, err } - return &livekit.StartSession{ + ss := &livekit.StartSession{ RoomName: string(roomName), Identity: string(pi.Identity), Name: string(pi.Name), @@ -130,7 +131,13 @@ func (pi *ParticipantInit) ToStartSession(roomName livekit.RoomName, connectionI GrantsJson: string(claims), AdaptiveStream: pi.AdaptiveStream, ParticipantId: string(pi.ID), - }, nil + } + if pi.SubscriberAllowPause != nil { + subscriberAllowPause := *pi.SubscriberAllowPause + ss.SubscriberAllowPause = &subscriberAllowPause + } + + return ss, nil } func ParticipantInitFromStartSession(ss *livekit.StartSession, region string) (*ParticipantInit, error) { @@ -139,7 +146,7 @@ func ParticipantInitFromStartSession(ss *livekit.StartSession, region string) (* return nil, err } - return &ParticipantInit{ + pi := &ParticipantInit{ Identity: livekit.ParticipantIdentity(ss.Identity), Name: livekit.ParticipantName(ss.Name), Reconnect: ss.Reconnect, @@ -150,5 +157,11 @@ func ParticipantInitFromStartSession(ss *livekit.StartSession, region string) (* Region: region, AdaptiveStream: ss.AdaptiveStream, ID: livekit.ParticipantID(ss.ParticipantId), - }, nil + } + if ss.SubscriberAllowPause != nil { + subscriberAllowPause := *ss.SubscriberAllowPause + pi.SubscriberAllowPause = &subscriberAllowPause + } + + return pi, nil } diff --git a/pkg/service/roommanager.go b/pkg/service/roommanager.go index 52778c916..9f4df01fb 100644 --- a/pkg/service/roommanager.go +++ b/pkg/service/roommanager.go @@ -305,6 +305,10 @@ func (r *RoomManager) StartSession( if r.config.RTC.ReconnectOnSubscriptionError != nil { reconnectOnSubscriptionError = *r.config.RTC.ReconnectOnSubscriptionError } + subscriberAllowPause := r.config.RTC.CongestionControl.AllowPause + if pi.SubscriberAllowPause != nil { + subscriberAllowPause = *pi.SubscriberAllowPause + } participant, err = rtc.NewParticipant(rtc.ParticipantParams{ Identity: pi.Identity, Name: pi.Name, @@ -336,7 +340,7 @@ func (r *RoomManager) StartSession( ReconnectOnSubscriptionError: reconnectOnSubscriptionError, VersionGenerator: r.versionGenerator, TrackResolver: room.ResolveMediaTrackForSubscriber, - SubscriberAllowPause: r.config.RTC.CongestionControl.AllowPause, + SubscriberAllowPause: subscriberAllowPause, }) if err != nil { return err diff --git a/pkg/service/rtcservice.go b/pkg/service/rtcservice.go index b28d480ac..d6f622239 100644 --- a/pkg/service/rtcservice.go +++ b/pkg/service/rtcservice.go @@ -103,6 +103,7 @@ func (s *RTCService) validate(r *http.Request) (livekit.RoomName, routing.Partic publishParam := r.FormValue("publish") adaptiveStreamParam := r.FormValue("adaptive_stream") participantID := r.FormValue("sid") + subscriberAllowPauseParam := r.FormValue("subscriber_allow_pause") if onlyName != "" { roomName = onlyName @@ -159,6 +160,10 @@ func (s *RTCService) validate(r *http.Request) (livekit.RoomName, routing.Partic if adaptiveStreamParam != "" { pi.AdaptiveStream = boolValue(adaptiveStreamParam) } + if subscriberAllowPauseParam != "" { + subscriberAllowPause := boolValue(subscriberAllowPauseParam) + pi.SubscriberAllowPause = &subscriberAllowPause + } return roomName, pi, http.StatusOK, nil }