mirror of
https://github.com/aler9/gortsplib
synced 2025-10-07 08:01:14 +08:00
preserve NTP when generating sender reports
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package rtcpsender
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -10,26 +11,45 @@ import (
|
||||
)
|
||||
|
||||
func TestRTCPSender(t *testing.T) {
|
||||
now = func() time.Time {
|
||||
return time.Date(2008, 5, 20, 22, 16, 20, 600000000, time.UTC)
|
||||
}
|
||||
done := make(chan struct{})
|
||||
var curTime time.Time
|
||||
var mutex sync.Mutex
|
||||
|
||||
rs := New(90000, func(pkt rtcp.Packet) {
|
||||
require.Equal(t, &rtcp.SenderReport{
|
||||
SSRC: 0xba9da416,
|
||||
NTPTime: 14690122083862791680,
|
||||
RTPTime: 0x4d185ae8,
|
||||
PacketCount: 3,
|
||||
OctetCount: 6,
|
||||
}, pkt)
|
||||
close(done)
|
||||
})
|
||||
setCurTime := func(v time.Time) {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
curTime = v
|
||||
}
|
||||
|
||||
timeNow = func() time.Time {
|
||||
mutex.Lock()
|
||||
defer mutex.Unlock()
|
||||
return curTime
|
||||
}
|
||||
|
||||
sent := make(chan struct{})
|
||||
|
||||
rs := New(
|
||||
90000,
|
||||
100*time.Millisecond,
|
||||
func(pkt rtcp.Packet) {
|
||||
require.Equal(t, &rtcp.SenderReport{
|
||||
SSRC: 0xba9da416,
|
||||
NTPTime: func() uint64 {
|
||||
// timeDiff = (24 - 22) = 2
|
||||
// 21 + 2 = 23
|
||||
d := time.Date(2008, 5, 20, 22, 15, 23, 0, time.UTC)
|
||||
s := uint64(d.UnixNano()) + 2208988800*1000000000
|
||||
return (s/1000000000)<<32 | (s % 1000000000)
|
||||
}(),
|
||||
RTPTime: 1287987768 + 2*90000,
|
||||
PacketCount: 3,
|
||||
OctetCount: 6,
|
||||
}, pkt)
|
||||
close(sent)
|
||||
})
|
||||
defer rs.Close()
|
||||
|
||||
rs.Start(250 * time.Millisecond)
|
||||
time.Sleep(400 * time.Millisecond)
|
||||
|
||||
setCurTime(time.Date(2008, 5, 20, 22, 16, 20, 0, time.UTC))
|
||||
rtpPkt := rtp.Packet{
|
||||
Header: rtp.Header{
|
||||
Version: 2,
|
||||
@@ -44,18 +64,19 @@ func TestRTCPSender(t *testing.T) {
|
||||
ts := time.Date(2008, 0o5, 20, 22, 15, 20, 0, time.UTC)
|
||||
rs.ProcessPacket(&rtpPkt, ts, true)
|
||||
|
||||
setCurTime(time.Date(2008, 5, 20, 22, 16, 22, 0, time.UTC))
|
||||
rtpPkt = rtp.Packet{
|
||||
Header: rtp.Header{
|
||||
Version: 2,
|
||||
Marker: true,
|
||||
PayloadType: 96,
|
||||
SequenceNumber: 947,
|
||||
Timestamp: 1287987768 + 45000,
|
||||
Timestamp: 1287987768,
|
||||
SSRC: 0xba9da416,
|
||||
},
|
||||
Payload: []byte("\x00\x00"),
|
||||
}
|
||||
ts = time.Date(2008, 0o5, 20, 22, 15, 20, 500000000, time.UTC)
|
||||
ts = time.Date(2008, 0o5, 20, 22, 15, 21, 0, time.UTC)
|
||||
rs.ProcessPacket(&rtpPkt, ts, true)
|
||||
|
||||
rtpPkt = rtp.Packet{
|
||||
@@ -64,13 +85,15 @@ func TestRTCPSender(t *testing.T) {
|
||||
Marker: true,
|
||||
PayloadType: 96,
|
||||
SequenceNumber: 948,
|
||||
Timestamp: 1287987768 + 90000,
|
||||
Timestamp: 1287987768,
|
||||
SSRC: 0xba9da416,
|
||||
},
|
||||
Payload: []byte("\x00\x00"),
|
||||
}
|
||||
ts = time.Date(2008, 0o5, 20, 22, 15, 20, 500000000, time.UTC)
|
||||
ts = time.Date(2008, 0o5, 20, 22, 15, 22, 0, time.UTC)
|
||||
rs.ProcessPacket(&rtpPkt, ts, false)
|
||||
|
||||
<-done
|
||||
setCurTime(time.Date(2008, 5, 20, 22, 16, 24, 0, time.UTC))
|
||||
|
||||
<-sent
|
||||
}
|
||||
|
Reference in New Issue
Block a user