diff --git a/peerconnection.go b/peerconnection.go index 8eb0cb8eae5..b8d87d50233 100644 --- a/peerconnection.go +++ b/peerconnection.go @@ -1197,7 +1197,7 @@ func (pc *PeerConnection) AddTrack(track *Track) (*RTPSender, error) { var transceiver *RTPTransceiver for _, t := range pc.GetTransceivers() { - if !t.stopped && t.kind == track.Kind() && t.Sender() == nil { + if !t.stopped && t.kind == track.Kind() && t.Sender() == nil && t.usedToSend.Load() != true { transceiver = t break } diff --git a/rtptransceiver.go b/rtptransceiver.go index af094bf6992..5b89a792148 100644 --- a/rtptransceiver.go +++ b/rtptransceiver.go @@ -14,6 +14,8 @@ type RTPTransceiver struct { receiver atomic.Value // *RTPReceiver direction atomic.Value // RTPTransceiverDirection + usedToSend atomic.Value // track if direction has never had a value of "sendrecv" or "sendonly" + stopped bool kind RTPCodecType } @@ -89,6 +91,9 @@ func (t *RTPTransceiver) setReceiver(r *RTPReceiver) { } func (t *RTPTransceiver) setDirection(d RTPTransceiverDirection) { + if d == RTPTransceiverDirectionSendrecv || d == RTPTransceiverDirectionSendonly { + t.usedToSend.Store(true) + } t.direction.Store(d) }