2015-05-05 58 views
16

我正嘗試在我創建的電話應用程序中實現音頻電話。我正在使用PeerJS獲取2個客戶端進行連接。這部分工作。但問題在於爲媒體流創建的URL。它看起來像這樣:如何在電話應用程序中流式傳輸音頻

<audio src="blob:file%3A///6212fd77-7d1e-46ba-9abe-cfe96d414b28"></audio> 

取而代之的是這樣的:

<audio src="blob:http%3A///url-to-server.com/6212fd77-7d1e-46ba-9abe-cfe96d414b28"></audio> 

這就是爲什麼沒有從兩個設備(我與genymotion和我的智能手機測試)聽到。

但奇怪的是,它在我從瀏覽器和手機內測試時正常工作。當我用筆記本電腦上的內置麥克風講話時,我會在手機上聽到它。但是當我在手機上說話時,我的筆記本電腦上聽不到任何聲音。

以供參考,這是當我選擇,其播放流媒體音頻元素是什麼我越來越:

<audio src="blob:http%3A//localhost%3A8100/861180b2-2c12-4134-a6da-89fcb40ef372"></audio> 

不是真的知道這實際上是問題,但。

我使用離子開發的應用程序,它與人行橫道這基本上只是封裝與應用程式最近Chrome瀏覽器,以便它可以使用有光澤新的東西沒有問題的順利整合。

下面是請求麥克風代碼:

function getAudio(successCallback, errorCallback){ 
    navigator.getUserMedia({ 
     audio: true, 
     video: false 
    }, successCallback, errorCallback); 
} 

然後,我把它叫做每當有人發起呼叫:

getAudio(
    function(MediaStream){ 

     console.log('now calling ' + to); 
     var call = peer.call(to, MediaStream); 
     call.on('stream', onReceiveStream); 
}); 

然後onReceiveStream媒體流轉換成是那麼一個URL分配給音頻元素:

function onReceiveStream(stream){ 
    var audio = document.querySelector('audio'); 
    audio.src = window.URL.createObjectURL(stream); 
    audio.onloadedmetadata = function(e){ 
     console.log('now playing the audio'); 
     audio.play(); 
    } 
} 

任何想法?提前致謝。

更新

看來,真正的問題是,音頻不能從手機,因爲它不要求訪問麥克風時navigator.getUserMedia被稱爲捕獲。我已經確認,當我使用genymotion進行測試時,可以訪問navigator.getUserMedia。雖然它也不要求genymotion訪問。我使用recordRTC作爲墊片提供程序。

更新2

好,我放棄了這一點。它不可能要求麥克風。我現在正在嘗試的是PhoneRTC。但我再次陷入了一個問題。當我安裝插件時,它不會構建。請有關詳細信息,在項目檢查出這個問題Github上頁: https://github.com/alongubkin/phonertc/issues/151

+0

不知道你是否還在它,如果這將解決你的問題,但我確實設法在cordova應用上播放聲音,這要歸功於這個插件http://cordova.apache.org/docs/en/2.4.0/cordova_media_media.md.html。 看看頁面底部的示例;)) –

回答

2

要訪問您必須聲明它在AndroidManifest.xml中的手機資源,因此最終用戶在安裝應用知道這一點。

科爾多瓦和或Phongap插件構建一個應用程序,即使你不使用它們作爲網頁視圖庫,所以你要問在清單的權限。

的麥克風和攝像頭的權限是:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

,但似乎有些插件也做了一些技巧,需要多一個:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />