背景
基于PJSIP协议栈里的pjsip-apps实现SIP客户端,使用中发现其他SIP客户端给该客户端打电话时,其他客户端听不到响铃声
问题分析
首先查了下文档,没有没有找到直接的配置项,或者接口使用说明,只能正面分析。
Ringback tone原理:SIP主叫端收到被叫发送的180/183信令后,播放本地或者接收服务端的响铃音,怀疑是不是少发了信令,使用sngrep抓包分析发现pjsip-apps被叫过程中并未发送180 Ringing信令,于是试着在incoming时增加发送180信令,对端可以正常听到响玲音了。
解决方案
直接上代码
static void on_incoming_call(pjsua_acc_id acc_id, pjsua_call_id call_id, pjsip_rx_data *rdata)
{
...
//其他代码
pjsip_msg *msg;
pj_status_t status;
pjsip_tx_data *tdata;
pjsip_endpoint *endpt = pjsua_get_pjsip_endpt();
status = pjsip_endpt_create_response(endpt, rdata, PJSIP_SC_RINGING, NULL, &tdata);
if (status != PJ_SUCCESS) {
PJ_LOG(4, (LOG_TAG, "pjsip_endpt_create_response fail status:%d", status));
}
status = pjsip_endpt_send_response2(endpt, rdata, tdata, NULL, NULL);
if (status != PJ_SUCCESS) {
PJ_LOG(4, (LOG_TAG, "pjsip_endpt_send_response2 fail status:%d", status));
}
}
标签:status,tone,响铃,对端,pjsip,PJ,信令,endpt,客户端
From: https://blog.csdn.net/MandeRen/article/details/143192327