mirror of
https://github.com/livekit/livekit.git
synced 2026-04-05 12:26:07 +00:00
fix sender report batching to not exceed MTU
This commit is contained in:
@@ -28,7 +28,7 @@ const (
|
||||
lossyDataChannel = "_lossy"
|
||||
reliableDataChannel = "_reliable"
|
||||
privateDataChannel = "_private"
|
||||
sdBatchSize = 15
|
||||
sdBatchSize = 20
|
||||
)
|
||||
|
||||
type ParticipantParams struct {
|
||||
@@ -863,7 +863,7 @@ func (p *ParticipantImpl) downTracksRTCPWorker() {
|
||||
continue
|
||||
}
|
||||
|
||||
var pkts []rtcp.Packet
|
||||
var srs []rtcp.Packet
|
||||
var sd []rtcp.SourceDescriptionChunk
|
||||
p.lock.RLock()
|
||||
for _, tracks := range p.subscribedTracks {
|
||||
@@ -873,31 +873,46 @@ func (p *ParticipantImpl) downTracksRTCPWorker() {
|
||||
if sr == nil || chunks == nil {
|
||||
continue
|
||||
}
|
||||
pkts = append(pkts, sr)
|
||||
srs = append(srs, sr)
|
||||
sd = append(sd, chunks...)
|
||||
}
|
||||
}
|
||||
p.lock.RUnlock()
|
||||
|
||||
// now send in batches of sdBatchSize
|
||||
// first batch will contain the sender reports too
|
||||
var batch []rtcp.SourceDescriptionChunk
|
||||
for len(sd) > 0 {
|
||||
size := len(sd)
|
||||
if size > sdBatchSize {
|
||||
size = sdBatchSize
|
||||
}
|
||||
batch = sd[:size]
|
||||
sd = sd[size:]
|
||||
pkts = append(pkts, &rtcp.SourceDescription{Chunks: batch})
|
||||
if err := p.subscriber.pc.WriteRTCP(pkts); err != nil {
|
||||
if err == io.EOF || err == io.ErrClosedPipe {
|
||||
return
|
||||
var pkts []rtcp.Packet
|
||||
batchSize := 0
|
||||
for len(sd) > 0 || len(srs) > 0 {
|
||||
numSRs := len(srs)
|
||||
if numSRs > 0 {
|
||||
if numSRs > sdBatchSize {
|
||||
numSRs = sdBatchSize
|
||||
}
|
||||
logger.Errorw("could not send downtrack reports", err,
|
||||
"participant", p.Identity())
|
||||
pkts = append(pkts, srs[:numSRs]...)
|
||||
srs = srs[numSRs:]
|
||||
}
|
||||
|
||||
size := len(sd)
|
||||
spaceRemain := sdBatchSize - batchSize
|
||||
if spaceRemain > 0 && size > 0 {
|
||||
if size > spaceRemain {
|
||||
size = spaceRemain
|
||||
}
|
||||
batch = sd[:size]
|
||||
sd = sd[size:]
|
||||
pkts = append(pkts, &rtcp.SourceDescription{Chunks: batch})
|
||||
if err := p.subscriber.pc.WriteRTCP(pkts); err != nil {
|
||||
if err == io.EOF || err == io.ErrClosedPipe {
|
||||
return
|
||||
}
|
||||
logger.Errorw("could not send downtrack reports", err,
|
||||
"participant", p.Identity())
|
||||
}
|
||||
}
|
||||
|
||||
pkts = pkts[:0]
|
||||
batchSize = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user