if (gst_rtp_session_request_remote_key_unit (rtpsession, ssrc, pt,
all_headers, count))
forward = FALSE;
+ } else if (gst_structure_has_name (s, "GstRTPRetransmissionRequest")) {
+ GstClockTime running_time;
+ guint seqnum, delay, deadline;
+
+ if (!gst_structure_get_clock_time (s, "running-time", &running_time))
+ running_time = -1;
+ if (!gst_structure_get_uint (s, "ssrc", &ssrc))
+ 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, "deadline", &deadline))
+ deadline = -1;
+
+ if (rtp_session_request_nack (rtpsession->priv->session, ssrc, seqnum,
+ (deadline - delay) * GST_MSECOND))
+ forward = FALSE;
}
break;
default:
static void rtp_session_send_rtcp (RTPSession * sess, GstClockTime max_delay);
-
static guint rtp_session_signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE (RTPSession, rtp_session, G_TYPE_OBJECT);
return TRUE;
}
+
+gboolean
+rtp_session_request_nack (RTPSession * sess, guint32 ssrc, guint16 seqnum,
+ GstClockTime max_delay)
+{
+ RTPSource *source = find_source (sess, ssrc);
+
+ if (source == NULL)
+ return FALSE;
+
+ GST_DEBUG ("request NACK for %08x, #%u", ssrc, seqnum);
+
+ rtp_session_send_rtcp (sess, max_delay);
+
+ return TRUE;
+}
guint32 ssrc,
gboolean fir,
gint count);
+gboolean rtp_session_request_nack (RTPSession * sess,
+ guint32 ssrc,
+ guint16 seqnum,
+ GstClockTime max_delay);
+
#endif /* __RTP_SESSION_H__ */