Implementación de chat de video en tiempo real basado en web utilizando websockets HTML5

¿Alguien sabe cómo implementar voz / video sobre IP en una aplicación web usando websockets HTML5?

Sería bueno si pudiera implementar esto con PHP o Python ya que (desafortunadamente) no conozco ningún otro lenguaje de progtwigción en este momento.

Un buen tutorial servirá, así como una solución de comstackción que tengo que pagar.

Actualización 1:
Vídeo agregado porque no solo está relacionado con audio / voip.

Actualización2:
Ya se creó la primera aplicación de video conferencia HTML5. Ver mi propia respuesta

Si solo desea utilizar HTML5, necesitará un navegador que implemente el borrador de captura de medios HTML (disponible aquí ) para acceder a los datos sin procesar del micrófono.

Una vez que tenga estos datos en la mano, debe enviarlos a través de la red. Websockets sería la opción de HTML5 para tener suficientes viajes de ida y vuelta con el servidor (enviar datos de audio locales y recibir datos de audio remotos al mismo tiempo)

Dado que menciona Python, recomendaría mirar alrededor de la implementación retorcida de websockets.

Puede hacer que todos sus clientes se “registren” en el servidor websocket con un identificador de llamadas, de modo que el servidor sepa dónde encontrar un identificador de llamadas dado.

Entonces su servidor necesitará una API de “invitación” donde caller1 “invite” caller2.

Una vez que se configura la llamada y cada cliente comienza a enviar sus datos de audio, el servidor podrá enviar estos datos de audio a la otra parte.

Al recibir datos de audio, el navegador deberá reproducir estos datos de audio en los altavoces, probablemente utilizando la etiqueta de audio HTML5.

Para hacer esto, puede ser obligado a usar un “truco”: en lugar de que el servidor websocket reenvíe los datos de audio sin procesar al cliente, es posible que necesite simular 2 archivos “infinitos”:

  1. caller1.wav: sonido capturado en el micrófono de la persona que llama1
  2. caller2.wav: sonido capturado en el micrófono caller2

caller1 browser agregaría caller2.wav en el atributo audio.src una vez que se establezca la llamada (se informará a caller1 de este evento a través de websocket) y es de esperar que si el servidor de Python agrega los datos de audio sin procesar al caller2.wav a medida que lo recibe, empezaría a jugar.

¡Esto suena como un prototipo genial que vas a piratear!

Buena suerte en tu viaje,

Jerome Wagner

Parece que Ericsson creó la primera aplicación de video conferencia HTML5.

La técnica que utilizaron:

  • Implementó el elemento de dispositivo y la API de Stream (la GUI del elemento de dispositivo está actualmente escrita en JavaScript / CSS)
  • Se agregó MediaStreamManager para asignar las URL de transmisión a la canalización correspondiente en el backend de medios
  • Se agregó MediaStreamTransceiver para controlar el procesamiento y transporte de medios relacionados
  • Se agregó soporte para datos binarios en el protocolo WebSocket.

Ver: labs.ericsson.com :


Video en YouTube: más allá de HTML5: demostración de video y voz conversacional | Ericsson Labs

Desafortunadamente, Ericsson no quiere compartir device_dialog.js (todavía).

WebRTC puede ser una respuesta: http://www.webrtc.org/running-the-demos (actualmente solo Chrome Canary con la marca MediaStream habilitada)

Vea la demostración: https://apprtc.appspot.com (asegúrese de mirar en un navegador adecuado) y el código http://code.google.com/p/webrtc-samples/source/browse/trunk/apprtc/


La razón por la que escribo es … Tengo una tableta Android realmente barata y no puedo instalar Skype ni Vtok ni Google Voice está disponible fuera de los Estados Unidos. Necesito encontrar una solución basada en HTML5 ya que puedo ejecutar Opera Mobile 12 y tengo http://html5demos.com/ funcionando correctamente.

@ trabajo / tengo que ser rápido

Echa un vistazo a la javaScript getUserMedia (CanIUse) – API (W3)

webrtc es la respuesta ahora.

Para la stack de node.js, puede consultar http://www.easyrtc.com/ . Tenga en cuenta que IE aún no ha creado soporte para las API que hacen que webrtc funcione.