【问题标题】:Is PJSIP (PJSUA2) usable without an audio device?PJSIP (PJSUA2) 可以在没有音频设备的情况下使用吗?
【发布时间】:2016-07-15 06:36:33
【问题描述】:

我们正在为一些还没有任何音频设备的嵌入式硬件开发应用程序。目前,我们只是评估 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 遵循了指导方针,但它来自之前编写的一些其他代码,使用AudioMedia 和PJSIP 库中的其他类的代码,我怀疑它们会自动搜索设备。

如前所述,我希望能够通过从磁盘读取的一系列音频文件中的一个发送,所以并不关心音频设备是否可用。

PJSIP 有办法做到这一点吗?有谁知道执行这个(看似)简单任务的代码或有任何经验?

【问题讨论】:

  • 有些人可能还发现加载一个虚拟声音驱动程序(如果可用)很有用。

标签: pjsip


【解决方案1】:

事实证明,您可以简单地将端点配置为在libInit() 调用之后立即使用空音频设备:

myEndpoint.libInit(myEndpointConfig);
myEndpoint.audDevManager().setNullDev()

防止自动检测产生错误。

【讨论】:

    【解决方案2】:

    配置端点,我在 C++ API 上配置:

    EpConfig ep_cfg;
    ep.libInit(ep_cfg);
    
    // Set NULL audio device
    ep.audDevManager().setNullDev();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 2012-09-14
      • 1970-01-01
      • 2016-11-14
      • 2018-06-08
      • 2018-02-24
      • 1970-01-01
      相关资源
      最近更新 更多