gst_structure_new ("GstRTPRetransmissionRequest",
"seqnum", G_TYPE_UINT, (guint) timer->seqnum,
"running-time", G_TYPE_UINT64, timer->rtx_base,
- "delay", G_TYPE_UINT64, timer->rtx_retry,
- "frequency", G_TYPE_INT, priv->rtx_retry_timeout,
- "period", G_TYPE_INT, priv->rtx_retry_period,
+ "delay", G_TYPE_UINT, GST_TIME_AS_MSECONDS (timer->rtx_retry),
+ "frequency", G_TYPE_UINT, priv->rtx_retry_timeout,
+ "period", G_TYPE_UINT, priv->rtx_retry_period,
"deadline", G_TYPE_UINT, priv->latency_ms,
"packet-spacing", G_TYPE_UINT64, priv->packet_spacing, NULL));
forward = FALSE;
} else if (gst_structure_has_name (s, "GstRTPRetransmissionRequest")) {
GstClockTime running_time;
- guint seqnum, delay, deadline;
+ guint seqnum, delay, deadline, max_delay;
if (!gst_structure_get_clock_time (s, "running-time", &running_time))
running_time = -1;
ssrc = -1;
if (!gst_structure_get_uint (s, "seqnum", &seqnum))
seqnum = -1;
- if (!gst_structure_get_uint (s, "delay", &deadline))
- delay = -1;
+ if (!gst_structure_get_uint (s, "delay", &delay))
+ delay = 0;
if (!gst_structure_get_uint (s, "deadline", &deadline))
- deadline = -1;
+ deadline = 100;
+
+ /* remaining time to receive the packet */
+ max_delay = deadline;
+ if (max_delay > delay)
+ max_delay -= delay;
+ /* estimated RTT */
+ if (max_delay > 40)
+ max_delay -= 40;
+ else
+ max_delay = 0;
if (rtp_session_request_nack (rtpsession->priv->session, ssrc, seqnum,
- (deadline - delay) * GST_MSECOND))
+ max_delay * GST_MSECOND))
forward = FALSE;
}
break;