Skip to content

Commit

Permalink
Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
streamer45 committed Oct 7, 2024
1 parent 444fcb7 commit 2d24456
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions client/rtc_monitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,12 +116,20 @@ func (m *rtcMonitor) getAvgReceiverStats(stats map[webrtc.SSRC]*stats.Stats) (av
var totalJitter, totalLost, totalReceived float64

for ssrc, s := range stats {
if prevStats := m.lastRcvStats[ssrc]; prevStats == nil || s.InboundRTPStreamStats.PacketsReceived == prevStats.InboundRTPStreamStats.PacketsReceived {
prevStats := m.lastRcvStats[ssrc]
if prevStats == nil || s.InboundRTPStreamStats.PacketsReceived == prevStats.InboundRTPStreamStats.PacketsReceived {
continue
}

totalLost += float64(s.InboundRTPStreamStats.PacketsLost)
totalReceived += float64(s.InboundRTPStreamStats.PacketsReceived)
receivedDiff := s.InboundRTPStreamStats.PacketsReceived - prevStats.InboundRTPStreamStats.PacketsReceived
potentiallyLost := int64(s.RemoteOutboundRTPStreamStats.PacketsSent) - int64(s.InboundRTPStreamStats.PacketsReceived)
prevPotentiallyLost := int64(prevStats.RemoteOutboundRTPStreamStats.PacketsSent) - int64(prevStats.InboundRTPStreamStats.PacketsReceived)
var lostDiff int64
if potentiallyLost > prevPotentiallyLost {
lostDiff = potentiallyLost - prevPotentiallyLost
}
totalLost += float64(lostDiff)
totalReceived += float64(receivedDiff)

// pion stores inbound jitter in RTP units rather than seconds.
// 960 is the expected frame size for opus packets. (20ms at 48000Hz)
Expand All @@ -139,6 +147,12 @@ func (m *rtcMonitor) getAvgReceiverStats(stats map[webrtc.SSRC]*stats.Stats) (av
}

func (m *rtcMonitor) processStats(sndStats, rcvStats map[webrtc.SSRC]*stats.Stats) {
defer func() {
// cache stats for the next iteration
m.lastSndStats = sndStats
m.lastRcvStats = rcvStats
}()

sndLossRate, sndJitter, sndCnt := m.getAvgSenderStats(sndStats)
rcvLossRate, rcvJitter, rcvCnt := m.getAvgReceiverStats(rcvStats)

Expand All @@ -147,10 +161,6 @@ func (m *rtcMonitor) processStats(sndStats, rcvStats map[webrtc.SSRC]*stats.Stat
return
}

// cache stats for the next iteration
m.lastSndStats = sndStats
m.lastRcvStats = rcvStats

select {
case m.statsCh <- rtcStats{lossRate: max(sndLossRate, rcvLossRate), jitter: max(sndJitter, rcvJitter)}:
default:
Expand Down

0 comments on commit 2d24456

Please sign in to comment.