From c69a8e926d47723a51a0230ab4b6b6541b7c46f0 Mon Sep 17 00:00:00 2001 From: cnderrauber Date: Mon, 13 Mar 2023 10:19:32 +0800 Subject: [PATCH] Send full muxing map --- go.mod | 2 +- go.sum | 2 -- pkg/sfu/audioselection/forwarder.go | 25 +++++++++++++++---------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index dcf72b28e..cd7997a4c 100644 --- a/go.mod +++ b/go.mod @@ -103,4 +103,4 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect ) -replace github.com/livekit/protocol => ../protocol \ No newline at end of file +replace github.com/livekit/protocol => ../protocol diff --git a/go.sum b/go.sum index 09d90a4fc..5706d00dd 100644 --- a/go.sum +++ b/go.sum @@ -232,8 +232,6 @@ 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-20230130133657-96cfb115473a h1:5UkGQpskXp7HcBmyrCwWtO7ygDWbqtjN09Yva4l/nyE= github.com/livekit/mediatransportutil v0.0.0-20230130133657-96cfb115473a/go.mod h1:1Dlx20JPoIKGP45eo+yuj0HjeE25zmyeX/EWHiPCjFw= -github.com/livekit/protocol v1.4.3-0.20230222030027-e946da680c7b h1:2toBhQKTJSqoizjUUOPapRX9prKpNcLxSuvhZ9NKeGI= -github.com/livekit/protocol v1.4.3-0.20230222030027-e946da680c7b/go.mod h1:mVzmVesPCIgk2gg/jMr6PWtHu8dfRdhaAJ6okFs5nQw= github.com/livekit/psrpc v0.2.7 h1:j8ns7+t/7LJxTH/jnD9Ds7qn3VkNOV/qCUbt2nbirfU= github.com/livekit/psrpc v0.2.7/go.mod h1:2wtOo1F03vub2qIjx0rAPpVplg873670/LN08o/yopM= github.com/livekit/rtcscore-go v0.0.0-20220815072451-20ee10ae1995 h1:vOaY2qvfLihDyeZtnGGN1Law9wRrw8BMGCr1TygTvMw= diff --git a/pkg/sfu/audioselection/forwarder.go b/pkg/sfu/audioselection/forwarder.go index d567e94cb..7fb864742 100644 --- a/pkg/sfu/audioselection/forwarder.go +++ b/pkg/sfu/audioselection/forwarder.go @@ -59,6 +59,7 @@ type SelectionForwarder struct { idleDowntracks []*sfu.DownTrack downtracks []*sfu.DownTrack close chan struct{} + sourceChanged bool onForwardMappingChanged func(muxInfo []*livekit.AudioTrackMuxInfo) } @@ -111,6 +112,7 @@ func (f *SelectionForwarder) AddSource(participantID livekit.ParticipantID, trac f.params.Logger.Debugw("adding source", "trackID", trackID) f.lock.Lock() f.sources = append(f.sources, &sourceInfo{participantID: participantID, trackID: trackID, receiver: source}) + f.sourceChanged = true f.lock.Unlock() } @@ -126,6 +128,7 @@ func (f *SelectionForwarder) RemoveSource(trackID livekit.TrackID) { break } } + f.sourceChanged = true f.lock.Unlock() } @@ -150,7 +153,7 @@ func (f *SelectionForwarder) process() { func (f *SelectionForwarder) updateForward() { f.lock.Lock() defer f.lock.Unlock() - if len(f.sources) == 0 { + if len(f.sources) == 0 && !f.sourceChanged { return } @@ -186,19 +189,21 @@ func (f *SelectionForwarder) updateForward() { } } - if forwardChanged && f.onForwardMappingChanged != nil { - muxInfo := make([]*livekit.AudioTrackMuxInfo, 0, len(f.sources)) + if (f.sourceChanged || forwardChanged) && f.onForwardMappingChanged != nil { + f.sourceChanged = false + muxInfos := make([]*livekit.AudioTrackMuxInfo, 0, len(f.sources)) for _, source := range f.sources { - if source.active && source.downtrack != nil { - muxInfo = append(muxInfo, &livekit.AudioTrackMuxInfo{ - SdpTrackId: source.downtrack.ID(), - ParticipantSid: string(source.participantID), - TrackSid: string(source.trackID), - }) + info := &livekit.AudioTrackMuxInfo{ + ParticipantSid: string(source.participantID), + TrackSid: string(source.trackID), } + if source.downtrack != nil { + info.SdpTrackId = source.downtrack.ID() + } + muxInfos = append(muxInfos, info) } - f.onForwardMappingChanged(muxInfo) + f.onForwardMappingChanged(muxInfos) } }