- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试在基于 Qt 控制台的应用程序中的多个端口上监听 SIP 消息。我只是在创建我的类代理的多个对象。
proxy.cpp 示例:
proxy* thisProxy;
proxy::proxy(quint16 port, QObject *parent) :
QObject(parent), portFromConfig(port)
{
thisProxy = this;
thread = new QThread(this);
connect(thread, SIGNAL(started()), this, SLOT(start()));
connect(thread, SIGNAL(finished()), this, SLOT(deleteLater()));
this->moveToThread(thread);
thread->start();
}
void proxy::start()
{
pj_status_t status;
pj_caching_pool caching_pool;
pj_sockaddr_in sockaddr;
pj_str_t ourAddressFromConfig;
pj_thread_desc initdec;
pj_thread_t* thread = 0;
if (!pj_thread_is_registered() && pj_thread_register("PJ_THREAD", initdec, &thread ) != PJ_SUCCESS)
return;
pjsip_module proxy = {
NULL,
NULL,
pj_str("proxy"),
-1,
PJSIP_MOD_PRIORITY_UA_PROXY_LAYER,
NULL,
NULL,
NULL,
NULL,
&onReceivedRequest,
&onReceivedResponse,
NULL,
NULL,
NULL
};
pj_log_set_level(4);
//initialize pj
status = pj_init();
if (status != PJ_SUCCESS)
{
qDebug() << "pj_init failed";
return;
}
//initilaize pjlib_util
status = pjlib_util_init();
if (status != PJ_SUCCESS)
{
qDebug() << "pjlib_util_init failed";
return;
}
//initialize caching pool
pj_caching_pool_init(&caching_pool, &pj_pool_factory_default_policy, 0);
//create the endpoint
status = pjsip_endpt_create(&caching_pool.factory, NULL, &endpoint);
if (status != PJ_SUCCESS)
{
qDebug() << "pjsip_endpt_create failed";
return;
}
//specify our socket
ourAddressFromConfig = pj_str(addressFromConfig.toLatin1().data());
sockaddr.sin_family = pj_AF_INET();
if (ourAddressFromConfig.slen)
pj_inet_aton(&ourAddressFromConfig, &sockaddr.sin_addr);
else
sockaddr.sin_addr.s_addr = 0;
sockaddr.sin_port = pj_htons((pj_uint16_t) portFromConfig);
//start the socket
status = pjsip_udp_transport_start(endpoint, &sockaddr, NULL, 1, &transport);
if (status != PJ_SUCCESS)
{
qDebug() << "pjsip_udp_transport_start failed";
return;
}
//create the caching pool
poolt = pj_pool_create(&caching_pool.factory, "UDPproxy", 4000, 4000, NULL);
//register the proxy module
status = pjsip_endpt_register_module(endpoint, &proxy);
if (status != PJ_SUCCESS)
{
qDebug() << "pjsip_endpt_register_module failed";
return;
}
pj_time_val delay = {0, 10};
while(true)
{
pjsip_endpt_handle_events(endpoint, &delay);
}
qDebug() << "finished";
}
最有趣的是,当我创建前两个 proxy 实例时,它可以正常工作,但是当我创建第三个实例时,我的应用程序因这些错误而终止:
server: ../src/pjsip/sip_tel_uri.c:173: pjsip_tel_uri_subsys_init: Assertion `status==0' failed.
Aborted (core dumped)
来自转储核心的回溯:
(gdb) bt
#0 0xb777d424 in __kernel_vsyscall ()
#1 0xb6e881df in raise () from /lib/i386-linux-gnu/libc.so.6
#2 0xb6e8b825 in abort () from /lib/i386-linux-gnu/libc.so.6
#3 0xb6e81085 in ?? () from /lib/i386-linux-gnu/libc.so.6
#4 0xb6e81137 in __assert_fail () from /lib/i386-linux-gnu/libc.so.6
#5 0x08079344 in pjsip_tel_uri_subsys_init ()
#6 0x08069265 in pjsip_endpt_create ()
#7 0x080569a7 in proxy::start (this=0x8905db8) at ../server/proxy.cpp:93
#8 0x0805f0c1 in proxy::qt_static_metacall (_o=0x8905db8, _c=QMetaObject::InvokeMetaMethod, _id=1, _a=0xb3aff270) at moc_proxy.cpp:75
#9 0xb73d4c5d in QMetaObject::activate(QObject*, int, int, void**) () from /home/dev/Qt/5.1.1/gcc/lib/libQt5Core.so.5
#10 0xb73d567b in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /home/dev/Qt/5.1.1/gcc/lib/libQt5Core.so.5
#11 0xb7444ef5 in QThread::started(QThread::QPrivateSignal) () from /home/dev/Qt/5.1.1/gcc/lib/libQt5Core.so.5
#12 0xb71d7388 in ?? () from /home/dev/Qt/5.1.1/gcc/lib/libQt5Core.so.5
#13 0xb713ad4c in start_thread () from /lib/i386-linux-gnu/libpthread.so.0
#14 0xb6f49bae in clone () from /lib/i386-linux-gnu/libc.so.6
我不知道我做错了什么。有人可以帮忙吗?
在此先感谢您的帮助。
最佳答案
主要问题是您要在每个 proxy
实例上创建一个新的 SIP 端点,尽管当前文档指出“理论上”支持 SIP 端点的多个实例,但实际上并非如此.
更具体地说,当您第一次调用 pjsip_endpt_create
时,会注册三个静态 URI 解析器(用于 sip:
、sips:
和 tel :
), 第二次tel:
又被注册了(有检查避免sip:
和sips:
但不是tel:
) 并且,当第三次尝试再次注册 tel:
时,超过了 URI 解析器的最大数量 (4),注册失败并且断言转储。
我建议您只使用一个 SIP 端点,为每个 proxy
实例创建一个新的 UDP 套接字,并使用 pjsip_udp_transport_attach2
将其附加到端点
关于c++ - 使用 Qt 和 pjsip 在一个应用程序中的多个端口上监听 SIP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20595836/
我们正在为一些还没有任何音频设备的嵌入式硬件开发应用程序。目前,我们只是在评估 PJSIP 是否在硬件上运行良好,是否可以通过网络发送音频数据。 为此,我们有一个客户端需要从文件中读取音频数据,通过
pjsua 在 openwrt 中运行,我们使用 USB SoundCard。 接电话的时候总是很卡,抓拍和回放都不好用! 提示:我们已经使用auddemo测试了我的声卡,录音/播放都很好,捕获id为
任何人都可以指导我一个 API,我可以告诉 pjsip 使用我自己的 本地端口 (UDP) 用于媒体? 在SDP谈判的时候,我读到可以了解一下 通过调用 pjmedia_sdp_neg_get_act
我正在使用 PJSIP 开发适用于 Android、iOS 等的软电话拨号器应用程序。我需要知道如何将 G.729 编解码器与项目集成。我在 PJSIP 网站本身中看到了有关使用 Intel IPP
我正在使用 Pjsip 库实现SIP 视频通话。 我的 View 已成功传输给其他人,但我想要的是在我的屏幕上显示我的相机 View (类似于 WhatsApp)。 我发现Pjsip 正在使用摄像头
我正在开发一个iOS应用程序,其功能是使用PJSUA调用电话。同时,我的同事正在使用 PJSUA 2 为 Android 制作相同的应用程序。当我们从 Android 到 iOS 或从 Android
我正在做一个项目,以使 iOS 应用程序像 Viber/Skype 一样工作使用 VoIP 协议(protocol)。为此,我使用 pjsip SDK但我得到一些错误:( 文件未找到, 未知类型名称等
我发现有两个本地帐户,ID 为 0(IPv4 地址)和 ID 为 1(IPv6 地址)。因此,当我注册时,该用户帐户使用 id 2 注册。我想知道这些本地帐户的目的是什么。在我注册之前,用户 id 1
我正在尝试为 eclipse 使用 pjsip-jni wrapper 来制作基于 Android sip 的客户端。 我一直在努力研究如何在 eclipse 中编译和使用它,但还没有找到正确的轨道。
我想开发一个简单的 VoIP 系统。我想用同一个 sip 库实现客户端和服务器(代理服务器、注册服务器……)。 PJSIP 可以实现服务器吗? 我在客户端使用 PJSIP,没问题。 PJSIP 适合实
我已经构建了视频支持库,它显示找到了 2 个编解码器 h263 和 h264。 但是当我运行 ipjsua 视频流时没有发生,我尝试启用视频,启用 autorx 和 autotx 但没有积极的结果。
我正在使用 PjSIP 进行 SIP 调用。我已经按照说明集成了 PjSIP 项目 https://code.google.com/p/siphon/wiki/Compilation & How To
我正在使用 PJSUA/PJSIP 在 Ubuntu 16.04 上编写应用程序。 我需要检测调用何时挂断。是否有一个排序 call_state() 函数? 谢谢! 最佳答案 找到解决方案 here和
我想在通过 rtp 发送之前用 pjsip 库中的 Bouncy CaSTLe 加密数据。谁用过 pjsip,请帮助我,我对 C 不友好,所以我应该在哪里做。在对 pjsip lib 文件进行一些研究
最近我必须使用 voip 实现后台工作应用程序。为此,我使用 PJSip。现在我已经完成了在应用程序运行时完美运行的注册和处理调用。 当应用进入后台时,前 10 分钟工作正常 -> 新的来电被捕获并作
我正在尝试将 PJSip 添加到我正在处理的项目中。我有这种方法来注册我的帐户,但每次都会出现“致命信号 11”错误。 这是方法 public int setRegistration() {
环境:OS X 10.9.3、Xcode 5.1、PJSIP-2.2.1我想构建简单的 PJSIP,shell 脚本如下: #!/bin/bash SOURCE="pjproject-2.2.1" C
所以我有一个已编译并正在运行的 Siphon 应用程序,但它就是无法进行调用。我得到: 注册错误 - 默认错误消息。 完整的错误是这样的: 15:04:02.032 pjsua_call.c 使用 a
对于 iOS 应用程序,我需要知道当远程方停止其现有调用的视频时。是否有任何由 pjsip 库触发的 API 或事件? 在此先感谢您的帮助。 最佳答案 pjsua_call_vid_stream_is
我正在尝试从 call 音频媒体中获取音频流,以便将其发送到语音转文本引擎(从流输入中转录音频)。关于如何实现这一点的任何想法? 版本信息:POSIX的pjlib 2.8-svn 先感谢您。 最佳答案
我是一名优秀的程序员,十分优秀!