BlogDemo.SimpleSipPhone
BlogDemo.SimpleSipPhone copied to clipboard
挂断无响应
我参考了你的三篇blog,实现了里面讲的所有功能。但是在两个设备通话时,调用hangup无法挂断,不知道是什么原因。我试了用miniSIPPhone和我的设备通话,miniSIPPhone的挂断是起效的,设备调用hangup挂断是无效的。我打了日志进行查看,miniSIPPhone挂断后,minSIPServer会收到BYE的msg,客户端调用hangup挂断没有任何日志输出。 已经接听的通话是不是不能用hangup进行挂断?
还是调用pjsua_call_hangup
来挂断,不过要注意多线程问题,参考下面代码:
void pjsip_execute_in_block(dispatch_block_t block) {
pj_thread_desc rtpdesc;
pj_thread_t *thread = 0;
if(!pj_thread_is_registered()) {
if (pj_thread_register(NULL, rtpdesc, &thread) == PJ_SUCCESS) {
block();
}
} else {
block ();
}
}
...
pjsip_execute_in_block(^{
pjsua_call_hangup(call_id, 0, NULL, NULL);
});
@prinsun 也不行,所有的代码都是照你blog中搬过来的,所以也试过用这个~ 其实在未接通的时候,hangup是可以挂断的,双方都能马上收到消息。但是一旦接通进入通话后,hangup就无效了,主动调用的一方在超时后会收到disconnected的消息,但是另一方永远也收不到。
@BaeCheung 我这边在 Demo 上试验下来都是可以的,所以,建议你用 Wireshark 抓一下通信包对比下,SIP 协议还是比较简单的,有点类似 HTTP,既然你做这一块,肯定需要详细了解下(我已经忘得差不多了:smile:)。
@prinsun 我下载你的Demo试了一下,点了接听能够通话之后再点挂断,一样不行啊~ 主动点的一方等了好一会儿才超时,另一方也还是永远收不到。好奇怪~