static void kms_webrtc_connection_finalize (GObject * object) { KmsWebRtcConnection *self = KMS_WEBRTC_CONNECTION (object); KmsWebRtcConnectionPrivate *priv = self->priv; GST_DEBUG_OBJECT (self, "finalize"); kms_webrtc_transport_destroy (priv->rtp_tr); kms_webrtc_transport_destroy (priv->rtcp_tr); g_mutex_clear (&self->priv->mutex); /* chain up */ G_OBJECT_CLASS (kms_webrtc_connection_parent_class)->finalize (object); }
KmsWebRtcTransport * kms_webrtc_transport_create (NiceAgent * agent, guint stream_id, guint component_id) { KmsWebRtcTransport *tr; gchar *str; tr = g_slice_new0 (KmsWebRtcTransport); /* TODO: improve creating elements when needed */ tr->component_id = component_id; tr->dtlssrtpenc = gst_element_factory_make ("dtlssrtpenc", NULL); tr->dtlssrtpdec = gst_element_factory_make ("dtlssrtpdec", NULL); tr->nicesink = gst_element_factory_make ("nicesink", NULL); tr->nicesrc = gst_element_factory_make ("nicesrc", NULL); if (tr->dtlssrtpenc == NULL || tr->dtlssrtpenc == NULL || tr->dtlssrtpenc == NULL || tr->dtlssrtpenc == NULL) { GST_ERROR ("Cannot create KmsWebRtcTransport"); kms_webrtc_transport_destroy (tr); return NULL; } str = g_strdup_printf ("%s-%s-%" G_GUINT32_FORMAT "-%" G_GUINT32_FORMAT, GST_OBJECT_NAME (tr->dtlssrtpenc), GST_OBJECT_NAME (tr->dtlssrtpdec), stream_id, component_id); g_object_set (G_OBJECT (tr->dtlssrtpenc), "connection-id", str, NULL); g_object_set (G_OBJECT (tr->dtlssrtpdec), "connection-id", str, NULL); g_free (str); g_object_set (G_OBJECT (tr->nicesink), "agent", agent, "stream", stream_id, "component", component_id, "sync", FALSE, "async", FALSE, NULL); g_object_set (G_OBJECT (tr->nicesrc), "agent", agent, "stream", stream_id, "component", component_id, NULL); return tr; }