2015-05-05 16 views
16

Ich versuche, Audioanrufe in der Phonegap-App zu implementieren, die ich erstelle. Ich benutze PeerJS, um die 2 Clients zu verbinden. Dieser Teil funktioniert. Das Problem liegt jedoch in der URL, die für den Medienstream erstellt wurde. Es sieht wie folgt aus:So streamen Sie Audio in phonegap App

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

Statt etwas wie:

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

Deshalb nichts von beiden Geräten zu hören ist (Ich teste mit genymotion und mein Smartphone).

Aber die seltsame Sache ist, dass es funktioniert, wenn ich aus dem Browser und meinem Handy testen. Wenn ich mit dem eingebauten Mikrofon in meinem Laptop spreche, höre ich es auf meinem Handy. Aber wenn ich in meinem Handy spreche, ist nichts auf meinem Laptop zu hören.

als Referenz das ist, was ich bekomme, wenn ich das Audio-Element auszuwählen, die den Medienstrom spielt:

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

Nicht wirklich sicher, ob dies obwohl eigentlich das Problem ist.

Ich benutze ionic für die Entwicklung der App und es fügt sich nahtlos in den crosswalk ein, der im Grunde nur einen neuen Chrome-Browser mit Ihrer App packt, so dass er glänzende neue Dinge ohne Probleme verwenden kann.

Hier ist der Code für das Mikrofon für die Anforderung:

getAudio(
    function(MediaStream){ 

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

Dann onReceiveStream wandelt den Strom in eine URL Medien, die dann:

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

Und dann nenne ich es, wenn jemand einen Anruf einleitet zugewiesen zum Audioelement:

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(); 
    } 
} 

Irgendwelche Ideen? Danke im Voraus.

Update

es das eigentliche Problem scheint, ist, dass der Ton nicht vom Telefon erfasst werden kann, weil es nicht das Mikrofon anfordert zuzugreifen, wenn navigator.getUserMedia genannt wird. Ich habe bestätigt, dass navigator.getUserMedia zugänglich ist, wenn ich mit Genymotion getestet habe. Obwohl es auch keinen Zugriff auf Genymotion erfordert. Ich verwende recordRTC als Shim-Provider.

Update 2

ok gab ich auf diese auf. Es ist nicht wirklich möglich, nach dem Mikrofon zu fragen. Was ich gerade versuche, ist PhoneRTC. Aber ich stecke wieder an einem Problem fest. Es wird nicht erstellt, wenn ich das Plugin installiert habe. Bitte überprüfen Sie dieses Problem auf der Github-Seite Projekte für weitere Details:

+0

Weiß nicht, ob Sie noch auf sind es und wenn dies Ihr Problem lösen wird, aber ich habe es geschafft, Sound auf einer Cordova-Anwendung dank dieses Plugins http://cordova.apache.org/docs/en/2.4.0/cordova_media_media.md.html zu spielen. Schauen Sie sich das Beispiel unten auf der Seite an;)) –

Antwort

2

Um auf Telefonressourcen zuzugreifen, müssen Sie es auf der AndroidManifest.xml erklären, damit der Endbenutzer es bei der Installation der App weiß.

Cordova und/oder Phongap-Plugin erstellen eine Anwendung, auch wenn Sie sie nicht als Webview-Bibliothek verwenden, so müssen Sie im Manifest um Erlaubnis bitten.

für Mikrofon und Kamera die Berechtigungen sind:

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

aber es scheint, dass einige Plugins auch einige Tricks tut und braucht man mehr:

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