问题标签 [pjsua2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - PJSUA 在两个或多个不同的声卡之间切换
我正在使用 pjsua2 进行这个新项目,它在计算机上有两个声音设备,我想独立使用它们,但是在 linux 中,当我插入另一个声卡时,第二个成为默认声卡。所以我无法在第一张声卡上传输,我试图获取音频设备的数量,如下所述: Audio Device API
来源是:
我得到以下输出:
但是当我拔下第二个音频声卡时,结果是一样的。
有没有什么方法可以在 PJSUA 中的两张声卡之间切换和选择,然后选择其中一张来打电话?我的项目的目标是有时使用一个声卡进行传输,而在其他时间使用另一个声卡,两者都用于进行语音通话。
PJSUA 文档描述了如何按照此处所述获取音频媒体设备,但是当我调用获取媒体大小功能时,我总是收到 1!,因此我无法在两个声卡之间切换或选择。
python - 是否可以在python中使用pjsua2实时使用AudioMedia Memory/Buffer-based Playback Port?
我正在基于pjsua2使用 python 开发一个 SIP 客户端。我有一个基于python 包装器调用的自定义 Call 类,并且我的代码能够获得活动连接。在我的 customonCallMediaState
上,我可以访问音频会议桥:
此时我可以media_index
用来录制或播放来自通话的音频。例如,对于录制:
并创建了一个 file.wav。或使用默认音频设备:
这两个示例都有效,根据PjSUA2 媒体文档和音频媒体文档,可以传输和接收音频、播放和录制 WAV。但根据pjsip 媒体端口文档,其他媒体也是可能的。似乎SWIG 包装器不支持它。
最后,我的问题是,是否可以在不记录 wav 文件的情况下管理内存中的音频帧?
我不想将音频写入硬盘,只是在内存中使用它,为此我需要直接原始数据。一种解决方法是编写一个块 wav 文件,并一个一个地读取它,但这是一个开销很大的肮脏解决方案。根据媒体流文档,可以获得回调,但我找不到如何在 Python 中执行此操作。在 python 包装器中不存在typedef void *MediaPort
试图绕过回调。
audio - 无语音传输,NAT 后的 PJSIP
我正在尝试用 pjsua 编写软件电话应用程序。一切正常,声音是双向传输的,当我在同一个本地网络 - 192.168.10.XXX 中使用 Asterisk 和软电话时,但是当我将软电话隐藏在 NAT 后面时,我听不到任何传入声音,传出声音正常。
我的应用程序的端点有 ip:192.168.12.233,路由器公共地址是 192.168.10.216,Asterisk - 192.168.10.15。路由器上的端口转换配置为转发 SIP 的 5060 端口和 RTP 的 4000-5000 端口。我尝试在 pjsua 配置中设置 ip public 地址,但没有效果。
这是来自我的应用程序的 INVITE SIP 消息,我认为问题在于包含错误 IP 地址的 SDP 'c' 字段。您知道如何在 pjsua 中更改它或如何解决该声音问题吗?也许我应该在 Asterisk 配置中改变一些东西?
python - PJSUA2 / PJSIP Python 实时音频流
目前我在 Python3 中使用 PJSUA2 编写脚本。该脚本的目标是使用 SIP 进行语音呼叫。到目前为止,该脚本正在运行。通过createRecorder()
和createPlayer()
传输给他们,我可以记录通话并播放一些 wav 文件。
现在的问题是我不知道实时访问音频数据。我想将音频流传递给 API 并将结果流回。
经过一些研究,如果在文档中发现类似这样的内容: https ://www.pjsip.org/pjmedia/docs/html/group__PJMED__STRM.htm#ga67575c8e7b15e325b98ebaa89639b550
但我不知道在 Python 中使用它
sip - Pjsip/Pjsua 视频问题:帧缓冲区太小
我尝试在我的树莓派 3 上使用 Pjsip/Pjsua 进行 sip 视频通话。在编码之前,我使用主示例应用程序来测试不同的选项。一切似乎都正常(注册,音频通话,..)但是当我尝试开始视频通话时,程序停止并显示以下消息:
pjsua-armv7l-unknown-linux-gnueabihf: ../src/pjmedia-videodev/v4l2_dev.c:737: vid4lin_stream_get_frame_mmap: Assertion `!"frame buffer is too small for v4l2"' failed.
我搜索了很多,包括源代码:
所以我知道 pjmedia_frame 的“大小”低于 v4l2 缓冲区,导致我失败。我的问题很简单:如何更改此设置?我在示例应用程序中尝试了 evetything:更改分辨率、比特率、fps,.. 我发现一些资源说要更改h264 配置文件级别.. 好的,但是我在哪里设置呢?它在 v4l2 管理器中吗?或直接在应用程序中?我该怎么做 ?我在 v4l2 中使用了不同的选项来降低比特率/分辨率,以便有一个小的缓冲区,但仍然得到相同的错误。
在这一点上,我完全无能为力。
有关信息,我按照 PjSip 的建议使用 openh264(无 libx264)编译了 PJsip。
感谢您的帮助/想法;)
pjsip - 如何在不退出的情况下 pjsua2 loop_fovever?
使用 pjsua2 文档,演示代码如下:
它pj_thread_sleep(10000)
用于避免应用程序退出。
我需要 pjsua2 应用程序始终作为服务器端运行,不应该退出。
所以我应该使用这个函数来代替pj_thread_sleep
,比如“loop_forever”,谢谢。
pjsip - 如何处理 pjsip 消息?
我收到了这样的消息:
我用on_rx_request()
听它,然后打印一些东西。
使用 pjsip_module 并注册它,REGISTER
req 就可以了!
运行时没有东西输出,那我应该如何处理数据。谢谢
c# - 在 SIP 中注册后检查 INVITE
我一直在使用PJSIP开发 C# Xamarin 应用程序,但遇到了一个小(或大)障碍。我目前设置的系统是用户将收到来电通知,这允许他们单击通知并打开应用程序。然后,该应用程序将使用 SIP 凭据向 SIP 服务器注册,并且理想情况下会收到一条 INVITE 消息,允许他们接听来电。但是,这根本不是它的工作方式。如果在发送 INVITE 之前应用程序已向 SIP 服务器注册,则可以正常接收呼叫。但是,如果应用程序在之后注册INVITE 被发送,它永远不会被客户端接收或识别。有没有办法使用 SIP 手动检查 INVITE 消息,或者这是一个根本不存在的功能?
android - 如何在 jnilibs 中为 x86 abi 生成 libpjsua2.so
我想在模拟器中使用 android 10 测试应用程序。为此,我在 jnilibs 中只有“armeabi”、“armeabi-v7a”、“arm64-v8a”。但是使用 android 10 设备(模拟器)运行应用程序需要 x86 abi。所以首先我已经为 x86 下载了 ndk。第二件事是我想为 x86 abi 生成 libpjsua2.so。我正在使用 pjsip 库。我提到了https://trac.pjsip.org/repos/wiki/Getting-Started/Android。我试过的是,1)下载最新的 pjsip 版本并提取到文件夹中。2)按照pjsip网站中给出的步骤如下,
到达上述代码时出错,
在我的 pjsip2.7 文件夹中,我找到了一个名为llvm
但这是一个空文件夹的文件夹。我不知道那是什么。我正在使用cent os 7。为什么会出现此错误?我需要做些什么来克服这个问题。
python - 从 python 调用 pj_thread_register
我正在尝试在 python 中通过 pjsua2 使用 pjsip。我有线程问题。
我收到此错误:
如何从 python 调用 pj_thread_register()?