Fix simulcast codec block track close (#1082)

This commit is contained in:
cnderrauber
2022-10-13 12:46:43 +08:00
committed by GitHub
parent 573850261a
commit 192d9295f5
2 changed files with 18 additions and 5 deletions
+7 -4
View File
@@ -304,9 +304,11 @@ func (t *MediaTrackReceiver) TryClose() bool {
return true
}
if len(t.receiversShadow) > 0 {
t.lock.RUnlock()
return false
for _, receiver := range t.receiversShadow {
if dr, _ := receiver.TrackReceiver.(*DummyReceiver); dr != nil && dr.Receiver() != nil {
t.lock.RUnlock()
return false
}
}
t.lock.RUnlock()
t.Close()
@@ -482,7 +484,8 @@ func (t *MediaTrackReceiver) addSubscriber(sub types.LocalParticipant) (err erro
streamId = PackStreamID(t.PublisherID(), t.ID())
}
err = t.MediaTrackSubscriptions.AddSubscriber(sub, NewWrappedReceiver(receivers, t.ID(), streamId, potentialCodecs))
tLogger := LoggerWithTrack(sub.GetLogger(), t.ID(), t.params.IsRelayed)
err = t.MediaTrackSubscriptions.AddSubscriber(sub, NewWrappedReceiver(receivers, t.ID(), streamId, potentialCodecs, tLogger))
if err != nil {
return
}
+11 -1
View File
@@ -9,6 +9,7 @@ import (
"go.uber.org/atomic"
"github.com/livekit/protocol/livekit"
"github.com/livekit/protocol/logger"
"github.com/livekit/livekit-server/pkg/sfu"
)
@@ -22,9 +23,11 @@ type WrappedReceiver struct {
streamId string
codecs []webrtc.RTPCodecParameters
determinedCodec webrtc.RTPCodecCapability
logger logger.Logger
}
func NewWrappedReceiver(receivers []*simulcastReceiver, trackID livekit.TrackID, streamId string, upstreamCodecs []webrtc.RTPCodecParameters) *WrappedReceiver {
func NewWrappedReceiver(receivers []*simulcastReceiver, trackID livekit.TrackID, streamId string, upstreamCodecs []webrtc.RTPCodecParameters, logger logger.Logger) *WrappedReceiver {
sfuReceivers := make([]sfu.TrackReceiver, 0, len(receivers))
for _, r := range receivers {
sfuReceivers = append(sfuReceivers, r.TrackReceiver)
@@ -44,6 +47,7 @@ func NewWrappedReceiver(receivers []*simulcastReceiver, trackID livekit.TrackID,
trackID: trackID,
streamId: streamId,
codecs: codecs,
logger: logger,
}
}
@@ -67,6 +71,12 @@ func (r *WrappedReceiver) DetermineReceiver(codec webrtc.RTPCodecCapability) {
break
}
}
if r.TrackReceiver == nil {
r.logger.Errorw("can't determine receiver for codec", nil, "codec", codec.MimeType)
if len(r.receivers) > 0 {
r.TrackReceiver = r.receivers[0]
}
}
}
func (r *WrappedReceiver) Codecs() []webrtc.RTPCodecParameters {