gst_element_set_state (media->pipeline, GST_STATE_NULL);
- if (media->media)
- g_object_unref (media->media);
+ if (media->factory)
+ g_object_unref (media->factory);
for (walk = media->streams; walk; walk = g_list_next (walk)) {
GstRTSPSessionStream *stream = (GstRTSPSessionStream *) walk->data;
/**
* gst_rtsp_session_get_media:
* @sess: a #GstRTSPSession
- * @media: a #GstRTSPSessionMedia
+ * @location: the url for the media
+ * @factory: a #GstRTSPMediaFactory
*
- * Get or create the session information for @media.
+ * Get or create the session information for @factory.
*
- * Returns: the configuration for @media in @sess.
+ * Returns: the configuration for @factory in @sess.
*/
GstRTSPSessionMedia *
-gst_rtsp_session_get_media (GstRTSPSession *sess, GstRTSPMedia *media)
+gst_rtsp_session_get_media (GstRTSPSession *sess, const gchar *location, GstRTSPMediaFactory *factory)
{
GstRTSPSessionMedia *result;
GList *walk;
for (walk = sess->medias; walk; walk = g_list_next (walk)) {
result = (GstRTSPSessionMedia *) walk->data;
- if (result->media == media)
+ if (result->factory == factory)
break;
result = NULL;
}
if (result == NULL) {
result = g_new0 (GstRTSPSessionMedia, 1);
- result->media = media;
+ result->factory = factory;
result->pipeline = gst_pipeline_new ("pipeline");
- /* prepare media into the pipeline */
- if (!gst_rtsp_media_prepare (media, GST_BIN (result->pipeline)))
+ /* construct media and add to the pipeline */
+ result->mediabin = gst_rtsp_media_factory_construct (factory, location);
+ if (result->mediabin == NULL)
goto no_media;
+
+ gst_bin_add (GST_BIN_CAST (result->pipeline), result->mediabin->element);
result->rtpbin = gst_element_factory_make ("gstrtpbin", "rtpbin");
}
/**
- * gst_rtsp_session_get_stream:
+ * gst_rtsp_session_media_get_stream:
* @media: a #GstRTSPSessionMedia
* @idx: the stream index
*
* is unreffed.
*/
GstRTSPSessionStream *
-gst_rtsp_session_get_stream (GstRTSPSessionMedia *media, guint idx)
+gst_rtsp_session_media_get_stream (GstRTSPSessionMedia *media, guint idx)
{
GstRTSPSessionStream *result;
GList *walk;
result = g_new0 (GstRTSPSessionStream, 1);
result->idx = idx;
result->media = media;
- result->media_stream = gst_rtsp_media_get_stream (media->media, idx);
+ result->media_stream = gst_rtsp_media_bin_get_stream (media->mediabin, idx);
media->streams = g_list_prepend (media->streams, result);
}