1
Fork 0
mirror of https://github.com/jech/galene.git synced 2024-11-23 00:55:58 +01:00
galene/rtpconn/rtpstats.go

77 lines
1.7 KiB
Go
Raw Normal View History

package rtpconn
import (
"sort"
"time"
2020-12-19 17:37:48 +01:00
"github.com/jech/galene/rtptime"
"github.com/jech/galene/stats"
)
func (c *webClient) GetStats() *stats.Client {
c.mu.Lock()
defer c.mu.Unlock()
cs := stats.Client{
Id: c.id,
}
for _, up := range c.up {
conns := stats.Conn{
Id: up.id,
}
tracks := up.getTracks()
for _, t := range tracks {
s := t.cache.GetStats(false)
var loss float64
if s.Expected > 0 {
loss = float64(s.Expected-s.Received) /
float64(s.Expected)
}
jitter := time.Duration(t.jitter.Jitter()) *
(time.Second / time.Duration(t.jitter.HZ()))
rate, _ := t.rate.Estimate()
conns.Tracks = append(conns.Tracks, stats.Track{
Bitrate: uint64(rate) * 8,
Loss: loss,
2021-04-30 19:50:42 +02:00
Jitter: stats.Duration(jitter),
})
}
cs.Up = append(cs.Up, conns)
}
sort.Slice(cs.Up, func(i, j int) bool {
return cs.Up[i].Id < cs.Up[j].Id
})
jiffies := rtptime.Jiffies()
for _, down := range c.down {
conns := stats.Conn{
2021-05-11 15:28:30 +02:00
Id: down.id,
}
for _, t := range down.tracks {
2021-05-11 15:28:30 +02:00
l, _, _ := t.getLayerInfo()
layer := int(l)
rate, _ := t.rate.Estimate()
rtt := rtptime.ToDuration(t.getRTT(),
rtptime.JiffiesPerSec)
loss, jitter := t.stats.Get(jiffies)
j := time.Duration(jitter) * time.Second /
time.Duration(t.track.Codec().ClockRate)
conns.Tracks = append(conns.Tracks, stats.Track{
2021-05-11 15:28:30 +02:00
Layer: &layer,
Bitrate: uint64(rate) * 8,
MaxBitrate: t.maxBitrate.Get(jiffies),
2021-04-30 19:50:42 +02:00
Loss: float64(loss) / 256.0,
Rtt: stats.Duration(rtt),
Jitter: stats.Duration(j),
})
}
cs.Down = append(cs.Down, conns)
}
sort.Slice(cs.Down, func(i, j int) bool {
return cs.Down[i].Id < cs.Down[j].Id
})
return &cs
}