Загрузка данных
Ошибки при компиляции:
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;
}