in source/src/AppRtspSrc.c [738:775]
static STATUS initGstRtspSrc(PRtspSrcContext pRtspSrcContext, GstElement* pipeline, BOOL enableProbe)
{
STATUS retStatus = STATUS_SUCCESS;
PRtspServerConfiguration pRtspServerConf = NULL;
GstElement* rtspSource = NULL;
MUTEX_LOCK(pRtspSrcContext->codecConfLock);
rtspSource = app_gst_element_factory_make(GST_ELEMENT_FACTORY_NAME_RTSPSRC, "rtspSource");
CHK(rtspSource != NULL, STATUS_MEDIA_MISSING_PLUGIN);
// configure rtspsrc
pRtspServerConf = &pRtspSrcContext->rtspServerConf;
app_g_object_set(APP_G_OBJECT(rtspSource), "location", pRtspServerConf->url, "short-header", TRUE, NULL);
if (pRtspServerConf->username[0] != '\0') {
app_g_object_set(APP_G_OBJECT(rtspSource), "user-id", pRtspServerConf->username, NULL);
}
if (pRtspServerConf->password[0] != '\0') {
app_g_object_set(APP_G_OBJECT(rtspSource), "user-pw", pRtspServerConf->password, NULL);
}
// setup the callbacks.
if (enableProbe == FALSE) {
DLOGD("initializing rtspsrc");
app_g_signal_connect(APP_G_OBJECT(rtspSource), GST_SIGNAL_CALLBACK_PAD_ADDED, G_CALLBACK(onRtspSrcPadAdded), pRtspSrcContext);
app_g_signal_connect(APP_G_OBJECT(rtspSource), GST_SIGNAL_CALLBACK_PAD_REMOVED, G_CALLBACK(onRtspSrcPadRemoved), pRtspSrcContext);
} else {
DLOGD("probing rtspsrc");
app_g_signal_connect(APP_G_OBJECT(rtspSource), GST_SIGNAL_CALLBACK_PAD_ADDED, G_CALLBACK(onRtspSrcPadAddedDiscovery), pRtspSrcContext);
app_g_signal_connect(APP_G_OBJECT(rtspSource), GST_SIGNAL_CALLBACK_NO_MORE_PADS, G_CALLBACK(onRtspSrcNoMorePadsDiscovery), pRtspSrcContext);
}
app_gst_bin_add_many(APP_GST_BIN(pipeline), rtspSource, NULL);
CleanUp:
MUTEX_UNLOCK(pRtspSrcContext->codecConfLock);
return retStatus;
}