@@ -89,6 +89,7 @@ type baseTrack struct {
89
89
kind MediaDeviceType
90
90
selector * CodecSelector
91
91
activePeerConnections map [string ]chan <- chan <- struct {}
92
+ encoderController codec.EncoderController
92
93
}
93
94
94
95
func newBaseTrack (source Source , kind MediaDeviceType , selector * CodecSelector ) * baseTrack {
@@ -230,7 +231,8 @@ func (track *baseTrack) bind(ctx webrtc.TrackLocalContext, specializedTrack Trac
230
231
}
231
232
}()
232
233
233
- keyFrameController , ok := encodedReader .Controller ().(codec.KeyFrameController )
234
+ track .encoderController = encodedReader .Controller ()
235
+ keyFrameController , ok := track .encoderController .(codec.KeyFrameController )
234
236
if ok {
235
237
go track .rtcpReadLoop (ctx .RTCPReader (), keyFrameController , stopRead )
236
238
}
@@ -449,6 +451,11 @@ func (track *VideoTrack) NewRTPReader(codecName string, ssrc uint32, mtu int) (R
449
451
}, nil
450
452
}
451
453
454
+ // returned encoderController might be nil
455
+ func (track * VideoTrack ) EncoderController () codec.EncoderController {
456
+ return track .encoderController
457
+ }
458
+
452
459
// AudioTrack is a specific track type that contains audio source which allows multiple readers to access, and
453
460
// manipulate.
454
461
type AudioTrack struct {
@@ -570,3 +577,7 @@ func (track *AudioTrack) NewRTPReader(codecName string, ssrc uint32, mtu int) (R
570
577
controllerFn : encodedReader .Controller ,
571
578
}, nil
572
579
}
580
+
581
+ func (track * AudioTrack ) EncoderController () codec.EncoderController {
582
+ return track .encoderController
583
+ }
0 commit comments