static STATUS initGstRtspSrc()

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;
}