static gboolean
get_info_from_tags (GstPad * pad, GstEvent ** event, gpointer user_data)
{
  GstSDPMedia *media = (GstSDPMedia *) user_data;

  if (GST_EVENT_TYPE (*event) == GST_EVENT_TAG) {
    GstTagList *tags;
    guint bitrate = 0;

    gst_event_parse_tag (*event, &tags);

    if (gst_tag_list_get_scope (tags) != GST_TAG_SCOPE_STREAM)
      return TRUE;

    if (!gst_tag_list_get_uint (tags, GST_TAG_MAXIMUM_BITRATE,
            &bitrate) || bitrate == 0)
      if (!gst_tag_list_get_uint (tags, GST_TAG_BITRATE, &bitrate) ||
          bitrate == 0)
        return TRUE;

    /* set bandwidth (kbits/s) */
    gst_sdp_media_add_bandwidth (media, GST_SDP_BWTYPE_AS, bitrate / 1000);

    return FALSE;

  }

  return TRUE;
}
static gboolean
kms_sdp_media_handler_add_answer_attributes_impl (KmsSdpMediaHandler * handler,
    const GstSDPMedia * offer, GstSDPMedia * answer, GError ** error)
{
  GError *err = NULL;
  GSList *l;
  gint i;

  /* Add bandwidth attributes */
  for (i = 0; i < handler->priv->bwtypes->len; i++) {
    GstSDPBandwidth *bw;

    bw = &g_array_index (handler->priv->bwtypes, GstSDPBandwidth, i);
    gst_sdp_media_add_bandwidth (answer, bw->bwtype, bw->bandwidth);
  }

  for (l = handler->priv->extensions; l != NULL; l = g_slist_next (l)) {
    KmsISdpMediaExtension *ext = KMS_I_SDP_MEDIA_EXTENSION (l->data);

    if (!kms_i_sdp_media_extension_add_answer_attributes (ext, offer, answer,
            &err)) {
      GST_ERROR_OBJECT (ext, "%s", err->message);
      g_clear_error (&err);
    }
  }

  return TRUE;
}