diff --git a/pkg/rtc/mediatrack.go b/pkg/rtc/mediatrack.go index 186e37b1f..be58fea81 100644 --- a/pkg/rtc/mediatrack.go +++ b/pkg/rtc/mediatrack.go @@ -312,15 +312,30 @@ func (t *MediaTrack) AddReceiver(receiver *webrtc.RTPReceiver, track sfu.TrackRe } } }) + // SIMULCAST-CODEC-TODO: these need to be receiver/mime aware, setting it up only for primary now - if priority == 0 { - newWR.OnStatsUpdate(func(_ *sfu.WebRTCReceiver, stat *livekit.AnalyticsStat) { + newWR.OnStatsUpdate(func(_ *sfu.WebRTCReceiver, stat *livekit.AnalyticsStat) { + // send for only one codec, either primary (priority == 0) OR regressed codec + t.lock.RLock() + regressionTargetCodecReceived := t.regressionTargetCodecReceived + t.lock.RUnlock() + if priority == 0 || regressionTargetCodecReceived { key := telemetry.StatsKeyForTrack(livekit.StreamType_UPSTREAM, t.PublisherID(), t.ID(), ti.Source, ti.Type) t.params.Telemetry.TrackStats(key, stat) - }) + } + }) + + newWR.OnMaxLayerChange(func(maxLayer int32) { + // send for only one codec, either primary (priority == 0) OR regressed codec + t.lock.RLock() + regressionTargetCodecReceived := t.regressionTargetCodecReceived + t.lock.RUnlock() + if priority == 0 || regressionTargetCodecReceived { + t.MediaTrackReceiver.NotifyMaxLayerChange(maxLayer) + } + }) + // SIMULCAST-CODEC-TODO END: these need to be receiver/mime aware, setting it up only for primary now - newWR.OnMaxLayerChange(t.onMaxLayerChange) - } if t.PrimaryReceiver() == nil { // primary codec published, set potential codecs potentialCodecs := make([]webrtc.RTPCodecParameters, 0, len(ti.Codecs)) @@ -447,10 +462,6 @@ func (t *MediaTrack) HasPendingCodec() bool { return t.MediaTrackReceiver.PrimaryReceiver() == nil } -func (t *MediaTrack) onMaxLayerChange(maxLayer int32) { - t.MediaTrackReceiver.NotifyMaxLayerChange(maxLayer) -} - func (t *MediaTrack) Restart() { t.MediaTrackReceiver.Restart() diff --git a/pkg/telemetry/statsworker.go b/pkg/telemetry/statsworker.go index a72ceaf8c..0dec2c5c7 100644 --- a/pkg/telemetry/statsworker.go +++ b/pkg/telemetry/statsworker.go @@ -255,6 +255,7 @@ func coalesce(stats []*livekit.AnalyticsStat) *livekit.AnalyticsStat { MinScore: minScore, MedianScore: utils.MedianFloat32(scores), Streams: []*livekit.AnalyticsStream{coalescedStream}, + Mime: stats[len(stats)-1].Mime, // use the latest Mime } numScores := len(scores) if numScores > 0 {