From 366cadcd96b8b09c7212e27693a25f3a88e6c8be Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Sun, 19 Jul 2026 20:53:28 +0530 Subject: [PATCH] Fix padding bit in forwarded packet. (#4690) Addresses https://github.com/livekit/livekit/issues/4689 We were probably missing a couple of bits with this 1. Not affected for regular traffic like from browsers as it does not add padding, but special clients were affected. 2. Probe packets were probably using wrong last byte as pion/rtp would have overwrriten with 0 because the header.PaddingSize for the newer versions were not set. That could have affected bandwidth estimation catch up. --- pkg/sfu/downtrack.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/sfu/downtrack.go b/pkg/sfu/downtrack.go index b1a516799..7a13ae464 100644 --- a/pkg/sfu/downtrack.go +++ b/pkg/sfu/downtrack.go @@ -1116,7 +1116,7 @@ func (d *DownTrack) WriteRTP(extPkt *buffer.ExtPacket, layer int32) int32 { hdr := RTPHeaderFactory.Get().(*rtp.Header) *hdr = rtp.Header{ Version: extPkt.Packet.Version, - Padding: extPkt.Packet.Padding, + Padding: false, Marker: tp.marker, PayloadType: d.getTranslatedPayloadType(extPkt.Packet.PayloadType), SequenceNumber: uint16(tp.rtp.extSequenceNumber), @@ -1307,6 +1307,7 @@ func (d *DownTrack) WritePaddingRTP(bytesToSend int, paddingOnMute bool, forceMa *hdr = rtp.Header{ Version: 2, Padding: true, + PaddingSize: byte(RTPPaddingMaxPayloadSize), Marker: false, PayloadType: uint8(d.payloadType.Load()), SequenceNumber: uint16(snts[i].extSequenceNumber), @@ -2185,7 +2186,7 @@ func (d *DownTrack) retransmitPacket(epm *extPacketMeta, sourcePkt []byte, isPro hdr := RTPHeaderFactory.Get().(*rtp.Header) *hdr = rtp.Header{ Version: pkt.Header.Version, - Padding: pkt.Header.Padding, + Padding: false, Marker: epm.marker, PayloadType: d.getTranslatedPayloadType(pkt.Header.PayloadType), SequenceNumber: epm.targetSeqNo, @@ -2375,6 +2376,7 @@ func (d *DownTrack) WriteProbePackets(bytesToSend int, usePadding bool) int { *hdr = rtp.Header{ Version: 2, Padding: true, + PaddingSize: byte(RTPPaddingMaxPayloadSize), Marker: false, PayloadType: rtxPT, SequenceNumber: uint16(rtxExtSequenceNumber),