mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-04 17:52:29 +00:00
media: set multicast sink parameters
Disable loop and automatic multicast join on the udpsink elements. Add some more debug info. Reset some state variables in the right place. Use the right port numbers for multicast.
This commit is contained in:
parent
63addbc278
commit
53f8350b36
1 changed files with 57 additions and 40 deletions
|
@ -107,8 +107,6 @@ static void
|
||||||
gst_rtsp_media_init (GstRTSPMedia * media)
|
gst_rtsp_media_init (GstRTSPMedia * media)
|
||||||
{
|
{
|
||||||
media->streams = g_array_new (FALSE, TRUE, sizeof (GstRTSPMediaStream *));
|
media->streams = g_array_new (FALSE, TRUE, sizeof (GstRTSPMediaStream *));
|
||||||
media->is_live = FALSE;
|
|
||||||
media->buffering = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -647,6 +645,11 @@ again:
|
||||||
g_object_set (G_OBJECT (udpsink1), "sync", FALSE, NULL);
|
g_object_set (G_OBJECT (udpsink1), "sync", FALSE, NULL);
|
||||||
g_object_set (G_OBJECT (udpsink1), "async", FALSE, NULL);
|
g_object_set (G_OBJECT (udpsink1), "async", FALSE, NULL);
|
||||||
|
|
||||||
|
g_object_set (G_OBJECT (udpsink0), "auto-multicast", FALSE, NULL);
|
||||||
|
g_object_set (G_OBJECT (udpsink0), "loop", FALSE, NULL);
|
||||||
|
g_object_set (G_OBJECT (udpsink1), "auto-multicast", FALSE, NULL);
|
||||||
|
g_object_set (G_OBJECT (udpsink1), "loop", FALSE, NULL);
|
||||||
|
|
||||||
/* we keep these elements, we configure all in configure_transport when the
|
/* we keep these elements, we configure all in configure_transport when the
|
||||||
* server told us to really use the UDP ports. */
|
* server told us to really use the UDP ports. */
|
||||||
stream->udpsrc[0] = udpsrc0;
|
stream->udpsrc[0] = udpsrc0;
|
||||||
|
@ -1273,6 +1276,10 @@ gst_rtsp_media_prepare (GstRTSPMedia *media)
|
||||||
|
|
||||||
GST_INFO ("preparing media %p", media);
|
GST_INFO ("preparing media %p", media);
|
||||||
|
|
||||||
|
/* reset some variables */
|
||||||
|
media->is_live = FALSE;
|
||||||
|
media->buffering = FALSE;
|
||||||
|
|
||||||
bus = gst_pipeline_get_bus (GST_PIPELINE_CAST (media->pipeline));
|
bus = gst_pipeline_get_bus (GST_PIPELINE_CAST (media->pipeline));
|
||||||
|
|
||||||
/* add the pipeline bus to our custom mainloop */
|
/* add the pipeline bus to our custom mainloop */
|
||||||
|
@ -1306,22 +1313,27 @@ gst_rtsp_media_prepare (GstRTSPMedia *media)
|
||||||
g_signal_connect (elem, "pad-added", (GCallback) pad_added_cb, media);
|
g_signal_connect (elem, "pad-added", (GCallback) pad_added_cb, media);
|
||||||
g_signal_connect (elem, "no-more-pads", (GCallback) no_more_pads_cb, media);
|
g_signal_connect (elem, "no-more-pads", (GCallback) no_more_pads_cb, media);
|
||||||
|
|
||||||
|
/* we add a fakesink here in order to make the state change async. We remove
|
||||||
|
* the fakesink again in the no-more-pads callback. */
|
||||||
media->fakesink = gst_element_factory_make ("fakesink", "fakesink");
|
media->fakesink = gst_element_factory_make ("fakesink", "fakesink");
|
||||||
gst_bin_add (GST_BIN (media->pipeline), media->fakesink);
|
gst_bin_add (GST_BIN (media->pipeline), media->fakesink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GST_INFO ("setting pipeline to PAUSED for media %p", media);
|
||||||
/* first go to PAUSED */
|
/* first go to PAUSED */
|
||||||
ret = gst_element_set_state (media->pipeline, GST_STATE_PAUSED);
|
ret = gst_element_set_state (media->pipeline, GST_STATE_PAUSED);
|
||||||
media->target_state = GST_STATE_PAUSED;
|
media->target_state = GST_STATE_PAUSED;
|
||||||
|
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
case GST_STATE_CHANGE_SUCCESS:
|
case GST_STATE_CHANGE_SUCCESS:
|
||||||
|
GST_INFO ("SUCCESS state change for media %p", media);
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_ASYNC:
|
case GST_STATE_CHANGE_ASYNC:
|
||||||
|
GST_INFO ("ASYNC state change for media %p", media);
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_NO_PREROLL:
|
case GST_STATE_CHANGE_NO_PREROLL:
|
||||||
/* we need to go to PLAYING */
|
/* we need to go to PLAYING */
|
||||||
GST_INFO ("live media %p", media);
|
GST_INFO ("NO_PREROLL state change: live media %p", media);
|
||||||
media->is_live = TRUE;
|
media->is_live = TRUE;
|
||||||
ret = gst_element_set_state (media->pipeline, GST_STATE_PLAYING);
|
ret = gst_element_set_state (media->pipeline, GST_STATE_PLAYING);
|
||||||
if (ret == GST_STATE_CHANGE_FAILURE)
|
if (ret == GST_STATE_CHANGE_FAILURE)
|
||||||
|
@ -1483,8 +1495,13 @@ gst_rtsp_media_set_state (GstRTSPMedia *media, GstState state, GArray *transport
|
||||||
gint min, max;
|
gint min, max;
|
||||||
|
|
||||||
dest = trans->destination;
|
dest = trans->destination;
|
||||||
|
if (trans->lower_transport == GST_RTSP_LOWER_TRANS_UDP_MCAST) {
|
||||||
|
min = trans->port.min;
|
||||||
|
max = trans->port.max;
|
||||||
|
} else {
|
||||||
min = trans->client_port.min;
|
min = trans->client_port.min;
|
||||||
max = trans->client_port.max;
|
max = trans->client_port.max;
|
||||||
|
}
|
||||||
|
|
||||||
if (add && !tr->active) {
|
if (add && !tr->active) {
|
||||||
GST_INFO ("adding %s:%d-%d", dest, min, max);
|
GST_INFO ("adding %s:%d-%d", dest, min, max);
|
||||||
|
|
Loading…
Reference in a new issue