From f20350d3d02089e28dcc6f15645bec991c841f1f Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sat, 5 Nov 2022 17:18:08 +0100 Subject: [PATCH] rtcpsender: improve precision of NTPTime --- pkg/rtcpsender/rtcpsender.go | 7 ++----- pkg/rtcpsender/rtcpsender_test.go | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/pkg/rtcpsender/rtcpsender.go b/pkg/rtcpsender/rtcpsender.go index 2ed3729c..a25558b6 100644 --- a/pkg/rtcpsender/rtcpsender.go +++ b/pkg/rtcpsender/rtcpsender.go @@ -84,12 +84,9 @@ func (rs *RTCPSender) report(ts time.Time) rtcp.Packet { SSRC: *rs.senderSSRC, NTPTime: func() uint64 { // 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 - integerPart := uint32(s) - fractionalPart := uint32((s - float64(integerPart)) * 0xFFFFFFFF) - return uint64(integerPart)<<32 | uint64(fractionalPart) + s := uint64(ts.UnixNano()) + 2208988800*1000000000 + return (s/1000000000)<<32 | (s % 1000000000) }(), RTPTime: *rs.lastRTPTimeRTP + uint32((ts.Sub(rs.lastRTPTimeTime)).Seconds()*rs.clockRate), PacketCount: rs.packetCount, diff --git a/pkg/rtcpsender/rtcpsender_test.go b/pkg/rtcpsender/rtcpsender_test.go index 5c11cf7a..48b3dcc2 100644 --- a/pkg/rtcpsender/rtcpsender_test.go +++ b/pkg/rtcpsender/rtcpsender_test.go @@ -18,7 +18,7 @@ func TestRTCPSender(t *testing.T) { rs := New(250*time.Millisecond, 90000, func(pkt rtcp.Packet) { require.Equal(t, &rtcp.SenderReport{ SSRC: 0xba9da416, - NTPTime: 0xcbddcc34999997ff, + NTPTime: 14690122083862791680, RTPTime: 0x4d185ae8, PacketCount: 3, OctetCount: 6,