Files
livekit/pkg/rtc/rtpstats_test.go
2022-03-12 11:21:05 +05:30

63 lines
1.4 KiB
Go

package rtc
import (
"fmt"
"math/rand"
"testing"
"time"
"github.com/pion/rtp"
)
func getPacket(sn uint16, ts uint32, payloadSize int) *rtp.Packet {
return &rtp.Packet{
Header: rtp.Header{
SequenceNumber: sn,
Timestamp: ts,
},
Payload: make([]byte, payloadSize),
}
}
func TestRTPStats(t *testing.T) {
clockRate := uint32(90000)
windowDuration := 5 * time.Second
r := NewRTPStats(RTPStatsParams{
ClockRate: clockRate,
WindowDuration: windowDuration,
})
totalDuration := 4 * windowDuration
bitrate := 1000000
packetSize := 1000
pps := (((bitrate + 7) / 8) + packetSize - 1) / packetSize
framerate := 30
sleep := 1000 / framerate
packetsPerFrame := (pps + framerate - 1) / framerate
sequenceNumber := uint16(rand.Float64() * float64(1<<16))
timestamp := uint32(rand.Float64() * float64(1<<32))
now := time.Now()
startTime := now
lastFrameTime := now
for now.Sub(startTime) < totalDuration {
timestamp += uint32(now.Sub(lastFrameTime).Seconds() * float64(clockRate))
for i := 0; i < packetsPerFrame; i++ {
r.Update(getPacket(sequenceNumber, timestamp, packetSize), time.Now().UnixNano())
if (sequenceNumber % 100) == 0 {
jump := uint16(rand.Float64() * 120.0)
sequenceNumber += jump
} else {
sequenceNumber++
}
}
lastFrameTime = now
time.Sleep(time.Duration(sleep) * time.Millisecond)
now = time.Now()
}
r.Stop()
fmt.Printf("%s\n", r.ToString())
}