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;
-
- pool = gst_rtsp_media_get_address_pool (state->media);
- if (pool == NULL)
- goto no_pool;
+ GstRTSPAddress *addr;
- 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;
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;
}
}
GstRTSPSessionMedia *sessmedia;
GstRTSPMedia *media;
GstRTSPStream *stream;
- GstRTSPAddress *addr;
uri = state->uri;
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,
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)
* @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.
*
*/
GstRTSPStreamTransport *
gst_rtsp_session_media_set_transport (GstRTSPSessionMedia * media,
- GstRTSPStream * stream, GstRTSPTransport * tr, GstRTSPAddress * addr)
+ GstRTSPStream * stream, GstRTSPTransport * tr)
{
GstRTSPStreamTransport *result;
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);
}
/* 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);
if (trans->transport)
gst_rtsp_transport_free (trans->transport);
- if (trans->addr)
- gst_rtsp_address_free (trans->addr);
#if 0
if (trans->rtpsource)
* 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.
* 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;
trans = g_object_new (GST_TYPE_RTSP_STREAM_TRANSPORT, NULL);
trans->stream = stream;
trans->transport = tr;
- trans->addr = addr;
return 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);
if (trans->transport)
gst_rtsp_transport_free (trans->transport);
trans->transport = tr;
- if (trans->addr)
- gst_rtsp_address_free (trans->addr);
- trans->addr = addr;
}
/**
gboolean timeout;
GstRTSPTransport *transport;
- GstRTSPAddress *addr;
GObject *rtpsource;
};
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,