示例#1
0
static gboolean
kms_webrtc_session_add_connection (KmsWebrtcSession * self,
    KmsSdpSession * sess, SdpMediaConfig * mconf, gboolean offerer)
{
  KmsBaseRtpSession *base_rtp_sess = KMS_BASE_RTP_SESSION (sess);
  gboolean connected, active;
  KmsIRtpConnection *conn;

  conn = kms_base_rtp_session_get_connection (base_rtp_sess, mconf);
  if (conn == NULL) {
    GST_ERROR_OBJECT (self, "No connection created");
    return FALSE;
  }

  g_object_get (conn, "added", &connected, NULL);
  if (connected) {
    GST_DEBUG_OBJECT (self, "Conn already added");
    return TRUE;
  }

  active =
      sdp_utils_media_is_active (kms_sdp_media_config_get_sdp_media (mconf),
      offerer);

  kms_i_rtp_connection_add (conn, GST_BIN (self), active);
  kms_i_rtp_connection_sink_sync_state_with_parent (conn);
  kms_i_rtp_connection_src_sync_state_with_parent (conn);

  return TRUE;
}
示例#2
0
KmsWebRtcBaseConnection *
kms_webrtc_session_get_connection (KmsWebrtcSession * self,
    SdpMediaConfig * mconf)
{
  KmsBaseRtpSession *base_rtp_sess = KMS_BASE_RTP_SESSION (self);
  KmsIRtpConnection *conn;

  conn = kms_base_rtp_session_get_connection (base_rtp_sess, mconf);
  if (conn == NULL) {
    return NULL;
  }

  return KMS_WEBRTC_BASE_CONNECTION (conn);
}
示例#3
0
static gboolean
kms_base_rtp_session_add_connection_for_session (KmsBaseRtpSession * self,
    SdpMediaConfig * mconf, gboolean active)
{
  KmsIRtpConnection *conn;
  SdpMediaGroup *group = kms_sdp_media_config_get_group (mconf);

  conn = kms_base_rtp_session_get_connection (self, mconf);
  if (conn == NULL) {
    return FALSE;
  }

  if (group != NULL) {          /* bundle */
    kms_base_rtp_session_add_bundle_connection (self, conn, mconf, active);
    kms_base_rtp_session_add_connection_sink (self, conn, mconf);
  } else if (kms_sdp_media_config_is_rtcp_mux (mconf)) {
    kms_base_rtp_session_add_rtcp_mux_connection (self, conn, mconf, active);
  } else {
    kms_base_rtp_session_add_connection (self, conn, mconf, active);
  }

  return TRUE;
}