diff --git a/pkg/sfu/connectionquality/scorer.go b/pkg/sfu/connectionquality/scorer.go index 7711e89ca..af7861d15 100644 --- a/pkg/sfu/connectionquality/scorer.go +++ b/pkg/sfu/connectionquality/scorer.go @@ -252,13 +252,14 @@ func (q *qualityScorer) Update(stat *windowStat, at time.Time) { return } + plw := q.getPacketLossWeight(stat) reason := "none" var score float64 if stat.packetsExpected == 0 { reason = "dry" score = poorScore } else { - packetScore := stat.calculatePacketScore(q.getPacketLossWeight(stat), q.params.IsDependentRTT, q.params.IsDependentJitter) + packetScore := stat.calculatePacketScore(plw, q.params.IsDependentRTT, q.params.IsDependentJitter) bitrateScore := stat.calculateBitrateScore(expectedBitrate) layerScore := math.Max(math.Min(maxScore, maxScore-(expectedDistance*distanceWeight)), 0.0) @@ -302,6 +303,8 @@ func (q *qualityScorer) Update(stat *windowStat, at time.Time) { "score", score, "quality", scoreToConnectionQuality(score), "stat", stat, + "packetLossWeight", plw, + "maxPPS", q.maxPPS, "expectedBitrate", expectedBitrate, "expectedDistance", expectedDistance, ) diff --git a/pkg/sfu/receiver.go b/pkg/sfu/receiver.go index 05d7303e2..67f00f22c 100644 --- a/pkg/sfu/receiver.go +++ b/pkg/sfu/receiver.go @@ -298,7 +298,12 @@ func (w *WebRTCReceiver) AddUpTrack(track *webrtc.TrackRemote, buff *buffer.Buff } layer := int32(0) - if w.Kind() == webrtc.RTPCodecTypeVideo { + // for svc codecs, use layer full quality instead. + // we only have buffer for full quality + if w.isSVC { + layer = int32(len(w.buffers)) - 1 + } + if w.Kind() == webrtc.RTPCodecTypeVideo && !w.isSVC { layer = buffer.RidToSpatialLayer(track.RID(), w.trackInfo) } buff.SetLogger(w.logger.WithValues("layer", layer))