diff --git a/pkg/rtc/transportmanager.go b/pkg/rtc/transportmanager.go index 2aac96fe2..ad31468d9 100644 --- a/pkg/rtc/transportmanager.go +++ b/pkg/rtc/transportmanager.go @@ -538,7 +538,7 @@ func (t *TransportManager) createDataChannelsForSubscriber(pendingDataChannels [ } func (t *TransportManager) GetUnmatchMediaForOffer(parsedOffer *sdp.SessionDescription, mediaType string) (unmatched []*sdp.MediaDescription, err error) { - var lastMatchedMid string + matchedMids := make(map[string]struct{}) if lastAnswer := t.publisher.CurrentLocalDescription(); lastAnswer != nil { parsedAnswer, err1 := lastAnswer.Unmarshal() if err1 != nil { @@ -547,22 +547,20 @@ func (t *TransportManager) GetUnmatchMediaForOffer(parsedOffer *sdp.SessionDescr return unmatched, err1 } - for i := len(parsedAnswer.MediaDescriptions) - 1; i >= 0; i-- { - media := parsedAnswer.MediaDescriptions[i] - if media.MediaName.Media == mediaType { - lastMatchedMid, _ = media.Attribute(sdp.AttrKeyMID) - break + for _, media := range parsedAnswer.MediaDescriptions { + if mid, ok := media.Attribute(sdp.AttrKeyMID); ok { + matchedMids[mid] = struct{}{} } } } for i := len(parsedOffer.MediaDescriptions) - 1; i >= 0; i-- { media := parsedOffer.MediaDescriptions[i] - if media.MediaName.Media == mediaType { - mid, _ := media.Attribute(sdp.AttrKeyMID) - if mid == lastMatchedMid { - break - } + if media.MediaName.Media != mediaType { + continue + } + mid, _ := media.Attribute(sdp.AttrKeyMID) + if _, ok := matchedMids[mid]; !ok { unmatched = append(unmatched, media) } } diff --git a/pkg/rtc/types/protocol_version.go b/pkg/rtc/types/protocol_version.go index 9b8d05be1..f85b65f21 100644 --- a/pkg/rtc/types/protocol_version.go +++ b/pkg/rtc/types/protocol_version.go @@ -16,7 +16,7 @@ package types type ProtocolVersion int -const CurrentProtocol = 18 +const CurrentProtocol = 19 func (v ProtocolVersion) SupportsPackedStreamId() bool { return v > 0