2015-05-05 14 views
16

Sto provando a implementare le chiamate audio nell'app PhoneGap che sto creando. Sto usando PeerJS per connettere i 2 client. Questa parte sta funzionando. Ma il problema è con l'URL creato per il flusso multimediale. Ecco come si presenta:come eseguire lo streaming audio nell'app phonegap

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

Invece di qualcosa di simile:

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

Ecco perché nulla è sentito da entrambi i dispositivi (sto testando con genymotion e il mio smartphone).

Ma la cosa strana è che funziona quando provo da dentro il browser e il mio telefono. Quando parlo con il microfono incorporato nel mio portatile, lo sento sul mio telefono. Ma quando parlo nel mio telefono non si sente nulla sul mio portatile.

Per riferimento questo è quello che sto ottenendo quando seleziono l'elemento audio che svolge il flusso multimediale:

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

Non proprio sicuro se questo è in realtà il problema però.

Sto usando ionic per lo sviluppo dell'applicazione e si integra perfettamente con crosswalk che fondamentalmente si limita a confezionare un browser Chrome recente con la tua app in modo che possa usare cose nuove e brillanti senza problemi.

Ecco il codice per la richiesta per il microfono:

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

E poi lo chiamo io ogni volta che qualcuno avvia una chiamata:

getAudio(
    function(MediaStream){ 

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

Poi onReceiveStream converte il flusso multimediale in un URL che è poi assegnato all'elemento audio:

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

Qualche idea? Grazie in anticipo.

aggiornamento

sembra che il vero problema è che l'audio non può essere catturata dal telefono perché la sua non richiesta per accedere al microfono quando navigator.getUserMedia si chiama. Ho confermato che navigator.getUserMedia è accessibile quando ho provato con genymotion. Anche se non richiede anche l'accesso alla genomotion. Sto usando recordRTC come provider di shim.

aggiornamento 2

ok ho rinunciato a questo. Non è davvero possibile chiedere il microfono. Quello che sto provando in questo momento è PhoneRTC. Ma sono di nuovo bloccato su un problema. Non si costruisce quando ho installato il plugin. Per ulteriori dettagli, consultare questo problema nella pagina Github del progetto: https://github.com/alongubkin/phonertc/issues/151

+0

Non so se si è ancora in e se questo risolverà il tuo problema, ma sono riuscito a riprodurre suoni su un'applicazione cordova grazie a questo plugin http://cordova.apache.org/docs/en/2.4.0/cordova_media_media.md.html. Guarda l'esempio in fondo alla pagina;)) –

risposta

2

Per accedere alle risorse del telefono, è necessario dichiararlo su AndroidManifest.xml, in modo che l'utente finale lo riconosca quando installa l'app.

Il plug-in Cordova eo Phongap crea un'applicazione, anche se non li si utilizza come libreria di visualizzazione Web, quindi è necessario chiedere l'autorizzazione nel manifest.

per microfono e fotocamera i permessi sono:

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

ma sembra che alcuni plugin fa anche alcuni trucchi e ha bisogno di una più:

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