Escrito por Ramón Saquete
Índice
Compartir escritorios, realizar multiconferencias, enviar archivos de forma segura e instantánea a tus amigos, aplicaciones para realizar Webinars, compartir vídeos o grabaciones de audio capturados directamente desde tu teléfono, eye tracking para realizar test de usabilidad, videojuegos multijugador online en tiempo real y hasta controlados con movimientos de las manos, iniciar sesión mediante reconocimiento de caras, capturar una foto tuya y aplicarle efectos para ponerla en el avatar de un comentario, ver en vídeo y chatear con las personas que están visitando la Web, son sólo algunas de las aplicaciones web que me vienen a la mente al pensar en WebRTC.
Brendan Eich, el creador de JavaScript (lenguaje con el que se usa la API WebRTC), opina lo siguiente de esta tecnología:
WebRTC es un nuevo frente en la larga guerra por una web abierta y sin trabas
Esta tecnología responde a la necesidad de Webs como Facebook o Google Hangouts, de permitir a sus usuarios la comunicación en tiempo real, sin tener que obligarles a instalar su respectivo plugin, (Skype para Facebook o Google Talk para Google Hangouts). Pero las aplicaciones de WebRTC van mucho más allá, y es que ésta tecnología abre un gran abanico de posibilidades, sobre todo en tablet y móvil, en donde al contrario que en un PC, siempre vamos a disponer de cámara y micrófono.
Llegados a este punto, supongo que ya habré captado vuestro interés por saber algo más sobre esta tecnología, así que ahora voy a ponerme un poco más técnico, pero no dejéis de leer, que lo que viene a continuación es igualmente interesante.
Las tres APIs de WebRTC
WebRTC (Web Real-Time Communications) es una API de JavaScript, que se subdivide en tres APIs distintas. En términos generales permite la comunicación en tiempo real, para la transmisión de vídeo, voz o cualquier otro tipo de datos vía P2P (Peer to Peer o comunicación entre pares). Veamos en qué consisten las APIs en las que se subdivide y algunos ejemplos de cada una por separado.
MediaStream o getUserMedia
Permite obtener streams (flujos de datos) de audio, vídeo o combinaciones de ambos del dispositivo. Ésta API también nos permite capturar la pantalla para compartir nuestro escritorio.
Una vez obtenida la información de la cámara, la pantalla o el micrófono del usuario, podemos aplicarle efectos en el cliente, enviarla a nuestro servidor para almacenarla para cualquier tipo de aplicación social o podemos usar las siguientes APIs para enviar la información en tiempo real a otro usuario o incluso a varios usuarios.
Ejemplos:
- Camara de tu móvil en la Web
- Un grabador de audio
- Capturas de pantalla
RTCPeerConnection
Esta API se encarga de realizar el streaming de video o audio, con todo lo que esto conlleva: procesar la señal, realizar la comunicación, ejecutar el códec, administrar el ancho de banda, la seguridad, etc. Éstas son tareas bastante complejas y esta API permite implementarlas, sin que el programador se tenga que preocupar por nada.
RTCDataChannel
Dependiendo del tipo de aplicación, puede que necesitemos hacer streaming de otro tipo de datos que no sea video o audio.
RTCDataChannel, realiza la comunicación bidireccional de cualquier tipo de datos entre pares, usando la misma API que WebSockets (la API utilizada para la comunicación bidireccional entre el cliente y el servidor). Permite que el flujo de datos sea fiable y la comunicación más lenta (TCP), o que no sea fiable y la comunicación sea más rápida (UDP).
Ejemplo:
P2P (Peer to Peer)
En la comunicación P2P o comunicación entre pares, cada nodo es al mismo tiempo cliente y servidor, lo que permite que los usuarios puedan comunicarse más rápido entre ellos, puesto que la comunicación se realiza directamente entre cada pareja de cliente y servidor de cada lado, sin pasar por un servidor central, siendo esta la principal característica que aporta la tecnología WebRTC.
Para la comunicación P2P, necesitamos que ambos equipos se puedan comunicar. Si algún firewall en los equipos implicados lo impide, toda la comunicación pasará por un servidor TURN y por lo tanto el P2P no será directo, aunque esto sólo ocurre en el 14% de los casos. También puede usar un servidor STUN para obtener la IP pública al inicio, para intentar resolver problemas de comunicación debido al uso de NAT. Para los casos en queramos retransmitir a muchos usuarios no nos quedará más remedio que usar un servidor intermedio MCU (Multipoint Control Unit), puesto que el equipo que sirve el video, puede no tener la velocidad de transferencia necesaria para enviarlo a todos sus clientes.
Estado actual
WebRTC ya tiene versión estable para Chrome para escritorio, Chrome para Android, Firefox y Opera. Internet Explorer como siempre, va a la cola de la tecnología, así que probablemente no veremos WebRTC en este navegador hasta dentro de algunos años, pero eso no es importante, ya que la cuota de mercado de éste en móviles y tablets es insignificante, y es aquí donde WebRTC es más interesante.
Esta tecnología va a ser clave para que ocurra lo que ya he comentado en otras ocasiones, que JavaScript y HTML5 se conviertan en los lenguajes de desarrollo más usados para realizar aplicaciones móviles.
EXCELENTE