From 05dfd30d5b2d1b0954e0e154180c1393ca8d747c Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Mon, 3 Mar 2025 18:48:37 +0530 Subject: [PATCH] Take RTT and jitter from receiver view while reporting track stats for (#3483) * Take RTT and jitter from receiver view while reporting track stats for down stream tracks. * adjust jitter in aggregate --- pkg/sfu/connectionquality/connectionstats.go | 18 ++++++++++++++++-- pkg/sfu/rtpstats/rtpstats_sender.go | 7 +------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/pkg/sfu/connectionquality/connectionstats.go b/pkg/sfu/connectionquality/connectionstats.go index 8015abe1d..8145c43c6 100644 --- a/pkg/sfu/connectionquality/connectionstats.go +++ b/pkg/sfu/connectionquality/connectionstats.go @@ -429,6 +429,13 @@ func toAggregateDeltaInfo(streams map[uint32]*buffer.StreamStatsWithLayers, useR for _, s := range streams { if useRemoteView { if s.RTPStatsRemoteView != nil { + // discount jitter from publisher side + internal processing while reporting downstream jitter + if s.RTPStats != nil { + s.RTPStatsRemoteView.JitterMax -= s.RTPStats.JitterMax + if s.RTPStatsRemoteView.JitterMax < 0.0 { + s.RTPStatsRemoteView.JitterMax = 0.0 + } + } deltaInfoList = append(deltaInfoList, s.RTPStatsRemoteView) } } else { @@ -450,7 +457,10 @@ func toAnalyticsStream( } // discount the feed side loss when reporting forwarded track stats, + // discount jitter from publisher side + internal processing while reporting downstream jitter packetsLost := deltaStats.PacketsLost + rtt := uint32(0) + maxJitter := float64(0.0) if deltaStatsRemoteView != nil { packetsLost = deltaStatsRemoteView.PacketsLost if deltaStatsRemoteView.PacketsMissing > packetsLost { @@ -458,7 +468,11 @@ func toAnalyticsStream( } else { packetsLost -= deltaStatsRemoteView.PacketsMissing } + + rtt = deltaStatsRemoteView.RttMax + maxJitter = deltaStatsRemoteView.JitterMax } + return &livekit.AnalyticsStream{ StartTime: timestamppb.New(deltaStats.StartTime), EndTime: timestamppb.New(deltaStats.EndTime), @@ -472,8 +486,8 @@ func toAnalyticsStream( PacketsLost: packetsLost, PacketsOutOfOrder: deltaStats.PacketsOutOfOrder, Frames: deltaStats.Frames, - Rtt: deltaStats.RttMax, - Jitter: uint32(deltaStats.JitterMax), + Rtt: rtt, + Jitter: uint32(maxJitter), Nacks: deltaStats.Nacks, Plis: deltaStats.Plis, Firs: deltaStats.Firs, diff --git a/pkg/sfu/rtpstats/rtpstats_sender.go b/pkg/sfu/rtpstats/rtpstats_sender.go index cb5d8b708..a361231c8 100644 --- a/pkg/sfu/rtpstats/rtpstats_sender.go +++ b/pkg/sfu/rtpstats/rtpstats_sender.go @@ -1048,12 +1048,7 @@ func (r *RTPStatsSender) DeltaInfoSender(senderSnapshotID uint32) (*RTPDeltaInfo packetsLost = packetsExpected } - // discount jitter from publisher side + internal processing - maxJitter := thenReceiverView.maxJitter - thenReceiverView.maxJitterFeed - if maxJitter < 0.0 { - maxJitter = 0.0 - } - maxJitterTime := maxJitter / float64(r.params.ClockRate) * 1e6 + maxJitterTime := thenReceiverView.maxJitter / float64(r.params.ClockRate) * 1e6 deltaStatsReceiverView = &RTPDeltaInfo{ StartTime: time.Unix(0, startTime),