技术咨询:使用Consult后能否获取被保持呼叫的RTP端口
如何获取Consult操作后保持状态呼叫的RTP端口?
代码实现
dialoutCall = (CiscoCall) provider.createCall(); TerminalConnection terminalConnection = ctipTerminal.getTerminalConnections()[0]; dialoutCall.consult(terminalConnection,dialToNum);
问题描述
执行上述Consult操作后,原有呼叫会进入保持状态,且RTP端口发生变更,想确认是否可以获取该保持状态呼叫的RTP端口。
触发Consult后收到的事件(翻译后)
已接收--> 呼叫/CiscoTermConnSelectChangedEv CTI_1 已接收--> 终端/CiscoRTPInputStoppedEv 已接收--> 终端/CiscoRTPOutputStoppedEv 已接收--> 呼叫/CallCtlTermConnHeldEv CTI_1 已接收--> 呼叫/ConsultCallActive 已接收--> 呼叫/ConnCreatedEv 6050:CampusPT:1 已接收--> 呼叫/ConnConnectedEv 6050:CampusPT:1 已接收--> 呼叫/CallCtlConnInitiatedEv 6050:CampusPT:1 已接收--> 呼叫/TermConnCreatedEv CTI_1 已接收--> 呼叫/TermConnActiveEv CTI_1 已接收--> 呼叫/CallCtlTermConnTalkingEv CTI_1 已接收--> 呼叫/CallCtlConnDialingEv 6050:CampusPT:1 已接收--> 呼叫/CallCtlConnEstablishedEv 6050:CampusPT:1 已接收--> 呼叫/ConnInProgressEv 6001:CampusPT:1 已接收--> 呼叫/CallCtlConnOfferedEv 6001:CampusPT:1 已接收--> 呼叫/ConnAlertingEv 6001:CampusPT:1 已接收--> 呼叫/CallCtlConnAlertingEv 6001:CampusPT:1
解答
可以获取保持状态呼叫的RTP端口,具体方法如下:
- 监听RTP启动事件:原呼叫进入保持状态后,虽然会先触发
CiscoRTPInputStoppedEv和CiscoRTPOutputStoppedEv,但当系统为保持的呼叫重新分配RTP端口时,会发送CiscoRTPInputStartedEv和CiscoRTPOutputStartedEv事件。通过这两个事件的getRTPAddress()方法,就能拿到包含端口的RTP地址信息。 - 主动查询呼叫媒体信息:通过原
CiscoCall对象关联的CiscoTerminalConnection,调用getMediaInfo()方法获取媒体流详情;或者直接从CiscoCall对象中读取媒体属性,不过要注意必须等呼叫保持状态稳定、媒体通道重新建立后,这些信息才会更新为最新的RTP端口。 - 注意事件时序:你当前收到的事件里只有RTP停止事件,可能需要等待片刻,观察是否有后续的RTP启动事件;也可以在收到
CallCtlTermConnHeldEv事件后,主动查询原呼叫的媒体属性。
内容的提问来源于stack exchange,提问作者Potato
相关产品推荐
相关产品推荐

