@@ -489,15 +489,7 @@ func (d *DownTrack) Bind(t webrtc.TrackLocalContext) (webrtc.RTPCodecParameters,
489489 }
490490
491491 // Bind is called under RTPSender.mu lock, call the RTPSender.GetParameters in goroutine to avoid deadlock
492- go func () {
493- if tr := d .transceiver .Load (); tr != nil {
494- if sender := tr .Sender (); sender != nil {
495- extensions := sender .GetParameters ().HeaderExtensions
496- d .params .Logger .Debugw ("negotiated downtrack extensions" , "extensions" , extensions )
497- d .SetRTPHeaderExtensions (extensions )
498- }
499- }
500- }()
492+ go d .setRTPHeaderExtensions ()
501493
502494 doBind := func () {
503495 d .bindLock .Lock ()
@@ -714,12 +706,9 @@ func (d *DownTrack) SetStreamAllocatorListener(listener DownTrackStreamAllocator
714706 d .streamAllocatorListener = listener
715707 d .streamAllocatorLock .Unlock ()
716708
717- if listener != nil {
718- if ! listener .IsBWEEnabled (d ) {
719- d .absSendTimeExtID = 0
720- d .transportWideExtID = 0
721- }
709+ d .setRTPHeaderExtensions ()
722710
711+ if listener != nil {
723712 // kick off a gratuitous allocation
724713 listener .OnSubscriptionChanged (d )
725714 }
@@ -795,14 +784,27 @@ func (d *DownTrack) SetReceiver(r TrackReceiver) {
795784}
796785
797786// Sets RTP header extensions for this track
798- func (d * DownTrack ) SetRTPHeaderExtensions (rtpHeaderExtensions []webrtc.RTPHeaderExtensionParameter ) {
799- isBWEEnabled := true
800- bweType := bwe .BWETypeNone
801- if sal := d .getStreamAllocatorListener (); sal != nil {
802- isBWEEnabled = sal .IsBWEEnabled (d )
803- bweType = sal .BWEType ()
787+ func (d * DownTrack ) setRTPHeaderExtensions () {
788+ d .bindLock .Lock ()
789+ defer d .bindLock .Unlock ()
790+
791+ sal := d .getStreamAllocatorListener ()
792+ if sal == nil {
793+ return
794+ }
795+
796+ var extensions []webrtc.RTPHeaderExtensionParameter
797+ if tr := d .transceiver .Load (); tr != nil {
798+ if sender := tr .Sender (); sender != nil {
799+ extensions = sender .GetParameters ().HeaderExtensions
800+ d .params .Logger .Debugw ("negotiated downtrack extensions" , "extensions" , extensions )
801+ }
804802 }
805- for _ , ext := range rtpHeaderExtensions {
803+
804+ isBWEEnabled := sal .IsBWEEnabled (d )
805+ bweType := sal .BWEType ()
806+
807+ for _ , ext := range extensions {
806808 switch ext .URI {
807809 case sdp .ABSSendTimeURI :
808810 if isBWEEnabled && bweType == bwe .BWETypeRemote {
0 commit comments