mirror of
https://github.com/livekit/livekit.git
synced 2026-05-14 18:25:24 +00:00
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:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user