2016-07-15 284 views
2

我们正在为一些还没有任何音频设备的嵌入式硬件开发应用程序。目前,我们只是简单地评估PJSIP是否可以在硬件上运行,并且可以通过网络发送音频数据。PJSIP(PJSUA2)是否可以在没有音频设备的情况下使用?

为此,我们有一个客户端需要从文件中读取音频数据,通过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有办法做到这一点吗?有没有人知道或有任何代码执行此(看似)简单任务的经验?

+0

有些人可能会发现加载虚拟声音驱动程序(如果可用)代替它也很有用。 –

回答

3

原来你可以简单地配置端点,以使用空音频设备libInit()调用后立即:

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

也就是说防止其产生错误的自动检测。

相关问题