mirror of
https://github.com/livekit/livekit.git
synced 2026-08-27 22:34:25 +00:00
Fix simulcast codec block track close (#1082)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user