PJSIP从IOS的Nat64networking注册到IPV4服务器
我正在开发使用pjsip-2.6
和IPV4 sip server
的IOS应用程序。 首先在configsite.h
以下代码构buildconfigsite.h
#define PJ_HAS_IPV6 1
build立成功。 然后我把这些库添加到我的项目中。运行在IPV4
networking中的应用程序。它成功注册并且语音通话效果很好。 然后我把networking切换到苹果Nat64
networking..没有作品。这里是我的代码片段。
为了在IPV4
上创buildudp
传输,我使用了下面的代码。
pjsua_transport_config cfg; pjsua_transport_config_default(&cfg); cfg.port = 5060; // Add UDP transport. status = pjsua_transport_create(PJSIP_TRANSPORT_UDP, &cfg, &transport_id); if (status != PJ_SUCCESS) error_exit("Error creating transport", status);
对于在IPV6上创build传输,我使用了下面的代码。
pjsua_transport_config cfg; pjsua_transport_config_default(&cfg); cfg.port = 5070; // Add UDP transport for ipv6 status = pjsua_transport_create(PJSIP_TRANSPORT_UDP6, &cfg, &transport_id_udp6); if (status != PJ_SUCCESS) error_exit("Error creating transport", status);
为了在IPV6networking中创build帐户,我添加了..
acc_cfg.cred_info[0].username = pj_str((char*)uname); acc_cfg.cred_info[0].data_type = PJSIP_CRED_DATA_PLAIN_PASSWD; acc_cfg.cred_info[0].data = pj_str((char *)passwd); acc_cfg.cred_info[0].realm = pj_str("*"); acc_cfg.cred_info[0].scheme=pj_str((char*)"Digest"); char regUri[PJSIP_MAX_URL_SIZE]; sprintf(regUri, "sip:%s", sip_server); acc_cfg.reg_uri = pj_str(regUri); acc_cfg.ipv6_media_use = PJSUA_IPV6_ENABLED; acc_cfg.transport_id = transport_id_udp6;
如果有人能指出我的问题会更好。任何帮助将不胜感激。
我认为你没有在IPV6networking中创build传输。
一个可用于此的补丁(链接: https : //github.com/johanlantz/pj-nat64 )您需要将该补丁集成到下面的NAT64问题中。
1)从上面的链接下载pj-nat64源代码。
2)解压文件并复制pj-nat64.c文件粘贴到pjproject(意思是pjsip源码)(path是:pjsip / src / pjsua-lib)
3)复制pj-nat64.h文件粘贴到pjproject(意思是pjsip源代码)(path是:pjsip / include / pjsua-lib)
4)需要在pjsip的makefile中添加pj-nat64.o(使文件path为:pjsip / build)
5)打开生成文件,在双引号中查找string“定义构buildPJSUA-LIB库”,在pjsua_vid.o之后添加pj-nat64.o
6)编译所有体系结构的pjsip源文件,并获取库文件和头文件
7)Pjsua_start方法返回成功后。 包括以下几行。
#if defined(PJ_HAS_IPV6)&& PJ_HAS_IPV6 == 1
pj_nat64_enable_rewrite_module();
#万一
8)在调用on_reg_state2()方法中添加下面的代码。
the_transport = rp->rdata->tp_info.transport; NSLog(@"transport called %s",the_transport->factory->type_name); if (the_transport->factory->type & PJSIP_TRANSPORT_IPV6) { ipv4=FALSE; NSLog(@"enter into the ipv6 loop "); pjsua_var.acc[0].cfg.ipv6_media_use=PJSUA_IPV6_ENABLED ; nat64_options option=NAT64_REWRITE_INCOMING_SDP | NAT64_REWRITE_ROUTE_AND_CONTACT; pj_nat64_set_options(option); }