/* Callback called by the library when call's media state has changed */
static void on_call_media_state(pjsua_call_id call_id)
{
pjsua_call_info ci;
pjsua_call_get_info(call_id, &ci);
if (ci.media_status == PJSUA_CALL_MEDIA_ACTIVE) {
#ifdef USE_DYNAMIC_AUDIO_RATE
pjsua_call_media_info *media = &ci.media;
if (media->type == PJMEDIA_TYPE_AUDIO) {
pjmedia_port *media_port = NULL;
media_port = pjsua_var.calls[call_id].media[0].strm.a.media_port;
if (!media_port) {
printf("[MEDIA] Error: Failed to get call media port\n");
return;
}
//Set rate from detect sound codec
pjsua_var.media_cfg.snd_clock_rate = media_port->info.fmt.det.aud.clock_rate;
printf("Try set snd_clock_rate=%u\n",pjsua_var.media_cfg.snd_clock_rate);
}
#endif
// When media is active, connect call to sound device.
pjsua_conf_connect(ci.conf_slot, 0);
pjsua_conf_connect(0, ci.conf_slot);
}
}
[CALLING]
[EARLY]
[INPLACE_SWAP] Mutating fields: 16000 Hz -> 8000 Hz (SPF: 160)
[INPLACE_SWAP] Field modification complete. All layers synced to 8000 Hz!
Try set snd_clock_rate=8000
mode=0 col=0 row=1 text=CALLING
mode=0 col=0 row=0 text=Call to 1004
mode=0 col=0 row=1 text=EARLY
уже в это on_call_media_state можно попробовать reinvite, но только в случае, если не совпал clock_rate