mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 11:45:25 +00:00
rtspsrc: Only enable retransmissions if there is retransmission info in the SDP
Otherwise we're going to send early RTCP and NACKs in non-feedback sessions too, which will confuse servers. https://bugzilla.gnome.org/show_bug.cgi?id=748627
This commit is contained in:
parent
ebbefbb792
commit
33693525b9
1 changed files with 25 additions and 7 deletions
|
@ -3200,6 +3200,7 @@ add_retransmission (GstRTSPSrc * src, GstRTSPTransport * transport)
|
||||||
{
|
{
|
||||||
GList *walk;
|
GList *walk;
|
||||||
guint signal_id;
|
guint signal_id;
|
||||||
|
gboolean do_retransmission = FALSE;
|
||||||
|
|
||||||
if (transport->trans != GST_RTSP_TRANS_RTP)
|
if (transport->trans != GST_RTSP_TRANS_RTP)
|
||||||
return;
|
return;
|
||||||
|
@ -3218,6 +3219,7 @@ add_retransmission (GstRTSPSrc * src, GstRTSPTransport * transport)
|
||||||
/* build the retransmission payload type map */
|
/* build the retransmission payload type map */
|
||||||
for (walk = src->streams; walk; walk = g_list_next (walk)) {
|
for (walk = src->streams; walk; walk = g_list_next (walk)) {
|
||||||
GstRTSPStream *stream = (GstRTSPStream *) walk->data;
|
GstRTSPStream *stream = (GstRTSPStream *) walk->data;
|
||||||
|
gboolean do_retransmission_stream = FALSE;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (stream->rtx_pt_map)
|
if (stream->rtx_pt_map)
|
||||||
|
@ -3241,21 +3243,37 @@ add_retransmission (GstRTSPSrc * src, GstRTSPTransport * transport)
|
||||||
if (rtx_pt != 0) {
|
if (rtx_pt != 0) {
|
||||||
gst_structure_set (stream->rtx_pt_map, stream_pt_s, G_TYPE_UINT,
|
gst_structure_set (stream->rtx_pt_map, stream_pt_s, G_TYPE_UINT,
|
||||||
rtx_pt, NULL);
|
rtx_pt, NULL);
|
||||||
|
do_retransmission_stream = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (src, "built retransmission payload map for stream "
|
if (do_retransmission_stream) {
|
||||||
"id %i: %" GST_PTR_FORMAT, stream->id, stream->rtx_pt_map);
|
GST_DEBUG_OBJECT (src, "built retransmission payload map for stream "
|
||||||
|
"id %i: %" GST_PTR_FORMAT, stream->id, stream->rtx_pt_map);
|
||||||
|
do_retransmission = TRUE;
|
||||||
|
} else {
|
||||||
|
GST_DEBUG_OBJECT (src, "no retransmission payload map for stream "
|
||||||
|
"id %i", stream->id);
|
||||||
|
gst_structure_free (stream->rtx_pt_map);
|
||||||
|
stream->rtx_pt_map = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_set (src->manager, "do-retransmission", TRUE, NULL);
|
if (do_retransmission) {
|
||||||
|
GST_DEBUG_OBJECT (src, "Enabling retransmissions");
|
||||||
|
|
||||||
/* enable RFC4588 retransmission handling by setting rtprtxreceive
|
g_object_set (src->manager, "do-retransmission", TRUE, NULL);
|
||||||
* as the "aux" element of rtpbin */
|
|
||||||
g_signal_connect (src->manager, "request-aux-receiver",
|
/* enable RFC4588 retransmission handling by setting rtprtxreceive
|
||||||
(GCallback) request_aux_receiver, src);
|
* as the "aux" element of rtpbin */
|
||||||
|
g_signal_connect (src->manager, "request-aux-receiver",
|
||||||
|
(GCallback) request_aux_receiver, src);
|
||||||
|
} else {
|
||||||
|
GST_DEBUG_OBJECT (src,
|
||||||
|
"Not enabling retransmissions as no stream had a retransmission payload map");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try to get and configure a manager */
|
/* try to get and configure a manager */
|
||||||
|
|
Loading…
Reference in a new issue