mirror of
https://github.com/livekit/livekit.git
synced 2026-05-31 02:54:07 +00:00
Merge remote-tracking branch 'origin/master' into raja_min_packets
This commit is contained in:
@@ -133,6 +133,7 @@ func (s *sequencer) push(
|
||||
layer: layer,
|
||||
codecBytes: append([]byte{}, codecBytes...),
|
||||
ddBytes: append([]byte{}, ddBytes...),
|
||||
lastNack: s.getRefTime(), // delay retransmissions after the original transmission
|
||||
}
|
||||
|
||||
s.seq[slot] = &s.meta[s.metaWritePtr]
|
||||
@@ -198,7 +199,7 @@ func (s *sequencer) getPacketsMeta(seqNo []uint16) []packetMeta {
|
||||
defer s.Unlock()
|
||||
|
||||
meta := make([]packetMeta, 0, len(seqNo))
|
||||
refTime := uint32(time.Now().UnixNano()/1e6 - s.startTime)
|
||||
refTime := s.getRefTime()
|
||||
for _, sn := range seqNo {
|
||||
diff := s.headSN - sn
|
||||
if diff > (1<<15) || int(diff) >= s.max {
|
||||
@@ -212,7 +213,7 @@ func (s *sequencer) getPacketsMeta(seqNo []uint16) []packetMeta {
|
||||
continue
|
||||
}
|
||||
|
||||
if (seq.lastNack == 0 || refTime-seq.lastNack > uint32(math.Min(float64(ignoreRetransmission), float64(2*s.rtt)))) && seq.nacked < maxAck {
|
||||
if refTime-seq.lastNack > uint32(math.Min(float64(ignoreRetransmission), float64(2*s.rtt))) && seq.nacked < maxAck {
|
||||
seq.nacked++
|
||||
seq.lastNack = refTime
|
||||
|
||||
@@ -237,3 +238,7 @@ func (s *sequencer) wrap(slot int) int {
|
||||
|
||||
return slot
|
||||
}
|
||||
|
||||
func (s *sequencer) getRefTime() uint32 {
|
||||
return uint32(time.Now().UnixNano()/1e6 - s.startTime)
|
||||
}
|
||||
|
||||
@@ -35,9 +35,13 @@ func Test_sequencer(t *testing.T) {
|
||||
seq.push(519, 519+off, 123, false, 2, nil, nil)
|
||||
seq.push(518, 518+off, 123, true, 2, nil, nil)
|
||||
|
||||
time.Sleep(60 * time.Millisecond)
|
||||
req := []uint16{57, 58, 62, 63, 513, 514, 515, 516, 517}
|
||||
res := seq.getPacketsMeta(req)
|
||||
// nothing should be returned as not enough time has elapsed since sending packet
|
||||
require.Equal(t, 0, len(res))
|
||||
|
||||
time.Sleep((ignoreRetransmission + 10) * time.Millisecond)
|
||||
res = seq.getPacketsMeta(req)
|
||||
require.Equal(t, len(req), len(res))
|
||||
for i, val := range res {
|
||||
require.Equal(t, val.targetSeqNo, req[i])
|
||||
@@ -46,7 +50,7 @@ func Test_sequencer(t *testing.T) {
|
||||
}
|
||||
res = seq.getPacketsMeta(req)
|
||||
require.Equal(t, 0, len(res))
|
||||
time.Sleep(150 * time.Millisecond)
|
||||
time.Sleep((ignoreRetransmission + 10) * time.Millisecond)
|
||||
res = seq.getPacketsMeta(req)
|
||||
require.Equal(t, len(req), len(res))
|
||||
for i, val := range res {
|
||||
@@ -57,10 +61,16 @@ func Test_sequencer(t *testing.T) {
|
||||
|
||||
seq.push(521, 521+off, 123, true, 1, nil, nil)
|
||||
m := seq.getPacketsMeta([]uint16{521 + off})
|
||||
require.Equal(t, 0, len(m))
|
||||
time.Sleep((ignoreRetransmission + 10) * time.Millisecond)
|
||||
m = seq.getPacketsMeta([]uint16{521 + off})
|
||||
require.Equal(t, 1, len(m))
|
||||
|
||||
seq.push(505, 505+off, 123, false, 1, nil, nil)
|
||||
m = seq.getPacketsMeta([]uint16{505 + off})
|
||||
require.Equal(t, 0, len(m))
|
||||
time.Sleep((ignoreRetransmission + 10) * time.Millisecond)
|
||||
m = seq.getPacketsMeta([]uint16{505 + off})
|
||||
require.Equal(t, 1, len(m))
|
||||
}
|
||||
|
||||
@@ -121,6 +131,7 @@ func Test_sequencer_getNACKSeqNo(t *testing.T) {
|
||||
n.pushPadding(i + tt.fields.offset)
|
||||
}
|
||||
|
||||
time.Sleep((ignoreRetransmission + 10) * time.Millisecond)
|
||||
g := n.getPacketsMeta(tt.args.seqNo)
|
||||
var got []uint16
|
||||
for _, sn := range g {
|
||||
|
||||
Reference in New Issue
Block a user