我正嘗試在我創建的電話應用程序中實現音頻電話。我正在使用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
不知道你是否還在它,如果這將解決你的問題,但我確實設法在cordova應用上播放聲音,這要歸功於這個插件http://cordova.apache.org/docs/en/2.4.0/cordova_media_media.md.html。 看看頁面底部的示例;)) –