2016-07-15 132 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() 

也就是說防止其產生錯誤的自動檢測。

相關問題