static void kms_muxing_pipeline_configure (KmsMuxingPipeline * self) { GstEncodingContainerProfile *cprof; const GList *profiles, *l; GstElement *appsrc; cprof = kms_recording_profile_create_profile (self->priv->profile, TRUE, TRUE); profiles = gst_encoding_container_profile_get_profiles (cprof); for (l = profiles; l != NULL; l = l->next) { GstEncodingProfile *prof = l->data; GstCaps *caps; if (GST_IS_ENCODING_AUDIO_PROFILE (prof)) { appsrc = self->priv->audiosrc; } else if (GST_IS_ENCODING_VIDEO_PROFILE (prof)) { appsrc = self->priv->videosrc; } else continue; caps = gst_encoding_profile_get_input_caps (prof); g_object_set (G_OBJECT (appsrc), "is-live", TRUE, "do-timestamp", FALSE, "min-latency", G_GUINT64_CONSTANT (0), "max-latency", G_GUINT64_CONSTANT (0), "format", GST_FORMAT_TIME, NULL); gst_caps_unref (caps); } g_object_set (G_OBJECT (self->priv->encodebin), "profile", cprof, "audio-jitter-tolerance", 100 * GST_MSECOND, "avoid-reencoding", TRUE, NULL); gst_encoding_profile_unref (cprof); if (self->priv->profile == KMS_RECORDING_PROFILE_MP4) { GstElement *mux = gst_bin_get_by_name (GST_BIN (self->priv->encodebin), "muxer"); g_object_set (G_OBJECT (mux), "fragment-duration", 2000, "streamable", TRUE, NULL); g_object_unref (mux); } else if (self->priv->profile == KMS_RECORDING_PROFILE_WEBM) { GstElement *mux = gst_bin_get_by_name (GST_BIN (self->priv->encodebin), "muxer"); g_object_set (G_OBJECT (mux), "streamable", TRUE, NULL); g_object_unref (mux); } }
static GstCaps * kms_recorder_endpoint_get_caps_from_profile (KmsRecorderEndpoint * self, KmsElementPadType type) { GstEncodingContainerProfile *cprof; const GList *profiles, *l; GstCaps *caps = NULL; switch (type) { case KMS_ELEMENT_PAD_TYPE_VIDEO: cprof = kms_recording_profile_create_profile (self->priv->profile, FALSE, TRUE); break; case KMS_ELEMENT_PAD_TYPE_AUDIO: cprof = kms_recording_profile_create_profile (self->priv->profile, TRUE, FALSE); break; default: return NULL; } profiles = gst_encoding_container_profile_get_profiles (cprof); for (l = profiles; l != NULL; l = l->next) { GstEncodingProfile *prof = l->data; if ((GST_IS_ENCODING_AUDIO_PROFILE (prof) && type == KMS_ELEMENT_PAD_TYPE_AUDIO) || (GST_IS_ENCODING_VIDEO_PROFILE (prof) && type == KMS_ELEMENT_PAD_TYPE_VIDEO)) { caps = gst_encoding_profile_get_input_caps (prof); break; } } gst_encoding_profile_unref (cprof); return caps; }