3.2.5.10 Receiving an RTCP Packet

The server MUST verify that the RTCP packet contains a generic NACK message adhering to the syntax as specified in section 2.2.4.

The server MUST ignore any RTCP packet that does not contain a generic NACK message or an SDES message.

The server MUST verify that the value of the ssrc parameter on the CNAME field in the SDES message is identical to the numerical value of the v-ssrc, which is the ssrc field that the server provided in the Transport (section 2.2.6.11) header in response to the SelectStream request for the retransmission stream.

The server can use the value of the ssrc parameter to find the appropriate RTSP session state, but this depends on how the server chose the value for the ssrc parameter from the Transport header in the SelectStream response. This is implementation-specific depending on the server and the system involved.

If the syntax of the CNAME field does not match what is expected by the server, or if the value of the ssrc parameter in the CNAME field does not match the value of the v-ssrc, then the server MUST ignore the RTCP packet.

For each generic NACK message that is included in the RTCP packet, the server SHOULD search the RTP-Resend-Queue variable for RTP packets with the same value for the Sequence Number field that the client specified in the generic NACK message.

For each received RTCP packet, the server SHOULD search the RTP-Resend-Queue variable for no more than the first 128 RTP packets specified in generic NACK messages contained in that RTCP packet.

If a matching RTP packet is found, the server SHOULD retransmit a copy of that RTP packet. The RTP payload format for retransmitted RTP packets MUST adhere to the syntax specified in section 2.2.3.1.

Retransmitted RTP packets MUST be sent to v-port.

After this, the server MUST wait for a request to be received.

If the value of the State variable is READY, then any one or more of the following requests are possible: SelectStream, Play, KeepAlive, SendEvent, or Teardown request.

If the value of the State variable is PLAYING, then any one or more of the following requests are possible: SelectStream, Pause, KeepAlive, SendEvent, or Teardown request. The server MUST continue transmitting RTP packets while in the PLAYING state and MUST be prepared to receive RTCP packets.

How to process a SelectStream request is specified in section 3.2.5.6.

How to process a Play request is specified in section 3.2.5.8.

How to process a Pause request is specified in section 3.2.5.11.

How to process a KeepAlive request is specified in section 3.2.5.15.

How to process a SendEvent request is specified in section 3.2.5.16.

How to process a Teardown request is specified in section 3.2.5.17.

How to process RTCP packets is specified in section 3.2.5.10.