voip 呼び出し用の Android アプリケーションに PJSUA2 を実装しています。アプリの要件に基づいて、通話を開始して 1 秒以内に切断し、もう一度通話を接続するなど、高速通話を試みることがあります。この間、何度か連続して通話と切断を行った後 (約 5 ~ 10 秒)、アプリがクラッシュします。java.lang.Exception: who's call?という例外が発生します。
同じシナリオ (連続通話) でトランスポートがサポートされていないという例外を与えるために使用されるため、VoIP 通話とコメント付きの TCP および TSL チャネルにのみ UDP を使用しています。トランスポートのセットアップを以下に投稿します。ご覧ください:
/* Create transports. */
try {
ep.transportCreate(pjsip_transport_type_e.PJSIP_TRANSPORT_UDP,
sipTpConfig);
} catch (Exception e) {
System.out.println(e);
Log.d("excmicbutton","1st"+e.getMessage());
}
// try {
// ep.transportCreate(pjsip_transport_type_e.PJSIP_TRANSPORT_TCP,
// sipTpConfig);
// } catch (Exception e) {
// System.out.println(e);
// Log.d("excmicbutton","2nd"+e.getMessage());
// }
//
// try {
// sipTpConfig.setPort(SIP_PORT +1);
// ep.transportCreate(pjsip_transport_type_e.PJSIP_TRANSPORT_TLS,
// sipTpConfig);
// } catch (Exception e) {
// System.out.println(e);
// Log.d("excmicbutton","3rd"+e.getMessage());
// }
/* Set SIP port back to default for JSON saved config */
sipTpConfig.setPort(SIP_PORT);
/* Create accounts. */
for (int i = 0; i < accCfgs.size(); i++) {
MyAccountConfig my_cfg = accCfgs.get(i);
/* Customize account config */
my_cfg.accCfg.getNatConfig().setIceEnabled(true);
my_cfg.accCfg.getVideoConfig().setAutoTransmitOutgoing(true);
my_cfg.accCfg.getVideoConfig().setAutoShowIncoming(true);
MyAccount acc = addAcc(my_cfg.accCfg);
if (acc == null)
continue;