From 32fc35254ebf52cbf3311fb08f2c264488e8bf99 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Tue, 28 Oct 2025 11:27:02 +0530 Subject: [PATCH] Broadcast cond var on RTX write. (#4038) * Broadcast cond var on RTX write. High forwarding latency logs all show high queuing delay so far. From code inspection, RTX writes were not signaling the cond var. Not sure if that is the reason, but adding a signal there for further tests. * Remove return values from writeRTX as they are not used --- pkg/sfu/buffer/buffer.go | 6 +++--- pkg/sfu/receiver.go | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pkg/sfu/buffer/buffer.go b/pkg/sfu/buffer/buffer.go index 02e6098fb..d6e9ac577 100644 --- a/pkg/sfu/buffer/buffer.go +++ b/pkg/sfu/buffer/buffer.go @@ -455,7 +455,7 @@ func (b *Buffer) SetPrimaryBufferForRTX(primaryBuffer *Buffer) { } } -func (b *Buffer) writeRTX(rtxPkt *rtp.Packet, arrivalTime int64) (n int, err error) { +func (b *Buffer) writeRTX(rtxPkt *rtp.Packet, arrivalTime int64) { b.Lock() defer b.Unlock() if !b.bound { @@ -481,14 +481,14 @@ func (b *Buffer) writeRTX(rtxPkt *rtp.Packet, arrivalTime int64) (n int, err err repairedPkt.SequenceNumber = binary.BigEndian.Uint16(rtxPkt.Payload[:2]) repairedPkt.SSRC = b.mediaSSRC repairedPkt.Payload = rtxPkt.Payload[2:] - n, err = repairedPkt.MarshalTo(b.rtxPktBuf) + n, err := repairedPkt.MarshalTo(b.rtxPktBuf) if err != nil { b.logger.Errorw("could not marshal repaired packet", err, "ssrc", b.mediaSSRC, "sn", repairedPkt.SequenceNumber) return } b.calc(b.rtxPktBuf[:n], &repairedPkt, arrivalTime, true) - return + b.readCond.Broadcast() } func (b *Buffer) Read(buff []byte) (n int, err error) { diff --git a/pkg/sfu/receiver.go b/pkg/sfu/receiver.go index ec069f621..f25250f86 100644 --- a/pkg/sfu/receiver.go +++ b/pkg/sfu/receiver.go @@ -834,6 +834,7 @@ func (w *WebRTCReceiver) forwardRTP(layer int32, buff *buffer.Buffer) { "latency", latency, "writeCount", writeCount, "queuingLatency", dequeuedAt-pkt.Arrival, + "isOutOfOrder", pkt.IsOutOfOrder, ) } }