mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-30 13:41:48 +00:00
hlsdemux: Improve parsing quoted key URIs and apply it for I-frame-based stream URI
https://bugzilla.gnome.org/show_bug.cgi?id=730830
This commit is contained in:
parent
37ffe063f6
commit
be28578942
1 changed files with 43 additions and 33 deletions
|
@ -322,6 +322,28 @@ parse_attributes (gchar ** ptr, gchar ** a, gchar ** v)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static gchar *
|
||||
unquote_string (gchar * string)
|
||||
{
|
||||
gchar *string_ret;
|
||||
|
||||
string_ret = strchr (string, '"');
|
||||
if (string_ret != NULL) {
|
||||
/* found initialization quotation mark of string */
|
||||
string = string_ret + 1;
|
||||
string_ret = strchr (string, '"');
|
||||
if (string_ret != NULL) {
|
||||
/* found finalizing quotation mark of string */
|
||||
string_ret[0] = '\0';
|
||||
} else {
|
||||
GST_WARNING
|
||||
("wrong string unqouting - cannot find finalizing quotation mark");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return string;
|
||||
}
|
||||
|
||||
static gint
|
||||
_m3u8_compare_uri (GstM3U8 * a, gchar * uri)
|
||||
{
|
||||
|
@ -507,23 +529,24 @@ gst_m3u8_update (GstM3U8 * self, gchar * data, gboolean * updated)
|
|||
gchar *name;
|
||||
gchar *uri = g_strdup (v);
|
||||
gchar *urip = uri;
|
||||
int len = strlen (uri);
|
||||
|
||||
/* handle the \"uri\" case */
|
||||
if (uri[len - 1] == '"')
|
||||
uri[len - 1] = '\0';
|
||||
if (uri[0] == '"')
|
||||
uri += 1;
|
||||
|
||||
name = g_strdup (uri);
|
||||
uri = unquote_string (uri);
|
||||
if (uri) {
|
||||
uri = uri_join (self->base_uri ? self->base_uri : self->uri, uri);
|
||||
g_free (urip);
|
||||
|
||||
uri = uri_join (self->base_uri ? self->base_uri : self->uri, uri);
|
||||
if (uri == NULL) {
|
||||
g_free (name);
|
||||
g_free (urip);
|
||||
continue;
|
||||
}
|
||||
name = g_strdup (uri);
|
||||
|
||||
gst_m3u8_set_uri (new_list, uri, NULL, name);
|
||||
} else {
|
||||
GST_WARNING
|
||||
("Cannot remove quotation marks from i-frame-stream URI");
|
||||
}
|
||||
g_free (urip);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -567,28 +590,15 @@ gst_m3u8_update (GstM3U8 * self, gchar * data, gboolean * updated)
|
|||
if (g_str_equal (a, "URI")) {
|
||||
gchar *key = g_strdup (v);
|
||||
gchar *keyp = key;
|
||||
gchar *key_ret;
|
||||
|
||||
/* handle the \"key\" case *
|
||||
* there are sometimes situations where we have white signs
|
||||
* before or after \" sign of URL therefore we are using for loops
|
||||
* in order to remove first and last \" sign from decryption key URI */
|
||||
key_ret = strchr (key, '"');
|
||||
if (key_ret != NULL) {
|
||||
/* found initialization quotation mark key URI */
|
||||
key = key_ret + 1;
|
||||
key_ret = strchr (key, '"');
|
||||
if (key_ret != NULL) {
|
||||
/* found finalizing quotation mark inside key URI */
|
||||
key_ret[0] = '\0';
|
||||
} else {
|
||||
GST_WARNING
|
||||
("Decryption key URL parsing - cannot find finalizing quotation mark");
|
||||
}
|
||||
}
|
||||
|
||||
key = unquote_string (key);
|
||||
if (key) {
|
||||
current_key =
|
||||
uri_join (self->base_uri ? self->base_uri : self->uri, key);
|
||||
} else {
|
||||
GST_WARNING
|
||||
("Cannot remove quotation marks from decryption key URI");
|
||||
}
|
||||
g_free (keyp);
|
||||
} else if (g_str_equal (a, "IV")) {
|
||||
gchar *ivp = v;
|
||||
|
|
Loading…
Reference in a new issue