我正在使用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代码中使用。
请帮助专家。
答案 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日志输出。