cordova - cómo transmitir audio en la aplicación phonegap
ionic peerjs (1)
Para acceder a los recursos del teléfono, debe declararlo en AndroidManifest.xml, de modo que el usuario final lo sepa cuando instala la aplicación.
Cordova y / o el complemento Phongap crean una aplicación, incluso si no los está utilizando como una biblioteca webview, por lo que debe solicitar permiso en el manifiesto.
Para micrófono y cámara los permisos son:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
Pero parece que algunos complementos también hacen algunos trucos y necesitan uno más:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
Estoy intentando implementar llamadas de audio en la aplicación phonegap que estoy creando. Estoy usando PeerJS para PeerJS a los 2 clientes. Esta parte está funcionando. Pero el problema es con la URL creada para el flujo de medios. Se parece a esto:
<audio src="blob:file%3A///6212fd77-7d1e-46ba-9abe-cfe96d414b28"></audio>
En lugar de algo como:
<audio src="blob:http%3A///url-to-server.com/6212fd77-7d1e-46ba-9abe-cfe96d414b28"></audio>
Es por eso que no se oye nada de ambos dispositivos (estoy probando con genymotion y mi teléfono inteligente).
Pero lo extraño es que funciona cuando hago pruebas desde el navegador y mi teléfono. Cuando hablo con el micrófono incorporado en mi computadora portátil, lo escucho en mi teléfono. Pero cuando hablo en mi teléfono no se oye nada en mi computadora portátil.
Como referencia, esto es lo que obtengo cuando selecciono el elemento de audio que reproduce la transmisión de medios:
<audio src="blob:http%3A//localhost%3A8100/861180b2-2c12-4134-a6da-89fcb40ef372"></audio>
Aunque no estoy seguro de si este es realmente el problema.
Estoy usando ionic para desarrollar la aplicación y se integra sin problemas con el paso de peatones que básicamente solo empaqueta un navegador Chrome reciente con tu aplicación para que pueda usar cosas nuevas y brillantes sin problemas.
Aquí está el código para solicitar el micrófono:
function getAudio(successCallback, errorCallback){
navigator.getUserMedia({
audio: true,
video: false
}, successCallback, errorCallback);
}
Y luego lo llamo cada vez que alguien inicia una llamada:
getAudio(
function(MediaStream){
console.log(''now calling '' + to);
var call = peer.call(to, MediaStream);
call.on(''stream'', onReceiveStream);
});
Luego, onReceiveStream
convierte el flujo de medios en una URL que luego se asigna al elemento de 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();
}
}
¿Algunas ideas? Gracias por adelantado.
actualizar
Parece que el verdadero problema es que el audio no se puede capturar desde el teléfono porque no se solicita acceder al micrófono cuando se llama a navigator.getUserMedia
. He confirmado que se puede acceder a navigator.getUserMedia
cuando probé con genymotion. Aunque tampoco está solicitando acceso en genymotion también. Estoy usando recordRTC como proveedor de shim.
actualización 2
ok me di por vencido en esto No es realmente posible pedir el micrófono. Lo que estoy tratando ahora es PhoneRTC. Pero estoy atascado en un problema de nuevo. No está construyendo cuando tengo el plugin instalado. Por favor revise este problema en la página de Github de proyectos para obtener más detalles: https://github.com/alongubkin/phonertc/issues/151