【问题标题】:pjsip (pjsua) notification when remote user answers the call远程用户接听电话时的 pjsip (pjsua) 通知
【发布时间】:2021-01-13 20:51:27
【问题描述】:

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

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

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

正在呼叫 -> 正在连接 -> 已确认 -> 已断开

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

我如何确定用户是否接听或拒绝了电话?

【问题讨论】:

    标签: sip pjsip


    【解决方案1】:

    对我来说,它就是这样工作的。在 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;
    

    【讨论】:

    • 我认为我的问题实际上是我使用的是 Twilio 测试帐户,因此,Twilio 会在前面添加一条音频消息,说我应该升级到付费帐户。这就是即使呼叫被拒绝也会进行相同流程的原因。从 SIP 的角度来看,由于 Twilio 自动应答(播放“请升级您的帐户”),流程得到确认。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多