我正在开发 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/