query = gst_query_new_uri ();
query_res = gst_pad_peer_query (pad, query);
if (query_res) {
- gst_query_parse_uri (query, &demux->client->mpd_uri);
- GST_DEBUG_OBJECT (demux, "Fetched MPD file at URI: %s",
- demux->client->mpd_uri);
+ gchar *uri, *redirect_uri;
+ gboolean permanent;
+
+ gst_query_parse_uri (query, &uri);
+ gst_query_parse_uri_redirection (query, &redirect_uri);
+ gst_query_parse_uri_redirection_permanent (query, &permanent);
+
+ if (permanent && redirect_uri) {
+ demux->client->mpd_uri = redirect_uri;
+ demux->client->mpd_base_uri = NULL;
+ g_free (uri);
+ } else {
+ demux->client->mpd_uri = uri;
+ demux->client->mpd_base_uri = redirect_uri;
+ }
+
+ GST_DEBUG_OBJECT (demux, "Fetched MPD file at URI: %s (base: %s)",
+ demux->client->mpd_uri, GST_STR_NULL (demux->client->mpd_base_uri));
} else {
GST_WARNING_OBJECT (demux, "MPD URI query failed.");
}
GstMapInfo mapinfo;
new_client = gst_mpd_client_new ();
- new_client->mpd_uri = g_strdup (demux->client->mpd_uri);
+
+ if (download->redirect_permanent && download->redirect_uri) {
+ new_client->mpd_uri = g_strdup (download->redirect_uri);
+ new_client->mpd_base_uri = NULL;
+ } else {
+ new_client->mpd_uri = g_strdup (download->uri);
+ new_client->mpd_base_uri = g_strdup (download->redirect_uri);
+ }
gst_buffer_map (buffer, &mapinfo, GST_MAP_READ);
{
GstStreamPeriod *stream_period;
GstBaseURL *baseURL;
+ gchar *mpd_uri;
GList *list;
static gchar *baseURL_array[5];
static gchar empty[] = "";
ret = g_strjoinv (NULL, baseURL_array);
/* get base URI from MPD file URI, if the "http" scheme is missing */
- if (client->mpd_uri != NULL && strncmp (ret, "http://", 7) != 0) {
+ mpd_uri = client->mpd_base_uri ? client->mpd_base_uri : client->mpd_uri;
+ if (mpd_uri != NULL && strncmp (ret, "http://", 7) != 0) {
gchar *last_sep, *tmp1, *tmp2;
if (ret[0] == '?') {
*query = NULL;
}
- last_sep = strrchr (client->mpd_uri, '/');
+ last_sep = strrchr (mpd_uri, '/');
if (last_sep) {
- tmp1 = g_strndup (client->mpd_uri, last_sep - client->mpd_uri + 1);
+ tmp1 = g_strndup (mpd_uri, last_sep - mpd_uri + 1);
if (ret) {
tmp2 = ret;
ret = g_strconcat (tmp1, tmp2, NULL);
g_mutex_clear (&client->lock);
- if (client->mpd_uri) {
- g_free (client->mpd_uri);
- client->mpd_uri = NULL;
- }
+ g_free (client->mpd_uri);
+ client->mpd_uri = NULL;
+ g_free (client->mpd_base_uri);
+ client->mpd_base_uri = NULL;
g_free (client);
}