return result;
}
+
+/**
+ * gst_rtsp_client_set_watch_flushing:
+ * @client: a #GstRTSPClient
+ * @val: a boolean value
+ *
+ * sets watch flushing to @val on watch to accet/ignore new messages.
+ */
+void
+gst_rtsp_client_set_watch_flushing (GstRTSPClient * client, gboolean val)
+{
+ GstRTSPClientPrivate *priv = NULL;
+ g_return_if_fail (GST_IS_RTSP_CLIENT (client));
+
+ priv = GST_RTSP_CLIENT_GET_PRIVATE (client);
+
+ /* make sure we unblock/block the backlog and accept/don't accept new messages on the watch */
+ if (priv->watch != NULL)
+ {
+ GST_INFO("Set watch flushing as %d", val);
+ gst_rtsp_watch_set_flushing (priv->watch, val);
+ }
+}
GstRTSPResult gst_rtsp_client_send_message (GstRTSPClient * client,
GstRTSPSession *session,
GstRTSPMessage *message);
+void gst_rtsp_client_set_watch_flushing (GstRTSPClient * client, gboolean val);
/**
* GstRTSPClientSessionFilterFunc:
* @client: a #GstRTSPClient object
GST_TYPE_RTSP_CLIENT);
klass->create_client = default_create_client;
+ klass->create_socket = gst_rtsp_server_create_socket;
GST_DEBUG_CATEGORY_INIT (rtsp_server_debug, "rtspserver", 0, "GstRTSPServer");
}
GCancellable * cancellable, GError ** error)
{
GstRTSPServerPrivate *priv;
- GSocket *socket, *old;
+ GstRTSPServerClass *klass;
+ GSocket *socket = NULL, *old;
GSource *source;
g_return_val_if_fail (GST_IS_RTSP_SERVER (server), NULL);
priv = server->priv;
+ klass = GST_RTSP_SERVER_GET_CLASS (server);
+
+ if (klass->create_socket)
+ socket = klass->create_socket (server, NULL, error);
- socket = gst_rtsp_server_create_socket (server, NULL, error);
if (socket == NULL)
goto no_socket;
GObjectClass parent_class;
GstRTSPClient * (*create_client) (GstRTSPServer *server);
+ GSocket * (*create_socket) (GstRTSPServer * server, GCancellable * cancellable, GError ** error);
/* signals */
void (*client_connected) (GstRTSPServer *server, GstRTSPClient *client);
{
SIGNAL_NEW_RTP_ENCODER,
SIGNAL_NEW_RTCP_ENCODER,
+ SIGNAL_RTCP_STATS,
SIGNAL_LAST
};
G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic,
G_TYPE_NONE, 1, GST_TYPE_ELEMENT);
+ gst_rtsp_stream_signals[SIGNAL_RTCP_STATS] =
+ g_signal_new ("rtcp-statistics", G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_generic,
+ G_TYPE_NONE, 1, GST_TYPE_STRUCTURE);
+
GST_DEBUG_CATEGORY_INIT (rtsp_stream_debug, "rtspstream", 0, "GstRTSPStream");
ssrc_stream_map_key = g_quark_from_static_string ("GstRTSPServer.stream");
dump_structure (stats);
+ g_signal_emit (stream, gst_rtsp_stream_signals[SIGNAL_RTCP_STATS], 0, stats);
+
rtcp_from = gst_structure_get_string (stats, "rtcp-from");
if ((trans = find_transport (stream, rtcp_from))) {
GST_INFO ("%p: found transport %p for source %p", stream, trans,
GstStructure *stats;
g_object_get (source, "stats", &stats, NULL);
if (stats) {
+ g_signal_emit (stream, gst_rtsp_stream_signals[SIGNAL_RTCP_STATS], 0, stats);
+
dump_structure (stats);
gst_structure_free (stats);
}