From a04e7ce647daf9258f1a320bf24cd99092ae3de5 Mon Sep 17 00:00:00 2001 From: cnderrauber Date: Wed, 8 Feb 2023 17:02:19 +0800 Subject: [PATCH] Fix panic by CreateSenderReport before bind completed (#1397) --- pkg/rtc/mediatrackreceiver.go | 4 ++-- pkg/rtc/mediatracksubscriptions.go | 2 +- pkg/sfu/downtrack.go | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkg/rtc/mediatrackreceiver.go b/pkg/rtc/mediatrackreceiver.go index 5eb0a5a66..625f1805d 100644 --- a/pkg/rtc/mediatrackreceiver.go +++ b/pkg/rtc/mediatrackreceiver.go @@ -441,7 +441,7 @@ func (t *MediaTrackReceiver) AddSubscriber(sub types.LocalParticipant) (types.Su } tLogger := LoggerWithTrack(sub.GetLogger(), t.ID(), t.params.IsRelayed) - wrParams := NewWrappedReceiver(WrappedReceiverParams{ + wr := NewWrappedReceiver(WrappedReceiverParams{ Receivers: receivers, TrackID: t.ID(), StreamId: streamId, @@ -449,7 +449,7 @@ func (t *MediaTrackReceiver) AddSubscriber(sub types.LocalParticipant) (types.Su Logger: tLogger, DisableRed: t.trackInfo.GetDisableRed(), }) - return t.MediaTrackSubscriptions.AddSubscriber(sub, wrParams) + return t.MediaTrackSubscriptions.AddSubscriber(sub, wr) } // RemoveSubscriber removes participant from subscription diff --git a/pkg/rtc/mediatracksubscriptions.go b/pkg/rtc/mediatracksubscriptions.go index 1b7ebc259..334b0b4ad 100644 --- a/pkg/rtc/mediatracksubscriptions.go +++ b/pkg/rtc/mediatracksubscriptions.go @@ -127,7 +127,7 @@ func (t *MediaTrackSubscriptions) AddSubscriber(sub types.LocalParticipant, wr * // Bind callback can happen from replaceTrack, so set it up early var reusingTransceiver atomic.Bool var dtState sfu.DownTrackState - downTrack.OnBind(func() { + downTrack.OnBinding(func() { wr.DetermineReceiver(downTrack.Codec()) if reusingTransceiver.Load() { downTrack.SeedState(dtState) diff --git a/pkg/sfu/downtrack.go b/pkg/sfu/downtrack.go index 7ee0ab7d2..11c68acea 100644 --- a/pkg/sfu/downtrack.go +++ b/pkg/sfu/downtrack.go @@ -158,7 +158,7 @@ type DownTrack struct { writeStream webrtc.TrackLocalWriter rtcpReader *buffer.RTCPReader onCloseHandler func(willBeResumed bool) - onBind func() + onBinding func() receiverReportListeners []ReceiverReportListener listenerLock sync.RWMutex isClosed atomic.Bool @@ -331,12 +331,12 @@ func (d *DownTrack) Bind(t webrtc.TrackLocalContext) (webrtc.RTPCodecParameters, d.sequencer = newSequencer(d.maxTrack, maxPadding, d.logger) } - d.bound.Store(true) d.codec = codec.RTPCodecCapability d.forwarder.DetermineCodec(d.codec) - if d.onBind != nil { - d.onBind() + if d.onBinding != nil { + d.onBinding() } + d.bound.Store(true) d.bindLock.Unlock() d.logger.Debugw("downtrack bound") @@ -875,8 +875,8 @@ func (d *DownTrack) OnCloseHandler(fn func(willBeResumed bool)) { d.onCloseHandler = fn } -func (d *DownTrack) OnBind(fn func()) { - d.onBind = fn +func (d *DownTrack) OnBinding(fn func()) { + d.onBinding = fn } func (d *DownTrack) OnREMB(fn func(dt *DownTrack, remb *rtcp.ReceiverEstimatedMaximumBitrate)) {