簡體   English   中英

使用SIP2SIP.info服務器未連接PJSIP VOIP呼叫

[英]PJSIP VOIP call not connected using SIP2SIP.info server

我正在使用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代碼中使用。

請幫助專家。

如果您閱讀Sip2Sip設備配置頁面,則說明:

“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不會自動支持的是故障轉移支持,他們說:

“我們建議的是在應用層實現故障轉移機制。”

如果您想要“快速簡便”的設置,您想要做的是將outbound_proxy設置為“proxy.sipthor.net”。 例如

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

如果您需要更強大的解決方案,則需要使用pjsip的SRV解析函數來解析sip2sip.info srv記錄,例如:“_ sip._udp.sip2sip.info”,然后使用結果設置outbound_proxy記錄。

代碼有點涉及。

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日志輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM