Загрузка данных


Ошибки при компиляции:
undefined reference to `pjsua_call_get_media_port'
undefined reference to `pjsua_media_destroy'
undefined reference to `pjsua_media_init'

Есть в коде(может эти функции подойдут???):
/**
 * Init media subsystems.
 */
pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg)
{
    pj_status_t status;

    pj_log_push_indent();

    /* Specify which audio device settings are save-able */
    pjsua_var.aud_svmask = 0xFFFFFFFF;
    /* These are not-settable */
    pjsua_var.aud_svmask &= ~(PJMEDIA_AUD_DEV_CAP_EXT_FORMAT |
                              PJMEDIA_AUD_DEV_CAP_INPUT_SIGNAL_METER |
                              PJMEDIA_AUD_DEV_CAP_OUTPUT_SIGNAL_METER);
    /* EC settings use different API */
    pjsua_var.aud_svmask &= ~(PJMEDIA_AUD_DEV_CAP_EC |
                              PJMEDIA_AUD_DEV_CAP_EC_TAIL);

    /* Copy configuration */
    pjsua_media_config_dup(pjsua_var.pool, &pjsua_var.media_cfg, cfg);

    /* Normalize configuration */
    if (pjsua_var.media_cfg.snd_clock_rate == 0) {
        pjsua_var.media_cfg.snd_clock_rate = pjsua_var.media_cfg.clock_rate;
    }

    if (pjsua_var.media_cfg.has_ioqueue &&
        pjsua_var.media_cfg.thread_cnt == 0)
    {
        pjsua_var.media_cfg.thread_cnt = 1;
    }

    if (pjsua_var.media_cfg.max_media_ports < pjsua_var.ua_cfg.max_calls) {
        pjsua_var.media_cfg.max_media_ports = pjsua_var.ua_cfg.max_calls + 2;
    }

    if (pjsua_var.media_cfg.conf_threads < 1) {
        pjsua_var.media_cfg.conf_threads = 1;
    }

    /* Create media endpoint. */
    status = pjmedia_endpt_create(&pjsua_var.cp.factory, 
                                  pjsua_var.media_cfg.has_ioqueue? NULL :
                                     pjsip_endpt_get_ioqueue(pjsua_var.endpt),
                                  pjsua_var.media_cfg.thread_cnt,
                                  &pjsua_var.med_endpt);
    if (status != PJ_SUCCESS) {
        pjsua_perror(THIS_FILE, 
                     "Media stack initialization has returned error", 
                     status);
        goto on_error;
    }

    status = pjsua_aud_subsys_init();
    if (status != PJ_SUCCESS)
        goto on_error;

#if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0)
    /* Initialize SRTP library (ticket #788). */
    status = pjmedia_srtp_init_lib(pjsua_var.med_endpt);
    if (status != PJ_SUCCESS) {
        pjsua_perror(THIS_FILE, "Error initializing SRTP library", 
                     status);
        goto on_error;
    }
#endif

    /* Video */
#if PJMEDIA_HAS_VIDEO
    status = pjsua_vid_subsys_init();
    if (status != PJ_SUCCESS)
        goto on_error;
#endif

    /* Create event manager */
    if (!pjmedia_event_mgr_instance()) {
        status = pjmedia_event_mgr_create(pjsua_var.pool, 0, NULL);
        if (status != PJ_SUCCESS) {
            pjsua_perror(THIS_FILE, "Error creating PJMEDIA event manager",
                         status);
            goto on_error;
        }
    }

    pj_log_pop_indent();
    return PJ_SUCCESS;

on_error:
    pj_log_pop_indent();
    return status;
}

/*
 * Start pjsua media subsystem.
 */
pj_status_t pjsua_media_subsys_start(void)
{
    pj_status_t status;

    pj_log_push_indent();

#if DISABLED_FOR_TICKET_1185
    /* Create media for calls, if none is specified */
    if (pjsua_var.calls[0].media[0].tp == NULL) {
        pjsua_transport_config transport_cfg;

        /* Create default transport config */
        pjsua_transport_config_default(&transport_cfg);
        transport_cfg.port = DEFAULT_RTP_PORT;

        status = pjsua_media_transports_create(&transport_cfg);
        if (status != PJ_SUCCESS) {
            pj_log_pop_indent();
            return status;
        }
    }
#endif

    /* Audio */
    status = pjsua_aud_subsys_start();
    if (status != PJ_SUCCESS) {
        pj_log_pop_indent();
        return status;
    }

    /* Video */
#if PJMEDIA_HAS_VIDEO
    status = pjsua_vid_subsys_start();
    if (status != PJ_SUCCESS) {
        pjsua_aud_subsys_destroy();
        pj_log_pop_indent();
        return status;
    }
#endif

    /* Perform NAT detection */
    // Performed only when STUN server resolution by pjsua_init() completed
    // successfully (see ticket #1865).
    //if (pjsua_var.ua_cfg.stun_srv_cnt) {
        //status = pjsua_detect_nat_type();
        //if (status != PJ_SUCCESS) {
        //    PJ_PERROR(1,(THIS_FILE, status, "NAT type detection failed"));
        //}
    //}

    pj_log_pop_indent();
    return PJ_SUCCESS;
}


/*
 * Destroy pjsua media subsystem.
 */
pj_status_t pjsua_media_subsys_destroy(unsigned flags)
{
    PJ_UNUSED_ARG(flags);

    PJ_LOG(4,(THIS_FILE, "Shutting down media.."));
    pj_log_push_indent();

    if (pjsua_var.med_endpt) {
        /* Wait for media endpoint's worker threads to quit. */
        pjmedia_endpt_stop_threads(pjsua_var.med_endpt);

        pjsua_aud_subsys_destroy();
    }

#if 0
    // This part has been moved out to pjsua_destroy() (see also #1717).
    /* Close media transports */
    for (i=0; i<pjsua_var.ua_cfg.max_calls; ++i) {
        /* TODO: check if we're not allowed to send to network in the
         *       "flags", and if so do not do TURN allocation...
         */
        PJ_UNUSED_ARG(flags);
        pjsua_media_channel_deinit(i);
    }
#endif

    /* Destroy media endpoint. */
    if (pjsua_var.med_endpt) {

#       if PJMEDIA_HAS_VIDEO
            pjsua_vid_subsys_destroy();
#       endif

        pjmedia_endpt_destroy(pjsua_var.med_endpt);
        pjsua_var.med_endpt = NULL;

        /* Deinitialize sound subsystem */
        // Not necessary, as pjmedia_snd_deinit() should have been called
        // in pjmedia_endpt_destroy().
        //pjmedia_snd_deinit();
    }

    if (pjmedia_event_mgr_instance())
        pjmedia_event_mgr_destroy(NULL);

    pj_log_pop_indent();

    return PJ_SUCCESS;
}