View Source Membrane.RTCP.TransportFeedbackPacket.NACK (Membrane RTP plugin v0.25.0)

Generic Negative Acknowledgment packet that informs about lost RTP packet(s)

Quoting RFC4585: The Generic NACK is used to indicate the loss of one or more RTP packets. The lost packet(s) are identified by the means of a packet identifier and a bit mask.

The Feedback Control Information (FCI) field has the following Syntax (Figure 4):

  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |            PID                |             BLP               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

             Figure 4: Syntax for the Generic NACK message

Packet ID (PID): 16 bits
   The PID field is used to specify a lost packet.  The PID field
   refers to the RTP sequence number of the lost packet.


bitmask of following lost packets (BLP): 16 bits
   The BLP allows for reporting losses of any of the 16 RTP packets
   immediately following the RTP packet indicated by the PID.  The
   BLP's definition is identical to that given in [6].  Denoting the
   BLP's least significant bit as bit 1, and its most significant bit
   as bit 16, then bit i of the bit mask is set to 1 if the receiver
   has not received RTP packet number (PID+i) (modulo 2^16) and
   indicates this packet is lost; bit i is set to 0 otherwise.  Note
   that the sender MUST NOT assume that a receiver has received a
   packet because its bit mask was set to 0.  For example, the least
   significant bit of the BLP would be set to 1 if the packet
   corresponding to the PID and the following packet have been lost.
   However, the sender cannot infer that packets PID+2 through PID+16
   have been received simply because bits 2 through 15 of the BLP are
   0; all the sender knows is that the receiver has not reported them
   as lost at this time.

Implementation based on https://datatracker.ietf.org/doc/html/rfc4585#section-6.2.1 and https://datatracker.ietf.org/doc/html/rfc2032#section-5.2.2