PROP_BACKLOG,
PROP_PORT,
PROP_POOL,
+ PROP_FACTORY,
PROP_LAST
};
g_object_class_install_property (gobject_class, PROP_POOL,
g_param_spec_object ("pool", "Pool", "The session pool to use for client session",
GST_TYPE_RTSP_SESSION_POOL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * GstRTSPServer::factory
+ *
+ * The media factory to use for this server. By default the server has no
+ * media factories and thus cannot map urls to media streams.
+ */
+ g_object_class_install_property (gobject_class, PROP_POOL,
+ g_param_spec_object ("factory", "Factory", "The media factory to use for client session",
+ GST_TYPE_RTSP_MEDIA_FACTORY, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
klass->accept_client = gst_rtsp_server_accept_client;
}
if (server->pool)
g_object_unref (server->pool);
if (pool)
- pool = g_object_ref (pool);
+ g_object_ref (pool);
server->pool = pool;
}
return result;
}
+/**
+ * gst_rtsp_server_set_media_factory:
+ * @server: a #GstRTSPServer
+ * @factory: a #GstRTSPMediaFactory
+ *
+ * configure @factory to be used as the media factory of @server.
+ */
+void
+gst_rtsp_server_set_media_factory (GstRTSPServer *server, GstRTSPMediaFactory *factory)
+{
+ GstRTSPMediaFactory *old;
+
+ g_return_if_fail (GST_IS_RTSP_SERVER (server));
+
+ old = server->factory;
+
+ if (old != factory) {
+ if (factory)
+ g_object_ref (factory);
+ server->factory = factory;
+ if (old)
+ g_object_unref (old);
+ }
+}
+
+
+/**
+ * gst_rtsp_server_get_media_factory:
+ * @server: a #GstRTSPServer
+ *
+ * Get the #GstRTSPMediaFactory used as the media factory of @server.
+ *
+ * Returns: the #GstRTSPMediaFactory of @server. g_object_unref() after
+ * usage.
+ */
+GstRTSPMediaFactory *
+gst_rtsp_server_get_media_factory (GstRTSPServer *server)
+{
+ GstRTSPMediaFactory *result;
+
+ g_return_val_if_fail (GST_IS_RTSP_SERVER (server), NULL);
+
+ if ((result = server->factory))
+ g_object_ref (result);
+
+ return result;
+}
+
static void
gst_rtsp_server_get_property (GObject *object, guint propid,
GValue *value, GParamSpec *pspec)
case PROP_POOL:
g_value_take_object (value, gst_rtsp_server_get_session_pool (server));
break;
+ case PROP_FACTORY:
+ g_value_take_object (value, gst_rtsp_server_get_media_factory (server));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, propid, pspec);
}
case PROP_POOL:
gst_rtsp_server_set_session_pool (server, g_value_get_object (value));
break;
+ case PROP_FACTORY:
+ gst_rtsp_server_set_media_factory (server, g_value_get_object (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, propid, pspec);
}
/* set the session pool that this client should use */
gst_rtsp_client_set_session_pool (client, server->pool);
+ /* set the session pool that this client should use */
+ gst_rtsp_client_set_media_factory (client, server->factory);
+
/* accept connections for that client, this function returns after accepting
* the connection and will run the remainder of the communication with the
* client asyncronously. */
#include <gst/gst.h>
#include "rtsp-session-pool.h"
+#include "rtsp-media-factory.h"
#include "rtsp-client.h"
#ifndef __GST_RTSP_SERVER_H__
/* sessions on this server */
GstRTSPSessionPool *pool;
+
+ /* media factory for this server */
+ GstRTSPMediaFactory *factory;
};
/**
GstRTSPClient * (*accept_client) (GstRTSPServer *server, GIOChannel *channel);
};
-GType gst_rtsp_server_get_type (void);
+GType gst_rtsp_server_get_type (void);
+
+GstRTSPServer * gst_rtsp_server_new (void);
-GstRTSPServer * gst_rtsp_server_new (void);
+void gst_rtsp_server_set_port (GstRTSPServer *server, gint port);
+gint gst_rtsp_server_get_port (GstRTSPServer *server);
-void gst_rtsp_server_set_port (GstRTSPServer *server, gint port);
-gint gst_rtsp_server_get_port (GstRTSPServer *server);
+void gst_rtsp_server_set_backlog (GstRTSPServer *server, gint backlog);
+gint gst_rtsp_server_get_backlog (GstRTSPServer *server);
-void gst_rtsp_server_set_backlog (GstRTSPServer *server, gint backlog);
-gint gst_rtsp_server_get_backlog (GstRTSPServer *server);
+void gst_rtsp_server_set_session_pool (GstRTSPServer *server, GstRTSPSessionPool *pool);
+GstRTSPSessionPool * gst_rtsp_server_get_session_pool (GstRTSPServer *server);
-void gst_rtsp_server_set_session_pool (GstRTSPServer *server, GstRTSPSessionPool *pool);
-GstRTSPSessionPool * gst_rtsp_server_get_session_pool (GstRTSPServer *server);
+void gst_rtsp_server_set_media_factory (GstRTSPServer *server, GstRTSPMediaFactory *factory);
+GstRTSPMediaFactory * gst_rtsp_server_get_media_factory (GstRTSPServer *server);
-gboolean gst_rtsp_server_io_func (GIOChannel *channel, GIOCondition condition,
+gboolean gst_rtsp_server_io_func (GIOChannel *channel, GIOCondition condition,
GstRTSPServer *server);
-GIOChannel * gst_rtsp_server_get_io_channel (GstRTSPServer *server);
-GSource * gst_rtsp_server_create_watch (GstRTSPServer *server);
-guint gst_rtsp_server_attach (GstRTSPServer *server,
+GIOChannel * gst_rtsp_server_get_io_channel (GstRTSPServer *server);
+GSource * gst_rtsp_server_create_watch (GstRTSPServer *server);
+guint gst_rtsp_server_attach (GstRTSPServer *server,
GMainContext *context);
G_END_DECLS