diff --git a/pkg/rtc/types/trafficstats.go b/pkg/rtc/types/trafficstats.go index 06e43786a..f5c0b386d 100644 --- a/pkg/rtc/types/trafficstats.go +++ b/pkg/rtc/types/trafficstats.go @@ -50,7 +50,7 @@ func RTPStatsDiffToTrafficStats(before, after *livekit.RTPStats) *TrafficStats { startTime = before.EndTime } - if before == nil { + getAfter := func() *TrafficStats { return &TrafficStats{ StartTime: startTime.AsTime(), EndTime: after.EndTime.AsTime(), @@ -62,6 +62,19 @@ func RTPStatsDiffToTrafficStats(before, after *livekit.RTPStats) *TrafficStats { } } + if before == nil { + return getAfter() + } + + if (after.Packets - before.Packets) > (1 << 31) { + // after packets < before packets, probably got reset, just return after + return getAfter() + } + if ((after.Bytes + after.BytesDuplicate + after.BytesPadding) - (before.Bytes + before.BytesDuplicate + before.BytesPadding)) > (1 << 63) { + // after bytes < before bytes, probably got reset, just return after + return getAfter() + } + packetsLost := uint32(0) if after.PacketsLost >= before.PacketsLost { packetsLost = after.PacketsLost - before.PacketsLost