rtpsession: feedback rtcp queue grows indefinitely until session end
Submitted by Jason Litzinger
In short, when an rtcp feedback packet is received, it is queued based on the value of rtcp_feedback_retention_window, which defaults to 2 seconds. The queue is pruned periodically in rtp_source_timeout() according to:
while ((pkt = g_queue_peek_tail (src->retained_feedback)) &&
GST_BUFFER_TIMESTAMP (pkt) < feedback_retention_window)
gst_buffer_unref (g_queue_pop_tail (src->retained_feedback));
The problem is that the buffer timestamp, set when queued, comes from the packet info's running time field:
rtp_source_retain_rtcp_packet (src, packet, pinfo->running_time)
And is initialized in rtp_session_process_rtcp() with -1:
update_packet_info (sess, &pinfo, FALSE, FALSE, FALSE, buffer, current_time,
In a setup with a high quantity of NACKs, this results in a queue of significant size.
It seems like pinfo->current_time might be a better field to use for the buffer timestamp, but that's speculation on my part.