# NACK Generator logic

**URL:** <https://mediasoup.discourse.group/t/nack-generator-logic/5481>\
**Category:** mediasoup libraries\
**Created:** [September 5, 2023, 12:57pm UTC](https://mediasoup.discourse.group/t/nack-generator-logic/5481 "2023-09-05T12:57:24Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![sarumjanuch](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/sarumjanuch/32/1467_2.png) [@sarumjanuch](https://mediasoup.discourse.group/u/sarumjanuch)\
**Post date:** [September 5, 2023, 12:57pm UTC](https://mediasoup.discourse.group/t/nack-generator-logic/5481/1 "2023-09-05T12:57:24Z")

</div>

Hi guys! You have this class [https://github.com/versatica/mediasoup/blob/v3/worker/src/RTC/NackGenerator.cpp](https://github.com/versatica/mediasoup/blob/v3/worker/src/RTC/NackGenerator.cpp), It is not obvious, when mediasoup receives an RTX for such a NACK request, how it results in consumer?

1. You are storing such packets in RTX buffer and wait if someone will request NACK for it.
2. You are forwarding those packets as a regular stream.

---

<div class="post-metadata">

**Author:** ![ibc](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/ibc/32/1540_2.png) [@ibc](https://mediasoup.discourse.group/u/ibc)\
**Post date:** [September 5, 2023, 2:24pm UTC](https://mediasoup.discourse.group/t/nack-generator-logic/5481/2 "2023-09-05T14:24:50Z")

</div>

Hi Eugene!

mediasoup independently handles received RTX and sent RTX. If a RTX packet is received, the Producer side in mediasoup checks whether it’s really a lost packet and, if so, RTX decodes it and forwards it to the Router who will forward it to all its Consumers.

---

<div class="post-metadata">

**Author:** ![sarumjanuch](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/sarumjanuch/32/1467_2.png) [@sarumjanuch](https://mediasoup.discourse.group/u/sarumjanuch)\
**Post date:** [September 5, 2023, 7:13pm UTC](https://mediasoup.discourse.group/t/nack-generator-logic/5481/3 "2023-09-05T19:13:29Z")

</div>

Hi Iñaki! Thanks! Let me rephrase so you can confirm that I understood you correctly. When mediasoup send NACK via NACK Generator, RTX packets that mediasoup requested are received on RTX ssrc turns into regular packets downstream on the road to consumers, and consumers will receive them over a regular ssrc, but when consumer requests NACK packets they are transmitted over the RTX ssrc of consumer, right? If I understood correctly this implies that when consumer sends NACK, it can only receive packet from mediasoup RTX buffer, and such NACK never forwarded to producer?

---

<div class="post-metadata">

**Author:** ![ibc](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/ibc/32/1540_2.png) [@ibc](https://mediasoup.discourse.group/u/ibc)\
**Post date:** [September 5, 2023, 7:25pm UTC](https://mediasoup.discourse.group/t/nack-generator-logic/5481/4 "2023-09-05T19:25:59Z")

</div>

Yes to everything plus RTX is only used if negotiated when creating the consumer (usually it is).

---

<div class="post-metadata">

**Author:** ![sarumjanuch](https://yyz2.discourse-cdn.com/free1/user_avatar/mediasoup.discourse.group/sarumjanuch/32/1467_2.png) [@sarumjanuch](https://mediasoup.discourse.group/u/sarumjanuch)\
**Post date:** [September 5, 2023, 7:34pm UTC](https://mediasoup.discourse.group/t/nack-generator-logic/5481/5 "2023-09-05T19:34:42Z")

</div>

Thanks a lot for your time!
