- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些默认没有音频设备的嵌入式设备。它们通过 FPGA 相互通信。所以我的问题是,如何在 pcm 中从 pjsip 捕获/播放音频以便使用 FPGA 发送/接收它?
我知道有 pjmedia_mem_player_create() 和 pjmedia_mem_capture_create() 但我似乎找不到任何关于使用这些函数的好信息。
我尝试了以下代码,但断言失败,因为函数的参数之一是“空”。
错误:
pjmedia_mem_capture_create: Assertion `pool && buffer && size && clock_rate && channel_count && samples_per_frame && bits_per_sample && p_port' failed.
注意:我主要将 pjsua2 用于其他一切,如注册、传输等。此外,默认音频设置为 null ep.audDevManager().setNullDev(); 如果没有这个,调用/接听电话就会失败?!
void MyCall::onCallMediaState(OnCallMediaStateParam &prm){
CallInfo ci = getInfo();
pj_caching_pool_init(&cp, &pj_pool_factory_default_policy, 0);
pj_pool_t *pool = pj_pool_create(&cp.factory, "POOLNAME", 2000, 2000, NULL);
void *buffer;
pjmedia_port *prt;
#define CLOCK_RATE 8000
#define CHANELS 1
#define SAMPLES_PER_FRAME 480
#define BITS_PER_SAMPLE 16
pjmedia_mem_capture_create( pool, //Pool
buffer, //Buffer
2000, //Buffer Size
CLOCK_RATE,
CHANELS,
SAMPLES_PER_FRAME,
BITS_PER_SAMPLE,
0, //Options
&prt); //The return port}
更新
断言失败是因为缓冲区变量没有分配给它任何内存。每帧分配两倍数量的样本以获得足够的内存。
buffer = pj_pool_zalloc(pool, 960);
还需要使用 pjmedia_mem_capture_set_eof_cb2()
注册一个回调(最后的两个对于 PJSIP 2.10 或更高版本是必需的)显然从那里可以使用缓冲区。只是我的实现 atm 不执行回调。
最佳答案
看起来我找到了解决方案,我已经修改了您的代码并使用 pjsua API 在 C 中编写了一个简单的代码以将每一帧转储到文件中。抱歉乱七八糟,我不精通C:
pjsua_call_info ci;
pjsua_call_get_info(call_id, &ci);
pjsua_conf_port_info cpi;
pjsua_conf_get_port_info(ci.conf_slot, &cpi);
pj_pool_t *pool = pjsua_pool_create("POOLNAME", 2000, 2000);
pjmedia_port *prt;
uint buf_size = cpi.bits_per_sample*cpi.samples_per_frame/8;
void *buffer = pj_pool_zalloc(pool, buf_size);
pjsua_conf_port_id port_id;
pjmedia_mem_capture_create( pool,
buffer,
buf_size,
cpi.clock_rate,
cpi.channel_count,
cpi.samples_per_frame,
cpi.bits_per_sample,
0,
&prt);
pjmedia_mem_capture_set_eof_cb(prt, buffer, dump_incoming_frames);
pjsua_conf_add_port(pool, prt, &port_id);
pjsua_conf_connect(ci.conf_slot, port_id); //connect port with conference
///////dumping frames///
static pj_status_t dump_incoming_frames(pjmedia_port * port, void * usr_data){
pj_size_t buf_size = pjmedia_mem_capture_get_size(port);
char * data = usr_data;
...
fwrite(data,sizeof(data[0]),buf_size,fptr);
...
}
文档说 pjmedia_mem_capture_set_eof_cb
已弃用,但我无法工作 pjmedia_mem_capture_set_eof_cb2
, buf_size
每次调用 dump_incoming_frames
都是 0所以只剩下不推荐使用的功能。我也用 creating custom port 取得了同样的结果.
希望你能轻松修改成你的C++/pjsua2代码
更新:我修改了 PJSIP 并将音频输入输出流打包到适当的 PJSUA2/Media 类中,以便可以从 Python 调用它。完整代码是 here .
关于c++ - pjsip抓取并播放pcm数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60164116/
我们正在为一些还没有任何音频设备的嵌入式硬件开发应用程序。目前,我们只是在评估 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 先感谢您。 最佳答案
我是一名优秀的程序员,十分优秀!