BlogDemo.SimpleSipPhone icon indicating copy to clipboard operation
BlogDemo.SimpleSipPhone copied to clipboard

挂断无响应

Open baecheung opened this issue 7 years ago • 4 comments

我参考了你的三篇blog,实现了里面讲的所有功能。但是在两个设备通话时,调用hangup无法挂断,不知道是什么原因。我试了用miniSIPPhone和我的设备通话,miniSIPPhone的挂断是起效的,设备调用hangup挂断是无效的。我打了日志进行查看,miniSIPPhone挂断后,minSIPServer会收到BYE的msg,客户端调用hangup挂断没有任何日志输出。 已经接听的通话是不是不能用hangup进行挂断?

baecheung avatar May 03 '17 11:05 baecheung

还是调用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 avatar May 03 '17 14:05 prinsun

@prinsun 也不行,所有的代码都是照你blog中搬过来的,所以也试过用这个~ 其实在未接通的时候,hangup是可以挂断的,双方都能马上收到消息。但是一旦接通进入通话后,hangup就无效了,主动调用的一方在超时后会收到disconnected的消息,但是另一方永远也收不到。

baecheung avatar May 04 '17 03:05 baecheung

@BaeCheung 我这边在 Demo 上试验下来都是可以的,所以,建议你用 Wireshark 抓一下通信包对比下,SIP 协议还是比较简单的,有点类似 HTTP,既然你做这一块,肯定需要详细了解下(我已经忘得差不多了:smile:)。

prinsun avatar May 04 '17 04:05 prinsun

@prinsun 我下载你的Demo试了一下,点了接听能够通话之后再点挂断,一样不行啊~ 主动点的一方等了好一会儿才超时,另一方也还是永远收不到。好奇怪~ sip_call sip_answer

baecheung avatar May 04 '17 04:05 baecheung