static GstElement * kms_av_muxer_add_src (KmsBaseMediaMuxer * obj, KmsMediaType type, const gchar * id) { KmsAVMuxer *self = KMS_AV_MUXER (obj); GstElement *sink = NULL, *appsrc = NULL; KMS_BASE_MEDIA_MUXER_LOCK (self); switch (type) { case KMS_MEDIA_TYPE_AUDIO: appsrc = self->priv->audiosrc; break; case KMS_MEDIA_TYPE_VIDEO: appsrc = self->priv->videosrc; break; default: GST_WARNING_OBJECT (obj, "Unsupported media type %u", type); } if (appsrc != NULL && !self->priv->sink_signaled) { sink = g_object_ref (self->priv->sink); self->priv->sink_signaled = TRUE; } KMS_BASE_MEDIA_MUXER_UNLOCK (self); if (sink != NULL) { KMS_BASE_MEDIA_MUXER_GET_CLASS (self)->emit_on_sink_added (KMS_BASE_MEDIA_MUXER (self), sink); g_object_unref (sink); } return appsrc; }
static void kms_recorder_endpoint_create_base_media_muxer (KmsRecorderEndpoint * self) { KmsBaseMediaMuxer *mux; if (self->priv->profile == KMS_RECORDING_PROFILE_KSR) { mux = KMS_BASE_MEDIA_MUXER (kms_ksr_muxer_new (KMS_BASE_MEDIA_MUXER_PROFILE, self->priv->profile, KMS_BASE_MEDIA_MUXER_URI, KMS_URI_ENDPOINT (self)->uri, NULL)); } else { mux = KMS_BASE_MEDIA_MUXER (kms_av_muxer_new (KMS_BASE_MEDIA_MUXER_PROFILE, self->priv->profile, KMS_BASE_MEDIA_MUXER_URI, KMS_URI_ENDPOINT (self)->uri, NULL)); } self->priv->mux = mux; }
static void kms_av_muxer_prepare_pipeline (KmsAVMuxer * self) { self->priv->videosrc = gst_element_factory_make ("appsrc", "videoSrc"); self->priv->audiosrc = gst_element_factory_make ("appsrc", "audioSrc"); self->priv->sink = KMS_BASE_MEDIA_MUXER_GET_CLASS (self)->create_sink (KMS_BASE_MEDIA_MUXER (self), KMS_BASE_MEDIA_MUXER_GET_URI (self)); g_object_set (self->priv->videosrc, "format", 3 /* GST_FORMAT_TIME */ , NULL); g_object_set (self->priv->audiosrc, "format", 3 /* GST_FORMAT_TIME */ , NULL); kms_av_muxer_add_injector_probe (self, self->priv->videosrc); kms_av_muxer_add_injector_probe (self, self->priv->audiosrc); self->priv->mux = kms_av_muxer_create_muxer (self); gst_bin_add_many (GST_BIN (KMS_BASE_MEDIA_MUXER_GET_PIPELINE (self)), self->priv->videosrc, self->priv->audiosrc, self->priv->mux, self->priv->sink, NULL); if (!gst_element_link (self->priv->mux, self->priv->sink)) { GST_ERROR_OBJECT (self, "Could not link elements: %" GST_PTR_FORMAT ", %" GST_PTR_FORMAT, self->priv->mux, self->priv->sink); } if (kms_recording_profile_supports_type (KMS_BASE_MEDIA_MUXER_GET_PROFILE (self), KMS_ELEMENT_PAD_TYPE_VIDEO)) { const gchar *pad_name = kms_av_muxer_get_sink_pad_name (KMS_BASE_MEDIA_MUXER_GET_PROFILE (self), KMS_ELEMENT_PAD_TYPE_VIDEO); if (pad_name == NULL) { GST_ERROR_OBJECT (self, "Unsupported pad for recording"); return; } if (!gst_element_link_pads (self->priv->videosrc, "src", self->priv->mux, pad_name)) { GST_ERROR_OBJECT (self, "Could not link elements: %" GST_PTR_FORMAT ", %" GST_PTR_FORMAT, self->priv->videosrc, self->priv->mux); } } if (kms_recording_profile_supports_type (KMS_BASE_MEDIA_MUXER_GET_PROFILE (self), KMS_ELEMENT_PAD_TYPE_AUDIO)) { const gchar *pad_name = kms_av_muxer_get_sink_pad_name (KMS_BASE_MEDIA_MUXER_GET_PROFILE (self), KMS_ELEMENT_PAD_TYPE_AUDIO); if (pad_name == NULL) { GST_ERROR_OBJECT (self, "Unsupported pad for recording"); return; } if (!gst_element_link_pads (self->priv->audiosrc, "src", self->priv->mux, pad_name)) { GST_ERROR_OBJECT (self, "Could not link elements: %" GST_PTR_FORMAT ", %" GST_PTR_FORMAT, self->priv->audiosrc, self->priv->mux); } } }