-
Notifications
You must be signed in to change notification settings - Fork 88
Description
Your environment.
- Version: v0.1.44
- Browser: Chrome
What did you do?
Set up a WebRTC pipeline in the following topology :
Client A (browser sender) → pion server → Client B (browser receiver)
- Client A sends video to Client B via a pion server.
- Client B sends a NACK for a missing packet.
- The NACK Responder Interceptor correctly processes the NACK and attempts to retransmit (RTX) the buffered packet.
- The sender-side interceptor chain also has the GCC (Google Congestion Control) interceptor enabled, configured with
NoOpPacer.
What did you expect?
The RTX packet should be delivered to Client B.
What happened?
The RTX packet is silently dropped by the NoOpPacer (and other pacers) because the packet's SSRC does not match the tracked SSRC in the pacer state.
The following warning is logged by the NACK responder:
nack WARNING: 2026/03/03 14:58:20 failed resending nacked packet: unknown ssrc: 1913968682
The NACK Responder correctly processes the NACK and attempts retransmission, but the CC layer blocks the write. The receiver never gets the retransmitted packet.
Root Cause
rejects any RTP packet whose SSRC was not originally registered with the pacer. RTX retransmissions use a separate SSRC (the RTX SSRC, negotiated via apt in SDP), which is never registered with the GCC pacer, causing every retransmitted packet to be rejected.
The same root cause likely affects all other pacer implementations in pkg/gcc/.