- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用python开发一个SIP客户端,基于pjsua2 。我有一个基于 python wrapper call 的自定义调用类我的代码能够获得有效的连接。在我的自定义 onCallMediaState
上,我可以访问音频 session 桥:
def onCallMediaState(self, prm):
"""
Manage call media state callbacks.
- Autoconnect audio
"""
ci = self.getInfo()
logger.info("onCallMediaState", media_size=ci.media.size())
self._print_call_info("onCallMediaState")
for media_index, media in enumerate(ci.media):
if media.type == pj.PJMEDIA_TYPE_AUDIO:
if ci.stateText == "CONFIRMED":
"""
It seems a bug with callbacks. CONFIRMED
is send at start and disconnect. So stop
record is manual, cannot use DISCONNECTD
"""
logger.info("Call CONFIRMED")
此时,我可以使用 media_index
来录制或播放通话中传入的音频。例如,用于录制:
def record_call(self, media_index):
"""
Record the audio incoming from call using default playback device
"""
record_media = pj.Endpoint_instance().audDevManager().getCaptureDevMedia()
audio_media = pj.AudioMedia.typecastFromMedia(self.getMedia(media_index))
port_id = audio_media.getPortId()
rx_level = audio_media.getRxLevel()
tx_level = audio_media.getTxLevel()
filename = "file.wav"
logger.info("Recording audio media", port_id=port_id, rx_level=rx_level, tx_level=tx_level)
self._recorder = pj.AudioMediaRecorder()
self._recorder.createRecorder(filename);
self._is_recording = True
record_media.startTransmit(self._recorder)
并且创建了一个 file.wav。或者使用默认音频设备:
def play_call(self, media_index):
"""
Play the audio incoming from call using default playback device
"""
playback_media = pj.Endpoint_instance().audDevManager().getPlaybackDevMedia()
audio_media = pj.AudioMedia.typecastFromMedia(self.getMedia(media_index))
port_id = audio_media.getPortId()
rx_level = audio_media.getRxLevel()
tx_level = audio_media.getTxLevel()
logger.info("Playing audio media", port_id=port_id, rx_level=rx_level, tx_level=tx_level)
audio_media.startTransmit(playback_media)
两个示例都有效并且根据 PjSUA2 Media documentation和 Audio media documentation可以传输和接收音频、播放和录制WAV。但根据pjsip Media Port documentation其他媒体也是可能的。看来SWIG wrapper不支持。
最后,我的问题是,是否可以在不录制wav文件的情况下管理内存中的音频帧?
我不想将音频写入硬盘,只是在内存中使用它,为此我需要直接原始数据。一种解决方法是写入一个 block wav 文件,然后逐个读取它,但这是一种肮脏的解决方案,开销很大。根据Media flow documentation可以获取回调,但我找不到如何在 Python 中执行此操作。 Python 包装器中不存在用于尝试绕过回调的 typedef void *MediaPort
。
最佳答案
我一直在研究同样的问题,但针对的是 pjsua 而不是 pjsua2。最初,pjsip 不支持 pjsua(不确定是否适用于 pjsua2),但我在 GitHub 上发现了一个项目,该项目对 pjproject 2.2 进行了自定义,并带有缓冲流,名为“UFAL-DSG/alex”。
我将自定义移植到“nicolaipre/python3-pjsip-memory-buffer”中的 python3 和 pjproject 2.9。
我知道它可能对你的 pjsua2 没有用,但也许它可以帮助其他人寻找类似的东西。
关于python - 是否可以在python中使用pjsua2来实时使用AudioMedia Memory/Buffer-based Playback Port?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59250633/
如何获取python pjsua? $ wget http://www.pjsip.org/release/2.1/pjproject-2.1.tar.bz2 $ tar xvfj pjproject
我在尝试导入 python 模块 pjsua 时遇到以下错误。我有 Mac OS 10.8.1 版本。我验证了http://www.darrensessions.com/?p=292中提供的解决方案并
大家好! 我正在尝试使用以下分支编译 pjsua: http://svn.pjsip.org/repos/pjproject/branches/projects/android/ .我有尝试将 (ad
我正在尝试编译并运行一个使用 PJSua 构建的小型 c 应用程序。当我尝试运行该应用程序时,出现大量错误,其中之一如下: Undefined symbols for architecture x86
我有一个使用 pjsip 的 iOS Voip 应用程序。而且我必须将所有来自 pjsip 的日志写入文件,但我不知道如何以及从哪里开始。谁能帮帮我? 最佳答案 要将日志从 pjsua 写入文件,我们
我在 Raspberrypi 上使用 PJSIP 2.7 和 Python,我有 2 个问题: 问题 1: 我怎么知道可用的编解码器?我正在使用 enum_codecs() 方法列出编解码器,但它返回
我在 Linux 上使用 pjsip 2.3 时遇到了一些问题。该系统可以正常工作数天。但是过了一段时间,声卡就没有声音了: 所有来电正常挂断/挂断 文件中的声音正常 RTP 正确发送/接收 日志消息
我尝试创建多个 sip 帐户,这些帐户应该与不同的服务器一起工作,但只有在其中一个服务器可用时才能同时与一个服务器一起工作。我可以轻松地创建具有不同 IP 和 SIP 号码的帐户,并且工作正常。但是在
我正在尝试构建和运行 pjsip 的 pjsua 示例应用程序并已成功构建它。 我已经关注了这个 PJSIP教程。 ID : sip:150@123.12.xxx.123:5060 注册商:sip:1
我正在使用 pjsua 的 python 模块并尝试注册到 PBX。 这是代码: import sys import pjsua as pj import threading def log_cb(l
我正在尝试使用 pjsua 向 SIP 服务器发出 SIP 请求,pjsua 是 pjsip 的 SIP 客户端(版本 2.10,2020-02-14)。以这种方式启动客户端: pjsua-x86_6
我希望使用 Android Pjsua2 库在不丢失音频调用的情况下即时暂停和取消暂停视频通话中的视频传输。但是有些我无法理解如何实现该功能来采样 android pjsua2 应用程序。任何帮助将不
我已成功构建适用于 Android 的 pjsua 示例应用程序...但是,没有说明下一步如何进行...是否有关于如何使用示例应用程序作为 SIP 调用基础的有用教程?! 最佳答案 Follow th
我正在编写一个脚本,该脚本使用 curses 在屏幕底部生成一个主窗口和一个日志窗口。 似乎当我导入 pjsua 时它坚持打印到屏幕,即使我已将日志级别设置为 0。这是它输出的内容: 15:49:09
我正在尝试使用 Visual Studio 2012 在 Windows 中构建 _pjsua C 扩展。 我从这里下载了源代码 - http://www.pjsip.org/download.htm
我正在使用 PJSUA 在 android 中开发 VOIP 应用程序,在这里我想静音通话 我正在阅读与 PJSUA 相关的文档,我找到了用于此目的但无法在 android APP 中实现的方法,请任
进口pjsua 这是我第一次在 python 中使用 pjsua 库,我试图在 ubuntu 20 上导入它,它给了我一个错误 ->没有名为“pjsua”的模块 有人可以帮我安装吗? 最佳答案 pyt
我正在使用 pjsua 模块维护一个 python/QT 应用程序 (Linux Mint),该模块旨在处理多个传入的 SIP 调用。这是一个旧版本,1.x。 我发现这个模块与随 Linux Mint
您好,我正在尝试为 Android 视频通话编译 pjsua。在执行 pjusa 上的步骤后我收到以下错误。 ../src/pjsua/pjsua_app_cli.c:1253: error: und
所以我正在使用 C 编写一个带有 PJSUA 的软电话客户端。所以首先我尝试了 pjsip-homepage 给出的示例。现在我在注册到我的 Asterisk 服务器时遇到错误,但我无法弄清楚为什么会
我是一名优秀的程序员,十分优秀!