@@ -127,26 +127,11 @@ func (c *Call) onDCPublish(sdp string) {
127127
128128func (c * Call ) onDCUnpublish (stop []event.SFUTrackDescription , sdp string ) {
129129 for _ , trackDesc := range stop {
130- trackLogger := c .logger .WithFields (logrus.Fields {
131- "track_id" : trackDesc .TrackID ,
132- "stream_id" : trackDesc .StreamID ,
133- })
134-
135- trackLogger .Info ("unpublishing track" )
136-
137- newPublishers := []* Publisher {}
138-
139- c .mutex .Lock ()
140130 for _ , publisher := range c .Publishers {
141131 if publisher .Matches (trackDesc ) {
142132 publisher .Stop ()
143- } else {
144- newPublishers = append (newPublishers , publisher )
145133 }
146134 }
147-
148- c .Publishers = newPublishers
149- c .mutex .Unlock ()
150135 }
151136
152137 err := c .PeerConnection .SetRemoteDescription (webrtc.SessionDescription {
@@ -300,11 +285,7 @@ func (c *Call) iceCandidateHandler(candidate *webrtc.ICECandidate) {
300285}
301286
302287func (c * Call ) trackHandler (trackRemote * webrtc.TrackRemote ) {
303- publisher := NewPublisher (trackRemote , c )
304-
305- c .mutex .Lock ()
306- c .Publishers = append (c .Publishers , publisher )
307- c .mutex .Unlock ()
288+ NewPublisher (trackRemote , c )
308289
309290 go c .conf .SendUpdatedMetadataFromCall (c .CallID )
310291}
@@ -545,16 +526,40 @@ func (c *Call) CheckKeepAliveTimestamp() {
545526 }
546527}
547528
548- func (c * Call ) RemoveSubscriber (toDelete * Subscriber ) {
529+ func (c * Call ) RemoveSubscriber (toDelete * Subscriber ) bool {
530+ removed := false
549531 newSubscribers := []* Subscriber {}
550532
551533 c .mutex .Lock ()
552534 for _ , subscriber := range c .Subscribers {
553535 if subscriber != toDelete {
536+ removed = true
537+ } else {
554538 newSubscribers = append (newSubscribers , subscriber )
555539 }
556540 }
557541
558542 c .Subscribers = newSubscribers
559543 c .mutex .Unlock ()
544+
545+ return removed
546+ }
547+
548+ func (c * Call ) RemovePublisher (toDelete * Publisher ) bool {
549+ removed := false
550+ newPublishers := []* Publisher {}
551+
552+ c .mutex .Lock ()
553+ for _ , publisher := range c .Publishers {
554+ if publisher == toDelete {
555+ removed = true
556+ } else {
557+ newPublishers = append (newPublishers , publisher )
558+ }
559+ }
560+
561+ c .Publishers = newPublishers
562+ c .mutex .Unlock ()
563+
564+ return removed
560565}
0 commit comments