From 9781d30611333a810490734c57dcb520b7957361 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Tue, 28 May 2024 19:29:54 +0530 Subject: [PATCH] Do not propagate RTCP if report is not processed. (#2739) --- pkg/sfu/buffer/buffer.go | 5 +++-- pkg/sfu/buffer/rtpstats_base.go | 1 + pkg/sfu/buffer/rtpstats_receiver.go | 23 ++++++++++++----------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/pkg/sfu/buffer/buffer.go b/pkg/sfu/buffer/buffer.go index dd0916d82..2b82f3760 100644 --- a/pkg/sfu/buffer/buffer.go +++ b/pkg/sfu/buffer/buffer.go @@ -872,12 +872,13 @@ func (b *Buffer) SetSenderReportData(rtpTime uint32, ntpTime uint64) { At: time.Now(), } + didSet := false if b.rtpStats != nil { - b.rtpStats.SetRtcpSenderReportData(srData) + didSet = b.rtpStats.SetRtcpSenderReportData(srData) } b.RUnlock() - if b.onRtcpSenderReport != nil { + if didSet && b.onRtcpSenderReport != nil { b.onRtcpSenderReport() } } diff --git a/pkg/sfu/buffer/rtpstats_base.go b/pkg/sfu/buffer/rtpstats_base.go index 51b06c8d0..1fcef9a23 100644 --- a/pkg/sfu/buffer/rtpstats_base.go +++ b/pkg/sfu/buffer/rtpstats_base.go @@ -641,6 +641,7 @@ func (r *rtpStatsBase) MarshalLogObject(e zapcore.ObjectEncoder) error { } e.AddTime("startTime", r.startTime) + e.AddTime("endTime", r.endTime) e.AddTime("firstTime", r.firstTime) e.AddTime("highestTime", r.highestTime) diff --git a/pkg/sfu/buffer/rtpstats_receiver.go b/pkg/sfu/buffer/rtpstats_receiver.go index a82ba4b4a..d09b07cb7 100644 --- a/pkg/sfu/buffer/rtpstats_receiver.go +++ b/pkg/sfu/buffer/rtpstats_receiver.go @@ -111,10 +111,10 @@ type RTPStatsReceiver struct { propagationDelayDeltaHighStartTime time.Time propagationDelaySpike time.Duration - clockSkewCount int - outOfOrderSsenderReportCount int - largeJumpCount int - largeJumpNegativeCount int + clockSkewCount int + outOfOrderSenderReportCount int + largeJumpCount int + largeJumpNegativeCount int } func NewRTPStatsReceiver(params RTPStatsParams) *RTPStatsReceiver { @@ -300,12 +300,12 @@ func (r *RTPStatsReceiver) Update( return } -func (r *RTPStatsReceiver) SetRtcpSenderReportData(srData *RTCPSenderReportData) { +func (r *RTPStatsReceiver) SetRtcpSenderReportData(srData *RTCPSenderReportData) bool { r.lock.Lock() defer r.lock.Unlock() if srData == nil || !r.initialized { - return + return false } // prevent against extreme case of anachronous sender reports @@ -316,7 +316,7 @@ func (r *RTPStatsReceiver) SetRtcpSenderReportData(srData *RTCPSenderReportData) "last", r.srNewest, "current", srData, ) - return + return false } tsCycles := uint64(0) @@ -365,17 +365,17 @@ func (r *RTPStatsReceiver) SetRtcpSenderReportData(srData *RTCPSenderReportData) // i. e. muting replacing with null and unmute restoring the original track. // Or it could be due bad report generation. // In any case, ignore out-of-order reports. - if r.outOfOrderSsenderReportCount%10 == 0 { + if r.outOfOrderSenderReportCount%10 == 0 { r.logger.Infow( "received sender report, out-of-order, skipping", "first", r.srFirst, "last", r.srNewest, "current", &srDataCopy, - "count", r.outOfOrderSsenderReportCount, + "count", r.outOfOrderSenderReportCount, ) } - r.outOfOrderSsenderReportCount++ - return + r.outOfOrderSenderReportCount++ + return false } if r.srNewest != nil { @@ -494,6 +494,7 @@ func (r *RTPStatsReceiver) SetRtcpSenderReportData(srData *RTCPSenderReportData) r.srNewest = &srDataCopy r.maybeAdjustFirstPacketTime(r.srNewest, 0, r.timestamp.GetExtendedStart()) + return true } func (r *RTPStatsReceiver) GetRtcpSenderReportData() *RTCPSenderReportData {