Skip to content

Commit 7809b8a

Browse files
committed
Fix trailing space in rtcp-fb with no Parameter
Media construction would always do "%s %s" even if no Parameter was available. This commit fixes that by checking if Parameter is empty or not. Resolves #3207
1 parent 457679c commit 7809b8a

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

sdp.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -541,7 +541,7 @@ func addSenderSDP(
541541
}
542542
}
543543

544-
//nolint:cyclop
544+
//nolint:cyclop, gocognit
545545
func addTransceiverSDP(
546546
descr *sdp.SessionDescription,
547547
isPlanB bool,
@@ -575,7 +575,11 @@ func addTransceiverSDP(
575575
media.WithCodec(uint8(codec.PayloadType), name, codec.ClockRate, codec.Channels, codec.SDPFmtpLine)
576576

577577
for _, feedback := range codec.RTPCodecCapability.RTCPFeedback {
578-
media.WithValueAttribute("rtcp-fb", fmt.Sprintf("%d %s %s", codec.PayloadType, feedback.Type, feedback.Parameter))
578+
if feedback.Parameter == "" {
579+
media.WithValueAttribute("rtcp-fb", fmt.Sprintf("%d %s", codec.PayloadType, feedback.Type))
580+
} else {
581+
media.WithValueAttribute("rtcp-fb", fmt.Sprintf("%d %s %s", codec.PayloadType, feedback.Type, feedback.Parameter))
582+
}
579583
}
580584
}
581585
if len(codecs) == 0 {

sdp_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,6 +1057,42 @@ func TestPopulateSDP(t *testing.T) { //nolint:cyclop,maintidx
10571057
_, ok := offerSdp.Attribute(sdp.AttrKeyGroup)
10581058
assert.False(t, ok)
10591059
})
1060+
t.Run("rtcp-fb trailing space", func(t *testing.T) {
1061+
se := SettingEngine{}
1062+
1063+
me := &MediaEngine{}
1064+
assert.NoError(t, me.RegisterDefaultCodecs())
1065+
api := NewAPI(WithMediaEngine(me))
1066+
1067+
tr := &RTPTransceiver{kind: RTPCodecTypeVideo, api: api, codecs: me.videoCodecs}
1068+
mediaSections := []mediaSection{{id: "0", transceivers: []*RTPTransceiver{tr}}}
1069+
1070+
d := &sdp.SessionDescription{}
1071+
1072+
offerSdp, err := populateSDP(
1073+
d,
1074+
false,
1075+
[]DTLSFingerprint{},
1076+
se.sdpMediaLevelFingerprints,
1077+
se.candidates.ICELite,
1078+
true,
1079+
me,
1080+
connectionRoleFromDtlsRole(defaultDtlsRoleOffer),
1081+
[]ICECandidate{},
1082+
ICEParameters{},
1083+
mediaSections,
1084+
ICEGatheringStateComplete,
1085+
nil,
1086+
se.getSCTPMaxMessageSize(),
1087+
)
1088+
assert.Nil(t, err)
1089+
1090+
for _, desc := range offerSdp.MediaDescriptions {
1091+
for _, a := range desc.Attributes {
1092+
assert.False(t, strings.HasSuffix(a.String(), " "))
1093+
}
1094+
}
1095+
})
10601096
}
10611097

10621098
func TestGetRIDs(t *testing.T) {

0 commit comments

Comments
 (0)