Skip to content

Commit e68ce42

Browse files
committed
Add TestConfigureFlexFEC03_FECParameters
1 parent 08d015e commit e68ce42

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

interceptor_test.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ package webrtc
99
//
1010
import (
1111
"context"
12+
"fmt"
1213
"io"
1314
"sync/atomic"
1415
"testing"
@@ -237,6 +238,68 @@ func Test_InterceptorRegistry_Build(t *testing.T) {
237238
closePairNow(t, peerConnectionA, peerConnectionB)
238239
}
239240

241+
// TestConfigureFlexFEC03_FECParameters tests only that FEC parameters are correctly set and that SDP contains FEC info.
242+
// FEC between 2 Pion clients is not currently supported and cannot be negotiated due to the blocking issue:
243+
// https://github.com/pion/webrtc/issues/3109
244+
func TestConfigureFlexFEC03_FECParameters(t *testing.T) {
245+
to := test.TimeOut(time.Second * 20)
246+
defer to.Stop()
247+
248+
report := test.CheckRoutines(t)
249+
defer report()
250+
251+
mediaEngine := &MediaEngine{}
252+
253+
assert.NoError(t, mediaEngine.RegisterCodec(RTPCodecParameters{
254+
RTPCodecCapability: RTPCodecCapability{MimeType: MimeTypeVP8, ClockRate: 90000},
255+
PayloadType: 96,
256+
}, RTPCodecTypeVideo))
257+
258+
interceptorRegistry := &interceptor.Registry{}
259+
260+
fecPayloadType := PayloadType(120)
261+
assert.NoError(t, ConfigureFlexFEC03(fecPayloadType, mediaEngine, interceptorRegistry))
262+
263+
assert.NoError(t, RegisterDefaultInterceptors(mediaEngine, interceptorRegistry))
264+
265+
api := NewAPI(WithMediaEngine(mediaEngine), WithInterceptorRegistry(interceptorRegistry))
266+
267+
pc, err := api.NewPeerConnection(Configuration{})
268+
assert.NoError(t, err)
269+
defer func() { assert.NoError(t, pc.Close()) }()
270+
271+
track, err := NewTrackLocalStaticSample(RTPCodecCapability{MimeType: MimeTypeVP8}, "video", "pion")
272+
assert.NoError(t, err)
273+
274+
sender, err := pc.AddTrack(track)
275+
assert.NoError(t, err)
276+
277+
offer, err := pc.CreateOffer(nil)
278+
assert.NoError(t, err)
279+
280+
assert.Contains(t, offer.SDP, "a=rtpmap:120 flexfec-03/90000")
281+
282+
assert.NoError(t, pc.SetLocalDescription(offer))
283+
284+
params := sender.GetParameters()
285+
assert.NotZero(t, params.Encodings[0].FEC.SSRC, "FEC SSRC should be non-zero")
286+
287+
expectedFECGroup := fmt.Sprintf("FEC-FR %d %d", params.Encodings[0].SSRC, params.Encodings[0].FEC.SSRC)
288+
assert.Contains(t, offer.SDP, expectedFECGroup, "SDP should contain FEC-FR ssrc-group")
289+
290+
var fecCodecFound bool
291+
for _, codec := range params.Codecs {
292+
if codec.MimeType == MimeTypeFlexFEC03 && codec.PayloadType == fecPayloadType {
293+
fecCodecFound = true
294+
assert.Equal(t, uint32(90000), codec.ClockRate)
295+
assert.Equal(t, "repair-window=10000000", codec.SDPFmtpLine)
296+
297+
break
298+
}
299+
}
300+
assert.True(t, fecCodecFound, "FlexFEC-03 codec should be registered")
301+
}
302+
240303
func Test_Interceptor_ZeroSSRC(t *testing.T) {
241304
to := test.TimeOut(time.Second * 20)
242305
defer to.Stop()

0 commit comments

Comments
 (0)