如何在pjsip中获得PJSUA_CALL_MEDIA_REMOTE_HOLD

时间:2017-06-30 06:16:48

标签: android pjsip

我正在使用PJSIP Android应用程序并遇到呼叫保持问题。当呼叫者保持呼叫时呼叫者呼叫接收者,而接收者如何识别远程服务器呼叫保持?接收器手中发生了哪个事件

1 个答案:

答案 0 :(得分:1)

根据pjsip docs
virtual void onCallMediaState(OnCallMediaStateParam& prm)
当呼叫中的媒体状态发生变化时通知应用程序。

普通应用程序需要实现此回调,例如将呼叫媒体连接到声音设备。

此方法位于pjsip java中的Call类中。 CallMediaInfo类包含pjsua_call_media_status。 使用pjsua_call_media_status,我们可以知道当前的呼叫媒体状态是处于活动状态还是处于保持呼叫状态。

@Override
    public void onCallMediaState(OnCallMediaStateParam prm)
    {
    CallInfo ci;
    try {
        ci = getInfo();
    } catch (Exception e) {
        return;
    }

    CallMediaInfoVector cmiv = ci.getMedia();
    CallMediaInfo callMediaInfo = null;

    for (int i = 0; i < cmiv.size(); i++) {
        CallMediaInfo cmi = cmiv.get(i);
        if (cmi.getType() == pjmedia_type.PJMEDIA_TYPE_AUDIO &&
        (cmi.getStatus() == 
            pjsua_call_media_status.PJSUA_CALL_MEDIA_REMOTE_HOLD ||
         cmi.getStatus() == 
            pjsua_call_media_status.PJSUA_CALL_MEDIA_LOCAL_HOLD) )
        {
            //set ur call status  as hold on your TextView 
        }else if (cmi.getType() == pjmedia_type.PJMEDIA_TYPE_AUDIO &&
        (cmi.getStatus() == 
            pjsua_call_media_status.PJSUA_CALL_MEDIA_ACTIVE))
            {
                //set ur call status  as connected on your TextView 
            }
    }
}

希望它有所帮助。