Do not skip due to large RR interval. (#3398)

* Do not skip due to large RR interval.

With sequence number adjustment, it will report some packets missing
which is fine.

* do not seed if already initialized
This commit is contained in:
Raja Subramanian
2025-02-04 11:08:38 +05:30
committed by GitHub
parent f45e3613ac
commit 7ff4082e4a
3 changed files with 9 additions and 35 deletions
-4
View File
@@ -240,10 +240,6 @@ func newRTPStatsBase(params RTPStatsParams) *rtpStatsBase {
}
func (r *rtpStatsBase) seed(from *rtpStatsBase) bool {
if from == nil || !from.initialized {
return false
}
if !r.rtpStatsBaseLite.seed(from.rtpStatsBaseLite) {
return false
}
+1 -1
View File
@@ -141,7 +141,7 @@ func newRTPStatsBaseLite(params RTPStatsParams) *rtpStatsBaseLite {
}
func (r *rtpStatsBaseLite) seed(from *rtpStatsBaseLite) bool {
if from == nil || !from.initialized {
if from == nil || !from.initialized || r.initialized {
return false
}
+8 -30
View File
@@ -100,18 +100,11 @@ func (is *intervalStats) MarshalLogObject(e zapcore.ObjectEncoder) error {
type wrappedReceptionReportsLogger struct {
*senderSnapshot
useSkipped bool
}
func (w wrappedReceptionReportsLogger) MarshalLogObject(e zapcore.ObjectEncoder) error {
if w.useSkipped {
for i, rr := range w.senderSnapshot.skippedReceptionReports {
e.AddReflected(fmt.Sprintf("%d", i), rr)
}
} else {
for i, rr := range w.senderSnapshot.processedReceptionReports {
e.AddReflected(fmt.Sprintf("%d", i), rr)
}
for i, rr := range w.senderSnapshot.processedReceptionReports {
e.AddReflected(fmt.Sprintf("%d", i), rr)
}
return nil
@@ -155,7 +148,6 @@ type senderSnapshot struct {
extLastRRSN uint64
intervalStats intervalStats
processedReceptionReports []rtcp.ReceptionReport
skippedReceptionReports []rtcp.ReceptionReport
metadataCacheOverflowCount int
}
@@ -187,8 +179,7 @@ func (s *senderSnapshot) MarshalLogObject(e zapcore.ObjectEncoder) error {
e.AddFloat64("maxJitter", s.maxJitter)
e.AddUint64("extLastRRSN", s.extLastRRSN)
e.AddObject("intervalStats", &s.intervalStats)
e.AddObject("processedReceptionReports", wrappedReceptionReportsLogger{s, false})
e.AddObject("skippedReceptionReports", wrappedReceptionReportsLogger{s, true})
e.AddObject("processedReceptionReports", wrappedReceptionReportsLogger{s})
e.AddInt("metadataCacheOverflowCount", s.metadataCacheOverflowCount)
return nil
}
@@ -584,7 +575,7 @@ func (r *RTPStatsSender) UpdateFromReceiverReport(rr rtcp.ReceptionReport) (rtt
"timeSinceLastRR", timeSinceLastRR(),
"receivedRR", rr,
"extHighestSNFromRR", extHighestSNFromRR,
"extReceivedRRSn", extReceivedRRSN,
"extReceivedRRSN", extReceivedRRSN,
"rtpStats", lockedRTPStatsSenderLogEncoder{r},
)
for int64(r.extHighestSN-extReceivedRRSN) > (1 << 16) {
@@ -597,7 +588,7 @@ func (r *RTPStatsSender) UpdateFromReceiverReport(rr rtcp.ReceptionReport) (rtt
"timeSinceLastRR", timeSinceLastRR(),
"receivedRR", rr,
"extHighestSNFromRR", extHighestSNFromRR,
"extReceivedRRSn", extReceivedRRSN,
"extReceivedRRSN", extReceivedRRSN,
"rtpStats", lockedRTPStatsSenderLogEncoder{r},
)
}
@@ -609,6 +600,7 @@ func (r *RTPStatsSender) UpdateFromReceiverReport(rr rtcp.ReceptionReport) (rtt
"timeSinceLastRR", timeSinceLastRR(),
"receivedRR", rr,
"extHighestSNFromRR", extHighestSNFromRR,
"extReceivedRRSN", extReceivedRRSN,
"rtpStats", lockedRTPStatsSenderLogEncoder{r},
)
for r.extHighestSN < extReceivedRRSN {
@@ -621,6 +613,7 @@ func (r *RTPStatsSender) UpdateFromReceiverReport(rr rtcp.ReceptionReport) (rtt
"timeSinceLastRR", timeSinceLastRR(),
"receivedRR", rr,
"extHighestSNFromRR", extHighestSNFromRR,
"extReceivedRRSN", extReceivedRRSN,
"rtpStats", lockedRTPStatsSenderLogEncoder{r},
)
}
@@ -631,6 +624,7 @@ func (r *RTPStatsSender) UpdateFromReceiverReport(rr rtcp.ReceptionReport) (rtt
"timeSinceLastRR", timeSinceLastRR(),
"receivedRR", rr,
"extHighestSNFromRR", extHighestSNFromRR,
"extReceivedRRSN", extReceivedRRSN,
"rtpStats", lockedRTPStatsSenderLogEncoder{r},
)
return
@@ -683,22 +677,6 @@ func (r *RTPStatsSender) UpdateFromReceiverReport(rr rtcp.ReceptionReport) (rtt
s.maxJitter = r.jitterFromRR
}
if int64(extReceivedRRSN-s.extLastRRSN) < 0 || (extReceivedRRSN-s.extLastRRSN) > (1<<15) {
r.logger.Infow(
"rr interval too big, skipping",
"senderSnapshotID", i+cFirstSnapshotID,
"senderSnapshot", s,
"timeSinceLastRR", timeSinceLastRR(),
"receivedRR", rr,
"extReceivedRRSN", extReceivedRRSN,
"packetsInInterval", extReceivedRRSN-s.extLastRRSN,
"rtpStats", lockedRTPStatsSenderLogEncoder{r},
)
s.extLastRRSN = extReceivedRRSN
s.skippedReceptionReports = append(s.skippedReceptionReports, rr)
continue
}
// on every RR, calculate delta since last RR using packet metadata cache
is := r.getIntervalStats(s.extLastRRSN+1, extReceivedRRSN+1, r.extHighestSN)
eis := &s.intervalStats