diff --git a/gst/rtsp-server/rtsp-client.c b/gst/rtsp-server/rtsp-client.c index 4a1ed67676..9bbec270c0 100644 --- a/gst/rtsp-server/rtsp-client.c +++ b/gst/rtsp-server/rtsp-client.c @@ -974,30 +974,22 @@ handle_blocksize (GstRTSPMedia * media, GstRTSPStream * stream, static gboolean configure_client_transport (GstRTSPClient * client, GstRTSPClientState * state, - GstRTSPTransport * ct, GstRTSPAddress ** addr) + GstRTSPTransport * ct) { /* we have a valid transport now, set the destination of the client. */ if (ct->lower_transport == GST_RTSP_LOWER_TRANS_UDP_MCAST) { if (ct->destination == NULL || !client->use_client_settings) { - GstRTSPAddressPool *pool; - GstRTSPAddress *ad; + GstRTSPAddress *addr; - pool = gst_rtsp_media_get_address_pool (state->media); - if (pool == NULL) - goto no_pool; - - ad = gst_rtsp_address_pool_acquire_address (pool, - GST_RTSP_ADDRESS_FLAG_EVEN_PORT, 2); - if (ad == NULL) + addr = gst_rtsp_stream_get_address (state->stream); + if (addr == NULL) goto no_address; g_free (ct->destination); - ct->destination = g_strdup (ad->address); - ct->port.min = ad->port; - ct->port.max = ad->port + 1; - ct->ttl = ad->ttl; - - *addr = ad; + ct->destination = g_strdup (addr->address); + ct->port.min = addr->port; + ct->port.max = addr->port + addr->n_ports - 1; + ct->ttl = addr->ttl; } } else { GstRTSPUrl *url; @@ -1017,14 +1009,9 @@ configure_client_transport (GstRTSPClient * client, GstRTSPClientState * state, return TRUE; /* ERRORS */ -no_pool: - { - GST_ERROR_OBJECT (client, "no address pool specified"); - return FALSE; - } no_address: { - GST_ERROR_OBJECT (client, "failed to acquire address from pool"); + GST_ERROR_OBJECT (client, "failed to acquire address for stream"); return FALSE; } } @@ -1080,7 +1067,6 @@ handle_setup_request (GstRTSPClient * client, GstRTSPClientState * state) GstRTSPSessionMedia *sessmedia; GstRTSPMedia *media; GstRTSPStream *stream; - GstRTSPAddress *addr; uri = state->uri; @@ -1169,12 +1155,11 @@ handle_setup_request (GstRTSPClient * client, GstRTSPClientState * state) goto invalid_blocksize; /* update the client transport */ - addr = NULL; - if (!configure_client_transport (client, state, ct, &addr)) + if (!configure_client_transport (client, state, ct)) goto unsupported_client_transport; /* set in the session media transport */ - trans = gst_rtsp_session_media_set_transport (sessmedia, stream, ct, addr); + trans = gst_rtsp_session_media_set_transport (sessmedia, stream, ct); /* configure keepalive for this transport */ gst_rtsp_stream_transport_set_keepalive (trans, diff --git a/gst/rtsp-server/rtsp-media.c b/gst/rtsp-server/rtsp-media.c index 3fd8d3afde..dfd89bc872 100644 --- a/gst/rtsp-server/rtsp-media.c +++ b/gst/rtsp-server/rtsp-media.c @@ -595,6 +595,8 @@ gst_rtsp_media_set_address_pool (GstRTSPMedia * media, media->pool = pool ? g_object_ref (pool) : NULL; else old = NULL; + g_ptr_array_foreach (media->streams, (GFunc) gst_rtsp_stream_set_address_pool, + pool); g_mutex_unlock (&media->lock); if (old) diff --git a/gst/rtsp-server/rtsp-session-media.c b/gst/rtsp-server/rtsp-session-media.c index 4d365f03fd..e8eda2bc98 100644 --- a/gst/rtsp-server/rtsp-session-media.c +++ b/gst/rtsp-server/rtsp-session-media.c @@ -123,7 +123,6 @@ gst_rtsp_session_media_new (const GstRTSPUrl * url, GstRTSPMedia * media) * @media: a #GstRTSPSessionMedia * @stream: a #GstRTSPStream * @tr: a #GstRTSPTransport - * @addr: (transfer full) (allow none): an optional #GstRTSPAddress * * Configure the transport for @stream to @tr in @media. * @@ -131,7 +130,7 @@ gst_rtsp_session_media_new (const GstRTSPUrl * url, GstRTSPMedia * media) */ GstRTSPStreamTransport * gst_rtsp_session_media_set_transport (GstRTSPSessionMedia * media, - GstRTSPStream * stream, GstRTSPTransport * tr, GstRTSPAddress * addr) + GstRTSPStream * stream, GstRTSPTransport * tr) { GstRTSPStreamTransport *result; @@ -142,11 +141,11 @@ gst_rtsp_session_media_set_transport (GstRTSPSessionMedia * media, g_mutex_lock (&media->lock); result = g_ptr_array_index (media->transports, stream->idx); if (result == NULL) { - result = gst_rtsp_stream_transport_new (stream, tr, addr); + result = gst_rtsp_stream_transport_new (stream, tr); g_ptr_array_index (media->transports, stream->idx) = result; g_mutex_unlock (&media->lock); } else { - gst_rtsp_stream_transport_set_transport (result, tr, addr); + gst_rtsp_stream_transport_set_transport (result, tr); g_mutex_unlock (&media->lock); } diff --git a/gst/rtsp-server/rtsp-session-media.h b/gst/rtsp-server/rtsp-session-media.h index 2ccfc0ed35..2156f303ba 100644 --- a/gst/rtsp-server/rtsp-session-media.h +++ b/gst/rtsp-server/rtsp-session-media.h @@ -78,8 +78,7 @@ gboolean gst_rtsp_session_media_set_state (GstRTSPSessionMe /* get stream transport config */ GstRTSPStreamTransport * gst_rtsp_session_media_set_transport (GstRTSPSessionMedia *media, GstRTSPStream *stream, - GstRTSPTransport *tr, - GstRTSPAddress *addr); + GstRTSPTransport *tr); GstRTSPStreamTransport * gst_rtsp_session_media_get_transport (GstRTSPSessionMedia *media, guint idx); diff --git a/gst/rtsp-server/rtsp-stream-transport.c b/gst/rtsp-server/rtsp-stream-transport.c index 5101f46679..6df8d4d8e3 100644 --- a/gst/rtsp-server/rtsp-stream-transport.c +++ b/gst/rtsp-server/rtsp-stream-transport.c @@ -70,8 +70,6 @@ gst_rtsp_stream_transport_finalize (GObject * obj) if (trans->transport) gst_rtsp_transport_free (trans->transport); - if (trans->addr) - gst_rtsp_address_free (trans->addr); #if 0 if (trans->rtpsource) @@ -85,7 +83,6 @@ gst_rtsp_stream_transport_finalize (GObject * obj) * gst_rtsp_stream_transport_new: * @stream: a #GstRTSPStream * @tr: (transfer full): a GstRTSPTransport - * @addr: (transfer full) (allow none): an optional GstRTSPAddress * * Create a new #GstRTSPStreamTransport that can be used to manage * @stream with transport @tr. @@ -93,8 +90,7 @@ gst_rtsp_stream_transport_finalize (GObject * obj) * Returns: a new #GstRTSPStreamTransport */ GstRTSPStreamTransport * -gst_rtsp_stream_transport_new (GstRTSPStream * stream, GstRTSPTransport * tr, - GstRTSPAddress * addr) +gst_rtsp_stream_transport_new (GstRTSPStream * stream, GstRTSPTransport * tr) { GstRTSPStreamTransport *trans; @@ -104,7 +100,6 @@ gst_rtsp_stream_transport_new (GstRTSPStream * stream, GstRTSPTransport * tr, trans = g_object_new (GST_TYPE_RTSP_STREAM_TRANSPORT, NULL); trans->stream = stream; trans->transport = tr; - trans->addr = addr; return trans; } @@ -159,14 +154,13 @@ gst_rtsp_stream_transport_set_keepalive (GstRTSPStreamTransport * trans, * gst_rtsp_stream_transport_set_transport: * @trans: a #GstRTSPStreamTransport * @tr: (transfer full): a client #GstRTSPTransport - * @addr: (transfer full) (allow none): a ##GstRTSPAddress * - * Set @tr and the optional @addr as the client transport. This function - * takes ownership of the passed @tr and @addr. + * Set @tr as the client transport. This function takes ownership of the + * passed @tr. */ void gst_rtsp_stream_transport_set_transport (GstRTSPStreamTransport * trans, - GstRTSPTransport * tr, GstRTSPAddress * addr) + GstRTSPTransport * tr) { g_return_if_fail (GST_IS_RTSP_STREAM_TRANSPORT (trans)); g_return_if_fail (tr != NULL); @@ -175,9 +169,6 @@ gst_rtsp_stream_transport_set_transport (GstRTSPStreamTransport * trans, if (trans->transport) gst_rtsp_transport_free (trans->transport); trans->transport = tr; - if (trans->addr) - gst_rtsp_address_free (trans->addr); - trans->addr = addr; } /** diff --git a/gst/rtsp-server/rtsp-stream-transport.h b/gst/rtsp-server/rtsp-stream-transport.h index 44a3237dfa..8839267cd1 100644 --- a/gst/rtsp-server/rtsp-stream-transport.h +++ b/gst/rtsp-server/rtsp-stream-transport.h @@ -81,7 +81,6 @@ struct _GstRTSPStreamTransport { gboolean timeout; GstRTSPTransport *transport; - GstRTSPAddress *addr; GObject *rtpsource; }; @@ -93,12 +92,10 @@ struct _GstRTSPStreamTransportClass { GType gst_rtsp_stream_transport_get_type (void); GstRTSPStreamTransport * gst_rtsp_stream_transport_new (GstRTSPStream *stream, - GstRTSPTransport *tr, - GstRTSPAddress *addr); + GstRTSPTransport *tr); void gst_rtsp_stream_transport_set_transport (GstRTSPStreamTransport *trans, - GstRTSPTransport * tr, - GstRTSPAddress *addr); + GstRTSPTransport * tr); void gst_rtsp_stream_transport_set_callbacks (GstRTSPStreamTransport *trans, GstRTSPSendFunc send_rtp,