diff --git a/pkg/sfu/buffer/rtpstats.go b/pkg/sfu/buffer/rtpstats.go index 1774eb28c..f5bb0a5d9 100644 --- a/pkg/sfu/buffer/rtpstats.go +++ b/pkg/sfu/buffer/rtpstats.go @@ -944,6 +944,25 @@ func (r *RTPStats) GetRtcpSenderReport(ssrc uint32, calculatedClockRate uint32) "nowRTPExt", nowRTPExt, "nowRTPExtUsingRate", nowRTPExtUsingRate, ) + } else { + packetDriftResult, reportDriftResult := r.getDrift() + r.logger.Debugw( + "sending sender report", + "ntp", nowNTP.Time().String(), + "rtp", nowRTP, + "departure", now.String(), + "ntpDiffSinceLast", ntpDiffSinceLast.Seconds(), + "rtpDiffSinceLast", int32(rtpDiffSinceLast), + "departureDiffSinceLast", departureDiffSinceLast.Seconds(), + "expectedTimeDiffSinceLast", expectedTimeDiffSinceLast, + "packetDrift", packetDriftResult.String(), + "reportDrift", reportDriftResult.String(), + "highestTS", r.highestTS, + "highestTime", r.highestTime.String(), + "calculatedClockRate", calculatedClockRate, + "nowRTPExt", nowRTPExt, + "nowRTPExtUsingRate", nowRTPExtUsingRate, + ) } return &rtcp.SenderReport{ diff --git a/pkg/sfu/downtrack.go b/pkg/sfu/downtrack.go index c9b888942..82b479d79 100644 --- a/pkg/sfu/downtrack.go +++ b/pkg/sfu/downtrack.go @@ -1177,7 +1177,11 @@ func (d *DownTrack) CreateSenderReport() *rtcp.SenderReport { return nil } - return d.rtpStats.GetRtcpSenderReport(d.ssrc, d.receiver.GetCalculatedClockRate(d.forwarder.CurrentLayer().Spatial)) + clockLayer := d.forwarder.CurrentLayer().Spatial + if clockLayer == buffer.InvalidLayerSpatial { + clockLayer = d.forwarder.GetReferenceLayerSpatial() + } + return d.rtpStats.GetRtcpSenderReport(d.ssrc, d.receiver.GetCalculatedClockRate(clockLayer)) } func (d *DownTrack) writeBlankFrameRTP(duration float32, generation uint32) chan struct{} { diff --git a/pkg/sfu/forwarder.go b/pkg/sfu/forwarder.go index 2961cfde4..4b6be3687 100644 --- a/pkg/sfu/forwarder.go +++ b/pkg/sfu/forwarder.go @@ -529,6 +529,13 @@ func (f *Forwarder) GetMaxSubscribedSpatial() int32 { return layer } +func (f *Forwarder) GetReferenceLayerSpatial() int32 { + f.lock.RLock() + defer f.lock.RUnlock() + + return f.referenceLayerSpatial +} + func (f *Forwarder) isDeficientLocked() bool { return f.lastAllocation.IsDeficient } @@ -1992,6 +1999,18 @@ done: if !targetLayer.IsValid() { distance += (maxSeenLayer.Temporal + 1) } + // TODO-REMOVE-AFTER-DEBUG + logger.Debugw( + "distance to desired", + "maxSeenLauer", maxSeenLayer, + "availableLayers", availableLayers, + "brs", brs, + "targetLayer", targetLayer, + "maxLayer", maxLayer, + "adjustedMaxLayer", adjustedMaxLayer, + "maxAvailableSpatial", maxAvailableSpatial, + "maxAvailableTemporal", maxAvailableTemporal, + ) return float64(distance) / float64(maxSeenLayer.Temporal+1) }