From 28310b670f39340efd18a086697bbdda9601cd66 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Wed, 18 Dec 2024 00:18:13 +0530 Subject: [PATCH] Update RTC config with congestion control config (#3262) --- pkg/rtc/config.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/pkg/rtc/config.go b/pkg/rtc/config.go index 13c3e6db1..8e2820195 100644 --- a/pkg/rtc/config.go +++ b/pkg/rtc/config.go @@ -15,6 +15,8 @@ package rtc import ( + "slices" + "github.com/pion/sdp/v3" "github.com/pion/webrtc/v4" @@ -117,7 +119,7 @@ func NewWebRTCConfig(conf *config.Config) (*WebRTCConfig, error) { // subscriber configuration subscriberConfig := DirectionConfig{ - StrictACKs: conf.RTC.StrictACKs, + StrictACKs: rtcConf.StrictACKs, RTPHeaderExtension: RTPHeaderExtensionConfig{ Video: []string{ dd.ExtensionURI, @@ -154,6 +156,23 @@ func NewWebRTCConfig(conf *config.Config) (*WebRTCConfig, error) { }, nil } +func (c *WebRTCConfig) UpdateCongestionControl(conf config.CongestionControlConfig) { + c.Subscriber.RTPHeaderExtension.Video = slices.DeleteFunc(c.Subscriber.RTPHeaderExtension.Video, func(ext string) bool { + return ext == sdp.TransportCCURI || ext == sdp.ABSSendTimeURI + }) + c.Subscriber.RTCPFeedback.Video = slices.DeleteFunc(c.Subscriber.RTCPFeedback.Video, func(fb webrtc.RTCPFeedback) bool { + return fb.Type == webrtc.TypeRTCPFBTransportCC || fb.Type == webrtc.TypeRTCPFBGoogREMB + }) + + if conf.UseSendSideBWEInterceptor || conf.UseSendSideBWE { + c.Subscriber.RTPHeaderExtension.Video = append(c.Subscriber.RTPHeaderExtension.Video, sdp.TransportCCURI) + c.Subscriber.RTCPFeedback.Video = append(c.Subscriber.RTCPFeedback.Video, webrtc.RTCPFeedback{Type: webrtc.TypeRTCPFBTransportCC}) + } else { + c.Subscriber.RTPHeaderExtension.Video = append(c.Subscriber.RTPHeaderExtension.Video, sdp.ABSSendTimeURI) + c.Subscriber.RTCPFeedback.Video = append(c.Subscriber.RTCPFeedback.Video, webrtc.RTCPFeedback{Type: webrtc.TypeRTCPFBGoogREMB}) + } +} + func (c *WebRTCConfig) SetBufferFactory(factory *buffer.Factory) { c.BufferFactory = factory c.SettingEngine.BufferFactory = factory.GetOrNew