1
Fork 0

Don't count NACK recovery as properly received packets.

This commit is contained in:
Juliusz Chroboczek 2020-05-01 04:08:26 +02:00
parent 78cf9d0dbc
commit 100f72e76c
2 changed files with 15 additions and 1 deletions

View File

@ -10,6 +10,7 @@ import (
"errors"
"io"
"log"
"math/bits"
"os"
"strings"
"sync"
@ -701,7 +702,11 @@ func sendREMB(pc *webrtc.PeerConnection, ssrc uint32, bitrate uint64) error {
}
func (up *upConnection) sendNACK(track *upTrack, first uint16, bitmap uint16) error {
return sendNACK(up.pc, track.track.SSRC(), first, bitmap)
err := sendNACK(up.pc, track.track.SSRC(), first, bitmap)
if err == nil {
track.cache.Expect(1 + bits.OnesCount16(bitmap))
}
return err
}
func sendNACK(pc *webrtc.PeerConnection, ssrc uint32, first uint16, bitmap uint16) error {

View File

@ -114,6 +114,15 @@ func (cache *Cache) Store(seqno uint16, buf []byte) uint16 {
return cache.first
}
func (cache *Cache) Expect(n int) {
if n <= 0 {
return
}
cache.mu.Lock()
defer cache.mu.Unlock()
cache.expected += uint32(n)
}
func (cache *Cache) Get(seqno uint16) []byte {
cache.mu.Lock()
defer cache.mu.Unlock()