rtcpsender: improve precision of NTPTime

This commit is contained in:
aler9
2022-11-05 17:18:08 +01:00
parent ededb490bc
commit f20350d3d0
2 changed files with 3 additions and 6 deletions

View File

@@ -84,12 +84,9 @@ func (rs *RTCPSender) report(ts time.Time) rtcp.Packet {
SSRC: *rs.senderSSRC, SSRC: *rs.senderSSRC,
NTPTime: func() uint64 { NTPTime: func() uint64 {
// seconds since 1st January 1900 // seconds since 1st January 1900
s := (float64(ts.UnixNano()) / 1000000000) + 2208988800
// higher 32 bits are the integer part, lower 32 bits are the fractional part // higher 32 bits are the integer part, lower 32 bits are the fractional part
integerPart := uint32(s) s := uint64(ts.UnixNano()) + 2208988800*1000000000
fractionalPart := uint32((s - float64(integerPart)) * 0xFFFFFFFF) return (s/1000000000)<<32 | (s % 1000000000)
return uint64(integerPart)<<32 | uint64(fractionalPart)
}(), }(),
RTPTime: *rs.lastRTPTimeRTP + uint32((ts.Sub(rs.lastRTPTimeTime)).Seconds()*rs.clockRate), RTPTime: *rs.lastRTPTimeRTP + uint32((ts.Sub(rs.lastRTPTimeTime)).Seconds()*rs.clockRate),
PacketCount: rs.packetCount, PacketCount: rs.packetCount,

View File

@@ -18,7 +18,7 @@ func TestRTCPSender(t *testing.T) {
rs := New(250*time.Millisecond, 90000, func(pkt rtcp.Packet) { rs := New(250*time.Millisecond, 90000, func(pkt rtcp.Packet) {
require.Equal(t, &rtcp.SenderReport{ require.Equal(t, &rtcp.SenderReport{
SSRC: 0xba9da416, SSRC: 0xba9da416,
NTPTime: 0xcbddcc34999997ff, NTPTime: 14690122083862791680,
RTPTime: 0x4d185ae8, RTPTime: 0x4d185ae8,
PacketCount: 3, PacketCount: 3,
OctetCount: 6, OctetCount: 6,