PJSIP (PJSUA2) 是否可以在没有音频设备的情况下使用?
Is PJSIP (PJSUA2) usable without an audio device?
我们正在为一些还没有任何音频设备的嵌入式硬件开发应用程序。目前,我们只是评估 PJSIP 运行 在硬件上是否正常,是否可以通过网络发送音频数据。
为此,我们有一个客户端需要从文件中读取音频数据,通过 PJSIP 将其发送到服务器,然后服务器将其写入另一个文件,因此我们可以简单地比较两个文件(在感觉它们听起来一样,不一定是完全相同的内容)。所以设置应该是这样的:
+--------+
(Audio file 1) --> |_Client_| +--------+
| PJSIP | --> |_PJSIP__|
+--------+ | Server | --> (Audio file 2)
+--------+
我们正在编译应用程序,但是,当我 运行 客户端应用程序并尝试建立对服务器的调用时,它抱怨没有任何音频硬件(为便于阅读而格式化):
02:14:47.636 call.cpp
pjsua_call_make_call(
acc.getId(),
&pj_dst_uri,
param.p_opt,
this,
param.p_msg_data,
&id)
error: Unable to find default audio device
(PJMEDIA_EAUD_NODEFDEV)
(status=420006)
[../src/pjsua2/call.cpp:485]
我怀疑服务器在接受呼叫时会出现同样的问题,但我们还没有做到这一点。
现在我知道没有音频硬件(dmesg
的输出清楚地表明 ALSA 设备列表是空的)但这对我来说不是问题。
我们已经按照子类化 Call
遵循了指南,但它来自之前编写的一些其他代码,使用 PJSIP 库中的 AudioMedia
和其他 类 的代码,我怀疑它会自动搜索设备。
如前所述,我希望能够发送从 磁盘 读取的一系列音频文件中的一个,所以并不关心音频设备是否可用。
PJSIP 有办法做到这一点吗?有谁知道或有过执行此(看似)简单任务的代码的经验吗?
事实证明,您可以简单地将端点配置为在 libInit()
调用后立即使用空音频设备:
myEndpoint.libInit(myEndpointConfig);
myEndpoint.audDevManager().setNullDev()
防止自动检测产生错误。
配置端点,我在 C++ 上配置 API:
EpConfig ep_cfg;
ep.libInit(ep_cfg);
// Set NULL audio device
ep.audDevManager().setNullDev();
我们正在为一些还没有任何音频设备的嵌入式硬件开发应用程序。目前,我们只是评估 PJSIP 运行 在硬件上是否正常,是否可以通过网络发送音频数据。
为此,我们有一个客户端需要从文件中读取音频数据,通过 PJSIP 将其发送到服务器,然后服务器将其写入另一个文件,因此我们可以简单地比较两个文件(在感觉它们听起来一样,不一定是完全相同的内容)。所以设置应该是这样的:
+--------+
(Audio file 1) --> |_Client_| +--------+
| PJSIP | --> |_PJSIP__|
+--------+ | Server | --> (Audio file 2)
+--------+
我们正在编译应用程序,但是,当我 运行 客户端应用程序并尝试建立对服务器的调用时,它抱怨没有任何音频硬件(为便于阅读而格式化):
02:14:47.636 call.cpp
pjsua_call_make_call(
acc.getId(),
&pj_dst_uri,
param.p_opt,
this,
param.p_msg_data,
&id)
error: Unable to find default audio device
(PJMEDIA_EAUD_NODEFDEV)
(status=420006)
[../src/pjsua2/call.cpp:485]
我怀疑服务器在接受呼叫时会出现同样的问题,但我们还没有做到这一点。
现在我知道没有音频硬件(dmesg
的输出清楚地表明 ALSA 设备列表是空的)但这对我来说不是问题。
我们已经按照子类化 Call
遵循了指南,但它来自之前编写的一些其他代码,使用 PJSIP 库中的 AudioMedia
和其他 类 的代码,我怀疑它会自动搜索设备。
如前所述,我希望能够发送从 磁盘 读取的一系列音频文件中的一个,所以并不关心音频设备是否可用。
PJSIP 有办法做到这一点吗?有谁知道或有过执行此(看似)简单任务的代码的经验吗?
事实证明,您可以简单地将端点配置为在 libInit()
调用后立即使用空音频设备:
myEndpoint.libInit(myEndpointConfig);
myEndpoint.audDevManager().setNullDev()
防止自动检测产生错误。
配置端点,我在 C++ 上配置 API:
EpConfig ep_cfg;
ep.libInit(ep_cfg);
// Set NULL audio device
ep.audDevManager().setNullDev();