Skip to content

Commit 2553783

Browse files
committed
Fix nil rtcpInterceptor on track.Bind
Create rtcpInterceptor before bind called.
1 parent f8294e0 commit 2553783

File tree

2 files changed

+43
-7
lines changed

2 files changed

+43
-7
lines changed

rtpsender.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,12 @@ func (r *RTPSender) Send(parameters RTPSendParameters) error {
311311
trackEncoding.ssrc = parameters.Encodings[idx].SSRC
312312
trackEncoding.ssrcRTX = parameters.Encodings[idx].RTX.SSRC
313313
trackEncoding.ssrcFEC = parameters.Encodings[idx].FEC.SSRC
314+
trackEncoding.rtcpInterceptor = r.api.interceptor.BindRTCPReader(
315+
interceptor.RTCPReaderFunc(func(in []byte, a interceptor.Attributes) (n int, attributes interceptor.Attributes, err error) {
316+
n, err = trackEncoding.srtpStream.Read(in)
317+
return n, a, err
318+
}),
319+
)
314320
trackEncoding.context = &baseTrackLocalContext{
315321
id: r.id,
316322
params: rtpParameters,
@@ -339,13 +345,6 @@ func (r *RTPSender) Send(parameters RTPSendParameters) error {
339345
parameters.HeaderExtensions,
340346
)
341347

342-
trackEncoding.rtcpInterceptor = r.api.interceptor.BindRTCPReader(
343-
interceptor.RTCPReaderFunc(func(in []byte, a interceptor.Attributes) (n int, attributes interceptor.Attributes, err error) {
344-
n, err = trackEncoding.srtpStream.Read(in)
345-
return n, a, err
346-
}),
347-
)
348-
349348
rtpInterceptor := r.api.interceptor.BindLocalStream(
350349
&trackEncoding.streamInfo,
351350
interceptor.RTPWriterFunc(func(header *rtp.Header, payload []byte, _ interceptor.Attributes) (int, error) {

rtpsender_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,3 +484,40 @@ func Test_RTPSender_RTX_Support(t *testing.T) {
484484
assert.NoError(t, peerConnection.Close())
485485
})
486486
}
487+
488+
func Test_RTPSender_RTCPReader_Bind_Not_Nil(t *testing.T) {
489+
track, err := NewTrackLocalStaticSample(RTPCodecCapability{MimeType: MimeTypeVP8}, "video", "pion")
490+
assert.NoError(t, err)
491+
492+
peerConnection, err := NewPeerConnection(Configuration{})
493+
assert.NoError(t, err)
494+
495+
bindCalled := make(chan struct{})
496+
rtpSender, err := peerConnection.AddTrack(&TrackLocalCheckRTCPReaderOnBind{
497+
t: t,
498+
TrackLocalStaticSample: track,
499+
bindCalled: bindCalled,
500+
})
501+
assert.NoError(t, err)
502+
503+
parameter := rtpSender.GetParameters()
504+
err = rtpSender.Send(parameter)
505+
<-rtpSender.sendCalled
506+
<-bindCalled
507+
assert.NoError(t, err)
508+
509+
assert.NoError(t, peerConnection.Close())
510+
}
511+
512+
type TrackLocalCheckRTCPReaderOnBind struct {
513+
*TrackLocalStaticSample
514+
t *testing.T
515+
bindCalled chan struct{}
516+
}
517+
518+
func (s *TrackLocalCheckRTCPReaderOnBind) Bind(ctx TrackLocalContext) (RTPCodecParameters, error) {
519+
assert.NotNil(s.t, ctx.RTCPReader())
520+
p, err := s.TrackLocalStaticSample.Bind(ctx)
521+
close(s.bindCalled)
522+
return p, err
523+
}

0 commit comments

Comments
 (0)