example camara and javascript jquery audio webrtc getusermedia

javascript - camara - Enviar un MediaStream al Servidor de host con WebRTC después de ser capturado por getUserMedia



javascript webcam photo (2)

Estoy capturando datos de audio usando getUserMedia() y quiero enviarlos a mi servidor para poder guardarlos como un Blob en un campo de MySQL.

Esto es todo lo que estoy tratando de hacer. He hecho varios intentos para hacer esto usando WebRTC, pero ni siquiera sé en este momento si esto es correcto o incluso la mejor manera de hacerlo.

¿ Alguien puede ayudarme?

Aquí está el código que estoy usando para capturar audio desde el micrófono:

navigator.getUserMedia({ video:false, audio:true, },function(mediaStream){ // output mediaStream to speakers: var mediaStreamSource=audioContext.createMediaStreamSource(mediaStream); mediaStreamSource.connect(audioContext.destintion); // send mediaStream to server: // WebRTC code? not sure about this... var RTCconfig={}; var conn=new RTCPeerConnection(RTCconfig); // ??? },function(error){ console.log(''getUserMedia() fail.''); console.log(error); });

¿Cómo puedo enviar este mediaStream al servidor?

Después de buscar en Google He estado buscando en WebRTC , pero parece ser solo para la comunicación entre pares : en realidad, ahora que estoy investigando esto más, creo que este es el camino a seguir. Parece ser la forma de comunicarse desde el navegador del cliente hasta el servidor web host, pero nada de lo que pruebo está a punto de funcionar.

He estado revisando la documentación del W3C (que me parece demasiado abstracta), y he estado repasando este artículo sobre HTML5 Rocks (que plantea más preguntas que respuestas). Aparentemente necesito un método de señalización, ¿alguien puede aconsejar qué método de señalización es el mejor para enviar mediaStreams, XHR, XMPP, SIP, Socket.io u otra cosa?

¿Qué necesitaré en el servidor para admitir la recepción de WebRTC? Mi servidor web está ejecutando una pila LAMP básica.

Además, ¿es mejor esperar hasta que mediaStream termine de grabar antes de enviarlo al servidor, o es mejor enviar el mediaStream mientras se graba? Quiero saber si estoy haciendo esto de la manera correcta. He escrito cargadores de archivos en javascript y HTML5, pero cargar uno de estos mediaStreams parece terriblemente más complicado y no estoy seguro de si me estoy acercando bien.

Cualquier ayuda sobre esto sería muy apreciada.


No puede cargar la transmisión en vivo mientras se está ejecutando. Esto se debe a que es una transmisión EN VIVO.

Por lo tanto, esto te deja con un puñado de opciones.

  1. Grabe la transmisión de audio usando una de las muchas grabadoras disponibles. RecordRTC funciona bastante bien. Espere hasta que se complete la secuencia y luego cargue el archivo.
  2. Envía fragmentos de audio grabados más pequeños con un temporizador y combínalos nuevamente en el lado del servidor. Este es un ejemplo de esto
  3. Envíe los paquetes de audio a medida que ocurren sobre websockets a su servidor para que pueda manipularlos y fusionarlos allí. Mi versión de RecordRTC hace esto .
  4. Establezca una conexión de igual a igual con su servidor para que pueda capturar la corriente de rtp sin procesar y puede grabar la transmisión usando un código de nivel inferior. Esto se puede hacer fácilmente con Janus-Gateway .

En cuanto a esperar para enviar la transmisión o enviarla en fragmentos, todo depende de cuánto tiempo esté grabando. Si es por un período de tiempo más largo, diría que enviar la grabación en fragmentos o enviar paquetes de audio activamente a través de websockets es una mejor solución ya que cargar y almacenar archivos de audio más grandes desde el lado del cliente puede ser arduo para el cliente.

Firefox en realidad tiene una solución propia para la grabación, pero no es compatible con Chrome, por lo que puede no funcionar en su situación.

Como un aparte, el método de señalización mencionado es para crear / destruir sesiones y realmente no tiene nada que ver con los medios en sí. Solo te preocuparía por esto si estuvieras usando posiblemente la solución número 4 que se muestra arriba.


Una buena API para usted sería MediaRecorder API, pero es menos compatible que Web Audio API, por lo que puede hacerlo utilizando un ScriptNode o usar Recorder.js (o base en él para crear su propio scriptnode).