android - 如何在pjsip中获取PJSUA_CALL_MEDIA_REMOTE_HOLD

标签 android pjsip

我正在开发 PJSIP Android 应用程序,但遇到了调用保持问题。当主叫方将调用置于保持状态时,主叫方正在调用接收方,接收方如何识别远程服务器调用处于保持状态?哪个事件发生在接收者手中?

最佳答案

根据 pjsip 文档:

virtual void onCallMediaState(OnCallMediaStateParam &prm)

Notify application when media state in the call has changed.

普通应用程序需要实现这个回调,例如将通话的媒体连接到声音设备。

这个方法在pjsip java中的Call类中: CallMediaInfo 类包含 pjsua_call_media_status。 使用 pjsua_call_media_status 我们可以知道当前调用媒体状态是 Activity 的还是调用保持。

@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 
            }
    }
}

关于android - 如何在pjsip中获取PJSUA_CALL_MEDIA_REMOTE_HOLD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44839794/

相关文章:

java - 无法从runtime.getruntime.exec()运行/获取输出(android java)

android - 使用 Intent 将值从适配器解析为 Activity

c - 如何在 armv7 架构中构建 mcrypt 库?

c++ - 为什么 pjmedia_snd_port_create(...) 初始化声音端口失败?

ios - 在 iOS 7 sdk 和 xcode 5 上编译 PJSIP 时出现链接器错误

android - 项目 "-resource-src"中不存在目标 "HelloWorldTest"。从目标 "compile"使用

android - 从 Activity 中清除 Intent 标志,以便它恢复其原始启动行为

Android:saerchable.xml 和 searchSuggestThreshold 参数

iphone - 为 iOS 4 构建 PJSIP

android - 如何使用 pjsua2 android 发送带有自定义 header 的 SIP 消息