GST_RTSP_AUTH_CHECK_MEDIA_FACTORY_CONSTRUCT
GST_RTSP_AUTH_CHECK_TRANSPORT_CLIENT_SETTINGS
-<SUBSECTION AuthRoles>
-GST_RTSP_MEDIA_FACTORY_ROLE
+<SUBSECTION AuthTokens>
+GST_RTSP_TOKEN_MEDIA_FACTORY_ROLE
+GST_RTSP_TOKEN_TRANSPORT_CLIENT_SETTINGS
<SUBSECTION AuthPermissions>
-GST_RTSP_MEDIA_FACTORY_PERM_ACCESS
-GST_RTSP_MEDIA_FACTORY_PERM_CONSTRUCT
-GST_RTSP_TRANSPORT_PERM_CLIENT_SETTINGS
+GST_RTSP_PERM_MEDIA_FACTORY_ACCESS
+GST_RTSP_PERM_MEDIA_FACTORY_CONSTRUCT
<SUBSECTION Standard>
GST_RTSP_AUTH_CAST
GST_RTSP_AUTH_CLASS_CAST
<SECTION>
<FILE>rtsp-media</FILE>
<TITLE>GstRTSPMedia</TITLE>
-GstRTSPMediaStatus
-
GstRTSPMedia
GstRTSPMediaClass
gst_rtsp_media_new
gst_rtsp_media_get_element
gst_rtsp_media_take_pipeline
-gst_rtsp_media_get_status
gst_rtsp_media_set_permissions
gst_rtsp_media_get_permissions
gst_rtsp_media_set_buffer_size
gst_rtsp_media_get_buffer_size
-gst_rtsp_media_use_time_provider
-gst_rtsp_media_is_time_provider
-gst_rtsp_media_get_time_provider
-
+<SUBSECTION MediaPrepare>
gst_rtsp_media_prepare
gst_rtsp_media_unprepare
+GstRTSPMediaStatus
+gst_rtsp_media_get_status
+<SUBSECTION MediaStreams>
gst_rtsp_media_collect_streams
gst_rtsp_media_create_stream
-
-gst_rtsp_media_get_clock
-gst_rtsp_media_get_base_time
gst_rtsp_media_n_streams
gst_rtsp_media_get_stream
gst_rtsp_media_find_stream
+<SUBSECTION MediaState>
gst_rtsp_media_seek
gst_rtsp_media_get_range_string
gst_rtsp_media_set_state
+
+<SUBSECTION MediaClocks>
+gst_rtsp_media_get_clock
+gst_rtsp_media_get_base_time
+gst_rtsp_media_use_time_provider
+gst_rtsp_media_is_time_provider
+gst_rtsp_media_get_time_provider
<SUBSECTION Standard>
GST_RTSP_MEDIA_CAST
GST_RTSP_MEDIA_CLASS_CAST
GstRTSPKeepAliveFunc
gst_rtsp_stream_transport_set_keepalive
+gst_rtsp_stream_transport_keep_alive
gst_rtsp_stream_transport_set_active
gst_rtsp_stream_transport_send_rtcp
gst_rtsp_stream_transport_send_rtp
-gst_rtsp_stream_transport_keep_alive
<SUBSECTION Standard>
GST_RTSP_STREAM_TRANSPORT_CAST
GST_RTSP_STREAM_TRANSPORT_CLASS_CAST
* @short_description: Authentication and authorization
* @see_also: #GstRTSPPermission, #GstRTSPtoken
*
- * Last reviewed on 2013-07-11 (1.0.0)
+ * The #GstRTSPAuth object is responsible for checking if the current user is
+ * allowed to perform requested actions. The default implementation has some
+ * reasonable checks but subclasses can implement custom security policies.
+ *
+ * A new auth object is made with gst_rtsp_auth_new(). It is usually configured
+ * on the #GstRTSPServer object.
+ *
+ * The RTSP server will call gst_rtsp_auth_check() with a string describing the
+ * check to perform. The possible checks are prefixed with
+ * #GST_RTSP_AUTH_CHECK_*. Depending on the check, the default implementation
+ * will use the current #GstRTSPToken, #GstRTSPClientState and
+ * #GstRTSPPermissions on the object to check if an operation is allowed.
+ *
+ * The default #GstRTSPAuth object has support for basic authentication. With
+ * gst_rtsp_auth_add_basic() you can add a basic authentication string together
+ * with the #GstRTSPToken that will become active when successfully
+ * authenticated.
+ *
+ * When a TLS certificate has been set with gst_rtsp_auth_set_tls_certificate(),
+ * the default auth object will require the client to connect with a TLS
+ * connection.
+ *
+ * Last reviewed on 2013-07-16 (1.0.0)
*/
#include <string.h>
return FALSE;
if (!(role = gst_rtsp_token_get_string (state->token,
- GST_RTSP_MEDIA_FACTORY_ROLE)))
+ GST_RTSP_TOKEN_MEDIA_FACTORY_ROLE)))
goto no_media_role;
if (!(perms = gst_rtsp_media_factory_get_permissions (state->factory)))
goto no_permissions;
if (g_str_equal (check, "auth.check.media.factory.access")) {
if (!gst_rtsp_permissions_is_allowed (perms, role,
- GST_RTSP_MEDIA_FACTORY_PERM_ACCESS))
+ GST_RTSP_PERM_MEDIA_FACTORY_ACCESS))
goto no_access;
} else if (g_str_equal (check, "auth.check.media.factory.construct")) {
if (!gst_rtsp_permissions_is_allowed (perms, role,
- GST_RTSP_MEDIA_FACTORY_PERM_CONSTRUCT))
+ GST_RTSP_PERM_MEDIA_FACTORY_CONSTRUCT))
goto no_construct;
}
return TRUE;
return FALSE;
return gst_rtsp_token_is_allowed (state->token,
- GST_RTSP_TRANSPORT_PERM_CLIENT_SETTINGS);
+ GST_RTSP_TOKEN_TRANSPORT_CLIENT_SETTINGS);
}
static gboolean
* GST_RTSP_AUTH_CHECK_MEDIA_FACTORY_CONSTRUCT:
*
* Check if media can be constructed from a media factory
- * The response is sent on error.
+ * A response should be sent on error.
*/
#define GST_RTSP_AUTH_CHECK_MEDIA_FACTORY_CONSTRUCT "auth.check.media.factory.construct"
/**
/* tokens */
/**
- * GST_RTSP_MEDIA_FACTORY_ROLE:
+ * GST_RTSP_TOKEN_MEDIA_FACTORY_ROLE:
*
* G_TYPE_STRING, the role to use when dealing with media factories
+ *
+ * The default #GstRTSPAuth object uses this string in the token to find the
+ * role of the media factory. It will then retrieve the #GstRTSPPermissions of
+ * the media factory and retrieve the role with the same name.
+ */
+#define GST_RTSP_TOKEN_MEDIA_FACTORY_ROLE "media.factory.role"
+/**
+ * GST_RTSP_TOKEN_TRANSPORT_CLIENT_SETTINGS:
+ *
+ * G_TYPE_BOOLEAN, %TRUE if the client can specify TTL, destination and
+ * port pair in multicast.
*/
-#define GST_RTSP_MEDIA_FACTORY_ROLE "media.factory.role"
+#define GST_RTSP_TOKEN_TRANSPORT_CLIENT_SETTINGS "transport.client-settings"
/* permissions */
/**
- * GST_RTSP_MEDIA_FACTORY_PERM_ACCESS:
+ * GST_RTSP_PERM_MEDIA_FACTORY_ACCESS:
*
* G_TYPE_BOOLEAN, %TRUE if the media can be accessed, %FALSE will
* return a 404 Not Found error when trying to access the media.
*/
-#define GST_RTSP_MEDIA_FACTORY_PERM_ACCESS "media.factory.access"
+#define GST_RTSP_PERM_MEDIA_FACTORY_ACCESS "media.factory.access"
/**
- * GST_RTSP_MEDIA_FACTORY_PERM_CONSTRUCT:
+ * GST_RTSP_PERM_MEDIA_FACTORY_CONSTRUCT:
*
* G_TYPE_BOOLEAN, %TRUE if the media can be constructed, %FALSE will
* return a 404 Not Found error when trying to access the media.
*/
-#define GST_RTSP_MEDIA_FACTORY_PERM_CONSTRUCT "media.factory.construct"
-/**
- * GST_RTSP_TRANSPORT_PERM_CLIENT_SETTINGS:
- *
- * G_TYPE_BOOLEAN, %TRUE if the client can specify TTL, destination and
- * port pair in multicast.
- */
-#define GST_RTSP_TRANSPORT_PERM_CLIENT_SETTINGS "transport.client-settings"
-
+#define GST_RTSP_PERM_MEDIA_FACTORY_CONSTRUCT "media.factory.construct"
G_END_DECLS
/**
* SECTION:rtsp-media
* @short_description: The media pipeline
- * @see_also: #GstRTSPMediaFactory, #GstRTSPStream
+ * @see_also: #GstRTSPMediaFactory, #GstRTSPStream, #GstRTSPSession,
+ * #GstRTSPSessionMedia
+ *
+ * a #GstRTSPMedia contains the complete GStreamer pipeline to manage the
+ * streaming to the clients. The actual data transfer is done by the
+ * #GstRTSPStream objects that are created and exposed by the #GstRTSPMedia.
+ *
+ * The #GstRTSPMedia is usually created from a #GstRTSPMediaFactory when the
+ * client does a DESCRIBE or SETUP of a resource.
+ *
+ * A media is created with gst_rtsp_media_new() that takes the element that will
+ * provide the streaming elements. For each of the streams, a new #GstRTSPStream
+ * object needs to be made with the gst_rtsp_media_create_stream() which takes
+ * the payloader element and the source pad that produces the RTP stream.
+ *
+ * The pipeline of the media is set to PAUSED with gst_rtsp_media_prepare(). The
+ * prepare method will add rtpbin and sinks and sources to send and receive RTP
+ * and RTCP packets from the clients. Each stream srcpad is connected to an
+ * input into the internal rtpbin.
+ *
+ * It is also possible to dynamically create #GstRTSPStream objects during the
+ * prepare phase. With gst_rtsp_media_get_status() you can check the status of
+ * the prepare phase.
+ *
+ * After the media is prepared, it is ready for streaming. It will usually be
+ * managed in a session with gst_rtsp_session_manage_media(). See
+ * #GstRTSPSession and #GstRTSPSessionMedia.
+ *
+ * The state of the media can be controlled with gst_rtsp_media_set_state ().
+ * Seeking can be done with gst_rtsp_media_seek().
+ *
+ * With gst_rtsp_media_unprepare() the pipeline is stopped and shut down. When
+ * gst_rtsp_media_set_eos_shutdown() an EOS will be sent to the pipeline to
+ * cleanly shut down.
+ *
+ * With gst_rtsp_media_set_shared(), the media can be shared between multiple
+ * clients. With gst_rtsp_media_set_reusable() you can control if the pipeline
+ * can be prepared again after an unprepare.
*
* Last reviewed on 2013-07-11 (1.0.0)
*/
* @short_description: Media managed in a session
* @see_also: #GstRTSPMedia, #GstRTSPSession
*
- * Last reviewed on 2013-07-11 (1.0.0)
+ * The #GstRTSPSessionMedia object manages a #GstRTSPMedia with a given path.
+ *
+ * With gst_rtsp_session_media_get_transport() and
+ * gst_rtsp_session_media_set_transport() the transports of a #GstRTSPStream of
+ * the managed #GstRTSPMedia can be retrieved and configured.
+ *
+ * Use gst_rtsp_session_media_set_state() to control the media state and
+ * transports.
+ *
+ * Last reviewed on 2013-07-16 (1.0.0)
*/
#include <string.h>
/**
* SECTION:rtsp-stream-transport
* @short_description: A media stream transport configuration
- * @see_also: #GstRTSPStream
+ * @see_also: #GstRTSPStream, #GstRTSPSessionMedia
*
- * Last reviewed on 2013-07-11 (1.0.0)
+ * The #GstRTSPStreamTransport configures the transport used by a
+ * #GstRTSPStream. It is usually manages by a #GstRTSPSessionMedia object.
+ *
+ * With gst_rtsp_stream_transport_set_callbacks(), callbacks can be configured
+ * to handle the RTP and RTCP packets from the stream, for example when they
+ * need to be sent over TCP.
+ *
+ * With gst_rtsp_stream_transport_set_active() the transports are added and
+ * removed from the stream.
+ *
+ * A #GstRTSPStream will call gst_rtsp_stream_transport_keep_alive() when RTCP
+ * is received from the client. It will also call
+ * gst_rtsp_stream_transport_set_timed_out() when a receiver has timed out.
+ *
+ * Last reviewed on 2013-07-16 (1.0.0)
*/
#include <string.h>
GstRTSPKeepAliveFunc keep_alive,
gpointer user_data,
GDestroyNotify notify);
+void gst_rtsp_stream_transport_keep_alive (GstRTSPStreamTransport *trans);
gboolean gst_rtsp_stream_transport_set_active (GstRTSPStreamTransport *trans,
gboolean active);
gboolean gst_rtsp_stream_transport_send_rtcp (GstRTSPStreamTransport *trans,
GstBuffer *buffer);
-void gst_rtsp_stream_transport_keep_alive (GstRTSPStreamTransport *trans);
-
G_END_DECLS
#endif /* __GST_RTSP_STREAM_TRANSPORT_H__ */
* @short_description: A media stream
* @see_also: #GstRTSPMedia
*
- * Last reviewed on 2013-07-11 (1.0.0)
+ * The #GstRTSPStream object manages the data transport for one stream. It
+ * is created from a payloader element and a source pad that produce the RTP
+ * packets for the stream.
+ *
+ * With gst_rtsp_stream_join_bin() the streaming elements are added to the bin
+ * and rtpbin. gst_rtsp_stream_leave_bin() removes the elements again.
+ *
+ * The #GstRTSPStream will use the configured addresspool, as set with
+ * gst_rtsp_stream_set_address_pool(), to allocate multicast addresses for the
+ * stream. With gst_rtsp_stream_get_multicast_address() you can get the
+ * configured address.
+ *
+ * With gst_rtsp_stream_get_server_port () you can get the port that the server
+ * will use to receive RTCP. This is the part that the clients will use to send
+ * RTCP to.
+ *
+ * With gst_rtsp_stream_add_transport() destinations can be added where the
+ * stream should be sent to. Use gst_rtsp_stream_remove_transport() to remove
+ * the destination again.
+ *
+ * Last reviewed on 2013-07-16 (1.0.0)
*/
#include <stdlib.h>
state.client = client;
state.auth = gst_rtsp_auth_new ();
state.token =
- gst_rtsp_token_new (GST_RTSP_TRANSPORT_PERM_CLIENT_SETTINGS,
- G_TYPE_BOOLEAN, TRUE, "media.factory.role", G_TYPE_STRING, "user", NULL);
+ gst_rtsp_token_new (GST_RTSP_TOKEN_TRANSPORT_CLIENT_SETTINGS,
+ G_TYPE_BOOLEAN, TRUE, GST_RTSP_TOKEN_MEDIA_FACTORY_ROLE, G_TYPE_STRING,
+ "user", NULL);
gst_rtsp_client_state_push_current (&state);
/* simple SETUP with a valid URI and multicast, but an invalid ip */
state.client = client;
state.auth = gst_rtsp_auth_new ();
state.token =
- gst_rtsp_token_new (GST_RTSP_TRANSPORT_PERM_CLIENT_SETTINGS,
- G_TYPE_BOOLEAN, TRUE, "media.factory.role", G_TYPE_STRING, "user", NULL);
+ gst_rtsp_token_new (GST_RTSP_TOKEN_TRANSPORT_CLIENT_SETTINGS,
+ G_TYPE_BOOLEAN, TRUE, GST_RTSP_TOKEN_MEDIA_FACTORY_ROLE, G_TYPE_STRING,
+ "user", NULL);
gst_rtsp_client_state_push_current (&state);
expected_transport = "RTP/AVP;multicast;destination=233.252.0.1;"