Skip to content

Commit 8233d7e

Browse files
Fix missing RTX codec using SetCodecPreferences
1 parent 98a0025 commit 8233d7e

File tree

3 files changed

+67
-1
lines changed

3 files changed

+67
-1
lines changed

rtpcodec.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ func codecParametersFuzzySearch(
143143
return RTPCodecParameters{}, codecMatchNone
144144
}
145145

146-
// Given a CodecParameters find the RTX CodecParameters if one exists.
146+
// Given a CodecParameters find the RTX Payload if one exists.
147147
func findRTXPayloadType(needle PayloadType, haystack []RTPCodecParameters) PayloadType {
148148
aptStr := fmt.Sprintf("apt=%d", needle)
149149
for _, c := range haystack {
@@ -155,6 +155,18 @@ func findRTXPayloadType(needle PayloadType, haystack []RTPCodecParameters) Paylo
155155
return PayloadType(0)
156156
}
157157

158+
// Given a CodecParameters find the RTX CodecParameters if one exists.
159+
func findRTXPCodec(needle PayloadType, haystack []RTPCodecParameters) *RTPCodecParameters {
160+
aptStr := fmt.Sprintf("apt=%d", needle)
161+
for _, c := range haystack {
162+
if aptStr == c.SDPFmtpLine {
163+
return &c
164+
}
165+
}
166+
167+
return nil
168+
}
169+
158170
func rtcpFeedbackIntersection(a, b []RTCPFeedback) (out []RTCPFeedback) {
159171
for _, aFeedback := range a {
160172
for _, bFeeback := range b {

rtptransceiver.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,10 @@ func (t *RTPTransceiver) getCodecs() []RTPCodecParameters {
8383
}
8484
codec.RTCPFeedback = rtcpFeedbackIntersection(codec.RTCPFeedback, c.RTCPFeedback)
8585
filteredCodecs = append(filteredCodecs, codec)
86+
87+
if rtxCodec := findRTXPCodec(c.PayloadType, mediaEngineCodecs); rtxCodec != nil {
88+
filteredCodecs = append(filteredCodecs, *rtxCodec)
89+
}
8690
}
8791
}
8892

rtptransceiver_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,53 @@ func Test_RTPTransceiver_SetCodecPreferences_PayloadType(t *testing.T) {
135135

136136
closePairNow(t, offerPC, answerPC)
137137
}
138+
139+
func Test_RTPTransciever_SDP_Codec(t *testing.T) {
140+
tests := []struct {
141+
Label string
142+
setPreferences bool
143+
}{
144+
{
145+
Label: "",
146+
setPreferences: false,
147+
},
148+
{
149+
Label: "",
150+
setPreferences: true,
151+
},
152+
}
153+
154+
for _, test := range tests {
155+
t.Run(test.Label, func(t *testing.T) {
156+
pc, err := NewPeerConnection(Configuration{})
157+
assert.NoError(t, err)
158+
159+
transceiver, err := pc.AddTransceiverFromKind(
160+
RTPCodecTypeVideo,
161+
RTPTransceiverInit{
162+
Direction: RTPTransceiverDirectionRecvonly,
163+
},
164+
)
165+
assert.NoError(t, err)
166+
167+
if test.setPreferences {
168+
codec := RTPCodecCapability{
169+
"video/vp8", 90000, 0, "", nil,
170+
}
171+
172+
assert.NoError(t, transceiver.SetCodecPreferences(
173+
[]RTPCodecParameters{
174+
{
175+
RTPCodecCapability: codec,
176+
},
177+
},
178+
))
179+
}
180+
181+
offer, err := pc.CreateOffer(nil)
182+
assert.NoError(t, err)
183+
184+
assert.Equal(t, true, strings.Contains(offer.SDP, "apt=96"))
185+
})
186+
}
187+
}

0 commit comments

Comments
 (0)