使用SIP2SIP.info服务器未连接PJSIP VOIP呼叫

时间:2014-02-07 15:24:30

标签: android sip voip pjsip

我正在使用PJSIP进行语音通话。当我使用我们的服务器时,一切都很好,即呼叫连接,通信。但是当我使用SIP2SIP.INFO服务器时。注册正常但呼叫未连接。我看到登录SIP2SIP.info没有传出或来电记录。 所以呼叫不是发起的。

    char cfg_reg_uri[] = "sip:sip2sip.info";
    char cfg_cred_realm[] = "sip2sip.info";
    char cfg_cred_scheme[]="digest";

    pjsua_acc_config cfg;
    pjsua_acc_config_default(&cfg);
    cfg.id = pj_str(cfg_id);
    cfg.reg_uri = pj_str(cfg_reg_uri);
    cfg.cred_count = 1;
    cfg.cred_info[0].realm = pj_str(cfg_cred_realm);
    cfg.cred_info[0].scheme = pj_str(cfg_cred_scheme);
    cfg.cred_info[0].username = pj_str(cfg_cred_username);
    cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD;
    cfg.cred_info[0].data = pj_str(cfg_cred_password);
    status = pjsua_acc_add(&cfg, PJ_TRUE, &_acc_id);

我注意到我们需要在sip2sip中使用名为" proxy.sipthor.net"的出站代理。 但我怎么能在pjsip代码中使用。

请帮助专家。

1 个答案:

答案 0 :(得分:2)

如果您阅读了Sip2Sip设备配置page,则说明:

“SIP设备必须始终执行SIP标准RFC3263(NAPTR + SRV + A DNS查找)中定义的DNS查找”

PJSIP支持DNS SRV查找。

在PJSUA中,如果您未在SIP URL中提供端口号,它将仅执行DNS SRV查找。

“sip:xxx@sip2sip.info”将首先尝试进行DNS SRV记录查找,然后故障转移到DNS A / C名称查找。

“sip:xxx@sip2sip.info:5060”只会进行DNS A / C名称查找。

PJSUA不支持automatically的是故障转移支持,他们说:

“我们建议的是在应用程序层中实现故障转移机制。”

如果您想要“快速简便”的设置,您想要做的是将outbound_proxy设置为“proxy.sipthor.net”。 e.g。

    cfg.outbound_proxy_cnt = 1;
    cfg.outbound_proxy[0] = pj_str("sip:proxy.sipthor.net:5060");

如果您需要更强大的解决方案,则需要使用pjsip's SRV resolution函数来解析sip2sip.info srv记录,例如:“_ _ip._udp.sip2sip.info”,然后使用结果设置outbound_proxy记录。 / p>

代码有点牵扯。

pjsip_resolver_t* resolver_;

...

status = pjsip_resolver_create( pool, &resolver_ );

...

pjsip_host_info host;
host.flag = PJSIP_TRANSPORT_DATAGRAM; // is using UDP, see pjsip_transport_flags_e
host.type = PJSIP_TRANSPORT_UDP; // if using UDP, see pjsip_transport_type_e
host.addr.host = pj_str("sip2sip.info");
host.addr.port = 5060;

pjsip_resolve(resolver_, pool, &host, token, resolver_cb_func);

...


static void resolver_cb_func( pj_status_t status, void *token, const struct pjsip_server_addresses *addr)
{
    ...
            // use results to fill in the outbound_proxy
}

您还可以进一步支持故障转移,但看起来sip2sip在DNS SRV记录中没有多个SIP服务器,所以它当前不会被使用。如果他们添加更多,那么它将变得更有用。

  

_sip._udp.sip2sip.info   服务器:fritz.box地址:fd00 :: 2665:11ff:fef9:ec51
                                                    非权威性答案:
  _sip._udp.sip2sip.info SRV服务地点:
            优先级= 100
            重量= 100
            port = 5060
            svr hostname = proxy.sipthor.net
  sip2sip.info nameserver = ns2.dns-hosting.info   sip2sip.info nameserver = ns1.dns-hosting.info   sip2sip.info nameserver = ns7.dns-hosting.info

Sip2Sip也支持STUN设置,所以我也会在帐户上设置STUN设置:

cfg.stun_srv_cnt = 1;
cfg.stun_srv[0] = pj_str("sip2sip.info");

由于您的示例似乎没有提供端口信息,因此它应该可以工作。要进一步诊断,需要查看pjsip日志输出。