summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2015-07-29 11:27:05 +0100
committerSebastian Dröge <sebastian@centricular.com>2015-07-29 11:28:21 +0100
commitae7bec97cbe79def80d95631e677145242bb9f94 (patch)
treed9e478a1427232c22e1a6eac2dd0892966d84abc
parent5585dc587831a8dbf6d563cd054a61c85992fe02 (diff)
rtsp-media: Strip keys from the fmtp that we use internally in our caps
Skip keys from the fmtp, which we already use ourselves for the caps. Some software is adding random things like clock-rate into the fmtp, and we would otherwise here set a string-typed clock-rate in the caps... and thus fail to create valid RTP caps https://bugzilla.gnome.org/show_bug.cgi?id=753009
-rw-r--r--gst/rtsp-server/rtsp-media.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/gst/rtsp-server/rtsp-media.c b/gst/rtsp-server/rtsp-media.c
index 53b2cc4..31f9f35 100644
--- a/gst/rtsp-server/rtsp-media.c
+++ b/gst/rtsp-server/rtsp-media.c
@@ -3270,6 +3270,11 @@ media_to_caps (gint pt, const GstSDPMedia * media)
for (i = 0; pairs[i]; i++) {
gchar *valpos;
const gchar *val, *key;
+ gint j;
+ const gchar *reserved_keys[] =
+ { "media", "payload", "clock-rate", "encoding-name",
+ "encoding-params"
+ };
/* the key may not have a '=', the value can have other '='s */
valpos = strstr (pairs[i], "=");
@@ -3288,6 +3293,19 @@ media_to_caps (gint pt, const GstSDPMedia * media)
}
/* strip the key of spaces, convert key to lowercase but not the value. */
key = g_strstrip (pairs[i]);
+
+ /* skip keys from the fmtp, which we already use ourselves for the
+ * caps. Some software is adding random things like clock-rate into
+ * the fmtp, and we would otherwise here set a string-typed clock-rate
+ * in the caps... and thus fail to create valid RTP caps
+ */
+ for (j = 0; j < G_N_ELEMENTS (reserved_keys); j++) {
+ if (g_ascii_strcasecmp (reserved_keys[i], key) == 0) {
+ key = "";
+ break;
+ }
+ }
+
if (strlen (key) > 1) {
tmp = g_ascii_strdown (key, -1);
gst_structure_set (s, tmp, G_TYPE_STRING, val, NULL);