远程用户接听电话时的 pjsip (pjsua) 通知

pjsip (pjsua) notification when remote user answers the call

我正在尝试使用 https://github.com/pjsip/pjproject 创建一个简单的 SIP 用户代理。我可以成功连接到 sip 服务器 (Twilio) 并使用 pjsua_* 接口拨打 PSTN 号码。这很好用。

我现在想要的是当我呼叫的用户接听电话时从 pjsip 获得通知(通过回调等)。

我正在使用 on_call_state() 来获取邀请的更新,但这经历了相同的状态

呼叫中 -> 连接中 -> 确认 -> 断开连接

即使用户拒绝来电。所以我想我没有为此寻找正确的回调。

如何明确判断用户是接听还是拒接来电?

对我来说,它就是这样工作的。在 on_call_state 回调中:

pjsua_call_info callInfo;
pjsua_call_get_info(call_id, &callInfo);
pjsip_inv_state state = callInfo.state;
pjsip_status_code statusCode = callInfo.last_status;

switch (state) {
.....
case PJSIP_INV_STATE_CONFIRMED:
    // remote party answered the call normally
    break;
case PJSIP_INV_STATE_DISCONNECTED:
    if (statusCode == PJSIP_SC_BUSY_HERE) {
       // rejected
    } else {
       // finished ok
    }
    break;

我拒绝这样的电话:

pj_status_t state;
int sendCode = PJSIP_SC_DECLINE;
try {
   state = pjsua_call_answer((pjsua_call_id) call_id, sendCode, nullptr, nullptr);
} catch (...) {
   return -1;
}
return state;