diff --git a/pkg/sfu/connectionquality/connectionstats.go b/pkg/sfu/connectionquality/connectionstats.go index a9f612a54..42f4f5893 100644 --- a/pkg/sfu/connectionquality/connectionstats.go +++ b/pkg/sfu/connectionquality/connectionstats.go @@ -30,7 +30,7 @@ type ConnectionStatsParams struct { GetQualityParams func() *buffer.ConnectionQualityParams GetIsReducedQuality func() bool GetLayerDimension func(int32) (uint32, uint32) - GetMaxExpectedLayer func() livekit.VideoLayer + GetMaxExpectedLayer func() *livekit.VideoLayer Logger logger.Logger } @@ -111,7 +111,7 @@ func (cs *ConnectionStats) updateScore(streams []*livekit.AnalyticsStream, itera } else { // get tracks expected max layer and dimensions expectedLayer := cs.params.GetMaxExpectedLayer() - if utils.SpatialLayerForQuality(expectedLayer.Quality) == buffer.InvalidLayerSpatial { + if expectedLayer == nil || utils.SpatialLayerForQuality(expectedLayer.Quality) == buffer.InvalidLayerSpatial { return cs.score } @@ -129,9 +129,6 @@ func (cs *ConnectionStats) updateScore(streams []*livekit.AnalyticsStream, itera cs.score = VideoConnectionScore(interval, int64(totalBytes), int64(totalFrames), &qualityParam, cs.params.CodecName, int32(expectedLayer.Height), int32(expectedLayer.Width), int32(actualHeight), int32(actualWidth)) - //logger.Infow("VideoScoreScore", "score", cs.score, "expectedLayer", expectedLayer.Quality, "maxLayer", maxLayer, - // "expectedWidth", expectedLayer.Width, "actualWidth", actualWidth, "expectedHeight", expectedLayer.Height, "actualHeight", actualHeight) - } return cs.score diff --git a/pkg/sfu/downtrack.go b/pkg/sfu/downtrack.go index 66d8393b9..b0c3d11be 100644 --- a/pkg/sfu/downtrack.go +++ b/pkg/sfu/downtrack.go @@ -234,10 +234,10 @@ func NewDownTrack( } return 0, 0 }, - GetMaxExpectedLayer: func() livekit.VideoLayer { + GetMaxExpectedLayer: func() *livekit.VideoLayer { quality := d.forwarder.MaxLayers().Spatial width, height := d.receiver.GetLayerDimension(quality) - return livekit.VideoLayer{Quality: livekit.VideoQuality(quality), Width: width, Height: height} + return &livekit.VideoLayer{Quality: livekit.VideoQuality(quality), Width: width, Height: height} }, Logger: d.logger, CodecName: getCodecNameFromMime(codecs[0].MimeType), diff --git a/pkg/sfu/receiver.go b/pkg/sfu/receiver.go index 601a407e3..67807d5c2 100644 --- a/pkg/sfu/receiver.go +++ b/pkg/sfu/receiver.go @@ -11,6 +11,7 @@ import ( "github.com/pion/rtcp" "github.com/pion/webrtc/v3" "go.uber.org/atomic" + "google.golang.org/protobuf/proto" "github.com/livekit/livekit-server/pkg/utils" "github.com/livekit/protocol/livekit" @@ -208,9 +209,9 @@ func NewWebRTCReceiver( GetLayerDimension: func(quality int32) (uint32, uint32) { return w.GetLayerDimension(quality) }, - GetMaxExpectedLayer: func() livekit.VideoLayer { - var expectedLayer livekit.VideoLayer - var maxPublishedLayer livekit.VideoLayer + GetMaxExpectedLayer: func() *livekit.VideoLayer { + var expectedLayer *livekit.VideoLayer + var maxPublishedLayer *livekit.VideoLayer // find min of layer expectedQuality := w.streamTrackerManager.GetMaxExpectedLayer() maxPublishedQuality := InvalidLayerSpatial @@ -220,11 +221,11 @@ func NewWebRTCReceiver( continue } if expectedQuality == utils.SpatialLayerForQuality(layer.Quality) { - expectedLayer = *layer + expectedLayer = proto.Clone(layer).(*livekit.VideoLayer) } if utils.SpatialLayerForQuality(layer.Quality) > maxPublishedQuality { maxPublishedQuality = int32(layer.Quality) - maxPublishedLayer = *layer + maxPublishedLayer = proto.Clone(layer).(*livekit.VideoLayer) } } }