Exemple #1
0
static void
kms_remb_remote_update (KmsRembRemote * rm,
    KmsRTCPPSFBAFBREMBPacket * remb_packet)
{
  guint32 br_send;

  if (remb_packet->n_ssrcs == 0) {
    GST_WARNING_OBJECT (KMS_REMB_BASE (rm)->rtpsess,
        "REMB packet without any SSRC");
    return;
  } else if (remb_packet->n_ssrcs > 1) {
    GST_WARNING_OBJECT (KMS_REMB_BASE (rm)->rtpsess,
        "REMB packet with %" G_GUINT32_FORMAT " SSRCs."
        " A inconsistent management could take place", remb_packet->n_ssrcs);
  }

  br_send = remb_packet->bitrate;
  if (!rm->probed) {
    if ((remb_packet->bitrate < rm->remb_on_connect)
        && (remb_packet->bitrate >= rm->remb)) {
      GST_DEBUG_OBJECT (KMS_REMB_BASE (rm)->rtpsess,
          "Not probed: sending remb_on_connect value");
      br_send = rm->remb_on_connect;
      rm->remb = remb_packet->bitrate;
    } else {
      rm->probed = TRUE;
    }
  }

  send_remb_event (rm, br_send, remb_packet->ssrcs[0]);
  rm->remb = remb_packet->bitrate;
}
Exemple #2
0
static void
kms_remb_remote_update (KmsRembRemote * rm,
    KmsRTCPPSFBAFBREMBPacket * remb_packet)
{
  if (remb_packet->n_ssrcs == 0) {
    GST_WARNING_OBJECT (KMS_REMB_BASE (rm)->rtpsess,
        "REMB packet without any SSRC");
    return;
  } else if (remb_packet->n_ssrcs > 1) {
    GST_WARNING_OBJECT (KMS_REMB_BASE (rm)->rtpsess,
        "REMB packet with %" G_GUINT32_FORMAT " SSRCs."
        " A inconsistent management could take place", remb_packet->n_ssrcs);
  }

  if (!rm->probed) {
    /* FIXME: if no event is sent until this condition,
     * the restriction of this br will be removed by event manager
     * in 10secs*/
    if ((remb_packet->bitrate < REMB_ON_CONNECT)
        && (remb_packet->bitrate >= rm->remb)) {
      rm->remb = remb_packet->bitrate;
      return;
    }

    rm->probed = TRUE;
  }

  send_remb_event (rm, remb_packet->bitrate, remb_packet->ssrcs[0]);
  rm->remb = remb_packet->bitrate;
}
Exemple #3
0
static GstPadProbeReturn
send_remb_event_probe (GstPad * pad, GstPadProbeInfo * info, gpointer user_data)
{
  KmsRembRemote *rm = user_data;
  GstEvent *event = GST_PAD_PROBE_INFO_EVENT (info);

  if (GST_EVENT_TYPE (event) != GST_EVENT_CAPS) {
    return GST_PAD_PROBE_OK;
  };

  send_remb_event (rm, rm->remb_on_connect, rm->local_ssrc);

  return GST_PAD_PROBE_REMOVE;
}