diff --git a/ext/soup/gstsouphttpsrc.c b/ext/soup/gstsouphttpsrc.c index 0a3b4c1e73..58210e4c50 100644 --- a/ext/soup/gstsouphttpsrc.c +++ b/ext/soup/gstsouphttpsrc.c @@ -103,11 +103,13 @@ enum PROP_PROXY_ID, PROP_PROXY_PW, PROP_COOKIES, + PROP_IRADIO_MODE, PROP_TIMEOUT, PROP_EXTRA_HEADERS }; #define DEFAULT_USER_AGENT "GStreamer souphttpsrc " +#define DEFAULT_IRADIO_MODE TRUE static void gst_soup_http_src_uri_handler_init (gpointer g_iface, gpointer iface_data); @@ -234,6 +236,11 @@ gst_soup_http_src_class_init (GstSoupHTTPSrcClass * klass) g_param_spec_boxed ("extra-headers", "Extra Headers", "Extra headers to append to the HTTP request", GST_TYPE_STRUCTURE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_IRADIO_MODE, + g_param_spec_boolean ("iradio-mode", "iradio-mode", + "Enable internet radio mode (ask server to send shoutcast/icecast " + "metadata interleaved with the actual stream data)", + DEFAULT_IRADIO_MODE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&srctemplate)); @@ -293,6 +300,7 @@ gst_soup_http_src_init (GstSoupHTTPSrc * src) src->proxy_id = NULL; src->proxy_pw = NULL; src->cookies = NULL; + src->iradio_mode = DEFAULT_IRADIO_MODE; src->loop = NULL; src->context = NULL; src->session = NULL; @@ -356,6 +364,9 @@ gst_soup_http_src_set_property (GObject * object, guint prop_id, g_free (src->user_agent); src->user_agent = g_value_dup_string (value); break; + case PROP_IRADIO_MODE: + src->iradio_mode = g_value_get_boolean (value); + break; case PROP_AUTOMATIC_REDIRECT: src->automatic_redirect = g_value_get_boolean (value); break; @@ -454,6 +465,9 @@ gst_soup_http_src_get_property (GObject * object, guint prop_id, case PROP_IS_LIVE: g_value_set_boolean (value, gst_base_src_is_live (GST_BASE_SRC (src))); break; + case PROP_IRADIO_MODE: + g_value_set_boolean (value, src->iradio_mode); + break; case PROP_USER_ID: g_value_set_string (value, src->user_id); break; @@ -1079,8 +1093,10 @@ gst_soup_http_src_build_message (GstSoupHTTPSrc * src) src->session_io_status = GST_SOUP_HTTP_SRC_SESSION_IO_STATUS_IDLE; soup_message_headers_append (src->msg->request_headers, "Connection", "close"); - soup_message_headers_append (src->msg->request_headers, "icy-metadata", "1"); - + if (src->iradio_mode) { + soup_message_headers_append (src->msg->request_headers, "icy-metadata", + "1"); + } if (src->cookies) { gchar **cookie; diff --git a/ext/soup/gstsouphttpsrc.h b/ext/soup/gstsouphttpsrc.h index 186c6d0679..491b69d471 100644 --- a/ext/soup/gstsouphttpsrc.h +++ b/ext/soup/gstsouphttpsrc.h @@ -77,6 +77,7 @@ struct _GstSoupHTTPSrc { guint64 request_position; /* Seek to this position. */ /* Shoutcast/icecast metadata extraction handling. */ + gboolean iradio_mode; GstCaps *src_caps; gchar *iradio_name; gchar *iradio_genre;