我正在尝试与内部服务器(使用PJSIP库)建立SIP通信,但是,此服务器需要一个具有指定标头值的自定义标头字段REGISTRATION.例如,我们称之为必需的标题MyHeader.
根据我的发现,该pjsua_acc_add()函数将添加一个帐户并使用config结构将其注册到服务器.
reg_hdr_listconfig结构的参数有以下描述:
要在注册请求中添加的可选自定义SIP标头.
这听起来正是我需要的,但似乎对呼叫本身没有任何影响.
这是我到目前为止所拥有的:
pjsua_acc_config cfg;
pjsua_acc_config_default(&cfg);
//...Some other config stuff related to the server...
pjsip_hdr test;
test.name = pj_str("MyHeader");
test.sname = pj_str("MyHdr");
test.type = PJSIP_H_OTHER;
test.prev = cfg.reg_hdr_list.prev;
test.next = cfg.reg_hdr_list.next;
cfg.reg_hdr_list = test;
pj_status_t status;
status = pjsua_acc_add(&cfg, PJ_TRUE, &acc_id);
Run Code Online (Sandbox Code Playgroud)
从服务器端,没有额外的头字段或任何东西.并且用于定义header(pjsua_hdr)的结构没有value或等效字段,所以即使它确实创建了标题,它如何设置值?
编辑:我找到了一个同事的解决方案:
struct pjsip_generic_string_hdr CustomHeader;
pj_str_t name = pj_str("MyHeader");
pj_str_t value = pj_str("HeaderValue");
pjsip_generic_string_hdr_init2(&CustomHeader, &name, &value); …Run Code Online (Sandbox Code Playgroud) 我需要在Android上创建一个SIP堆栈,它将与asterix一起使用,并为用户提供更改编解码器的可能性(我需要实现G729和其他一些编解码器).我是这个领域的新手(语音和编解码器),每一点信息都会受到赞赏.在我通过互联网进行的研究中,我发现了以下SIP堆栈:
您建议将什么用于商业计划?或者你可以推荐其他一些?对于我的特殊情况,它必须支持G729编解码器.
我正在尝试将PJSIP库用于我的Android应用程序.我根据本手册构建了pjsua示例应用程序:https://trac.pjsip.org/repos/wiki/Getting-Started/Android
但是,当示例应用程序启动时,异常触发器:
12-06 15:03:58.043: D/dalvikvm(628): Trying to load lib /data/data/org.pjsip.pjsua2.app/lib/libpjsua2.so 0x4129d980
12-06 15:03:58.064: W/dalvikvm(628): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/pjsip/pjsua2/app/MyApp;
12-06 15:03:58.064: D/AndroidRuntime(628): Shutting down VM
12-06 15:03:58.064: W/dalvikvm(628): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
12-06 15:03:58.083: E/AndroidRuntime(628): FATAL EXCEPTION: main
12-06 15:03:58.083: E/AndroidRuntime(628): java.lang.ExceptionInInitializerError
12-06 15:03:58.083: E/AndroidRuntime(628): at org.pjsip.pjsua2.app.MainActivity.onCreate(MainActivity.java:85)
12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.Activity.performCreate(Activity.java:4465)
12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
12-06 15:03:58.083: E/AndroidRuntime(628): at android.app.ActivityThread.access$600(ActivityThread.java:123)
12-06 15:03:58.083: …Run Code Online (Sandbox Code Playgroud) 我们有一个脚本可以将PJSIP编译成胖的静态库.但我们想创建一个动态库,以便它可以在swift only项目中使用.
2016年9月9日更新:
使用"--enable-shared"选项编译PJSIP时,大多数lib都是正确构建的.但是,有些lib是针对错误的体系结构编译的,在本例中是x86_64而不是arm64
libg7221codec.dylib is architecture: x86_64
libgsmcodec.dylib is architecture: x86_64
libilbccodec.dylib is architecture: x86_64
libresample.dylib is architecture: x86_64
libyuv.dylib is architecture: x86_64
Run Code Online (Sandbox Code Playgroud)
虽然这些是正确的:
libpjsip.dylib is architecture: arm64
libpjsua.dylib is architecture: arm64
libpjsua2.dylib is architecture: arm64
Run Code Online (Sandbox Code Playgroud)
当我们开始建设:
+ ./configure-iphone --enable-shared
+ make dep
+ make clean
Run Code Online (Sandbox Code Playgroud)
al完全正确但是
+ make
Run Code Online (Sandbox Code Playgroud)
生成这些警告:
ld: warning: -undefined dynamic_lookup is deprecated on iOS
ld: warning: -flat_namespace is deprecated on iOS
Run Code Online (Sandbox Code Playgroud)
和很多警告看起来像这样:
ld: warning: ignoring file
output/libilbccodec-arm64-apple-darwin_ios/iLBC_decode.o, file was built
for unsupported file format ( …Run Code Online (Sandbox Code Playgroud) 如何使用xCode构建和编译PJSIP并运行示例代码IPJSUA?
我正在尝试实现一个场景,即App-User A可以在Android上发出语音(视频不那么重要)呼叫App-User B. 似乎很难找到涵盖整体情况的好教程.然而,根据我的研究,我已经能够学习几件事但仍然不足以完成它.
从我到目前为止学到的,实现App-to-App调用,可以使用SIP或WebRTC.PJSIP似乎相当受欢迎.经过很多努力,我能够构建pjsip项目,并在我的Android设备上运行示例pjsua2应用程序,但却陷入了示例应用程序的"帐户设置"部分,因为我不知道如何获得它要求的凭据( ID,注册商,代理,用户名和密码).另外,我似乎无法获得关于学习如何使用pjsip库的体面教程.
我也花了一些时间研究WebRTC,这种看起来比使用jingle的pjsip更简单,但是我遇到的问题是获得有用的资源或教程如何设置信令服务器和一些其他必需的东西,如STUN,TURN等.
虽然,我仍在努力思考(PJSIP或WebRTC使用Jingle)将在语音/声音质量和带宽友好性方面提供最佳体验,但至少我只想让一个没有问题的运行.
在我的搜索过程中,我遇到了Sinch API,它正是我想要的,但由于某些原因,我们被告知不要使用它.
我将非常感谢正确方向上的一点,以及与学习资源的联系.
我正在使用PJSIP开源库进行AES加密.用于AES加密的库不是C编程中可用的内置库.所以,我已经使用外部库(Libmcrypt)进行AES加密.
我按照这个站点将libmcrypt库构建到我的机器(MAC OSX)中. https://coolestguidesontheplanet.com/install-mcrypt-php-mac-osx-10-10-yosemite-development-server/
https://gist.github.com/bricef/2436364
在构建这些库时,它在/ usr/local/lib / path中创建了一个动态库(libmcrypt.dylib).当使用lipo -info libmcrypt.dylib命令检查该库的体系结构时,它显示
Non-fat file: libmcrypt.dylib is architecture: x86_64
Run Code Online (Sandbox Code Playgroud)
但我正在使用PJSIP 为Android和IOS设备创建这些应用程序.他们的架构是armeabi(android)和armv7(IOS).
将libmcrypt.dylib(x86_64)链接到PJSIP库(armv7)时,会显示以下错误.
Undefined symbols for architecture armv7:
"_mcrypt_enc_get_block_size", referenced from:
_encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
_decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
"_mcrypt_generic", referenced from:
_encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
"_mcrypt_generic_deinit", referenced from:
_encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
_decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
"_mcrypt_generic_init", referenced from:
_encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
_decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
"_mcrypt_module_close", referenced from:
_encrypt_AES in …Run Code Online (Sandbox Code Playgroud) 几天后我就被困在这里了.我为twilio客户端(由Jeff Linwood设计)安装了phonegap插件到一个新的phonegap应用程序.如前所述,将twilio ios sdk中的头文件库文件复制到xcode项目中.
但是当我运行测试应用程序时,它会给我以下错误:
2014-12-14 12:30:42.940 TestApp [1802:14622]线程警告:['TCPlugin']花了'221.611084'ms.插件应该使用后台线程.2014-12-14 12:30:42.941 TestApp [1802:14622] PJSIP(1):
pjsua_acc.c.无法创建/发送REGISTER:对象忙(PJSIP_EBUSY)[status = 171001] 2014-12-14 12: 30:43.947 TestApp [1802:14622]状态:离线2014-12-14 12:30:45.727 TestApp [1802:14777] PJSIP(2):pjsua_acc.c .... SIP注册失败,状态= 302(暂时移动) )2014-12-14 12:30:45.734 TestApp [1802:14777] PJSIP(1):pjsua_acc.c .....无法创建/发送REGISTER:对象忙(PJSIP_EBUSY)[status = 171001]
测试如下:
如果您需要更多信息,请随时询问.如果我做错了,请建议我.如果有人能帮助我完成这件事,那就太好了.问候.
我今天已经更新到Xcode 4.5,我不能再生成我的应用程序的功能发布了.使用以前版本的Xcode生成一个版本没有任何问题.
我注意到它在调试(-O0)中直接在我的手机上运行时没有崩溃,但是当我生成一个版本(-Os)时,它会在启动后几秒内一直崩溃.
如果我将pjsua_app.c设置为-O0,同时将项目的其余部分保留为-Os的发布默认值,我也可以生成一个工作版本.
以下是使用"Fast [-O,O1]"设置的崩溃日志:
Incident Identifier: DB1C14AD-5C2A-4F2C-8B03-E483A7D31760
CrashReporter Key: 435140979595045aaa5a1c90fee1a20f6faf280a
Hardware Model: iPhone4,1
Process: myAppName [14144]
Path: /var/mobile/Applications/CD2A07F5-3E72-444D-9BD9-910E4634C4EC/myAppName.app/myAppName
Identifier: myAppName
Version: ??? (???)
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2012-09-19 23:41:39.098 -0600
OS Version: iPhone OS 5.1.1 (9B206)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x361f532c __pthread_kill + 8
1 libsystem_c.dylib 0x32d41208 pthread_kill + 48
2 libsystem_c.dylib …Run Code Online (Sandbox Code Playgroud)