diff --git a/pkg/rtc/mediatrackreceiver.go b/pkg/rtc/mediatrackreceiver.go index e6a96b0a2..d49208e28 100644 --- a/pkg/rtc/mediatrackreceiver.go +++ b/pkg/rtc/mediatrackreceiver.go @@ -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 } diff --git a/pkg/rtc/wrappedreceiver.go b/pkg/rtc/wrappedreceiver.go index 3ea4f6c59..fe0597d74 100644 --- a/pkg/rtc/wrappedreceiver.go +++ b/pkg/rtc/wrappedreceiver.go @@ -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 {