# WebRTC

WebRTC (Web Real-Time Communication) es un proyecto libre y de código abierto que proporciona a los navegadores web y a las aplicaciones móviles comunicación en tiempo real (RTC) a través de interfaces de programación de aplicaciones (API). Permite que la comunicación de audio y vídeo funcione dentro de las páginas web al permitir la comunicación entre pares, eliminando la necesidad de instalar plugins o descargar aplicaciones nativas. Con el apoyo de Apple, Google, Microsoft, Mozilla y Opera, WebRTC se está estandarizando por medio del World Wide Web Consortium (W3C) y del Internet Engineering Task Force (IETF).
Su misión es «permitir el desarrollo de aplicaciones RTP avanzadas y de alta calidad para el navegador, plataformas móviles y dispositivos de IoT, y permitir que todos ellos se comuniquen a través de un conjunto de protocolos comunes». La implementación de referencia se publica como software libre bajo los términos de una licencia BSD. OpenWebRTC proporciona otra implementación libre basada en el framework multimedia GStreamer. El inventor de JavaScript, Brendan Eich, lo describió como un «un nuevo frente en la larga batalla por una web abierta y sin barreras».

## Historia

Un proyecto conocido como WebRTC, para la comunicación en tiempo real basada en navegador, fue hecho Open Source por Google. Esto ha sido continuado por los trabajos en curso para estandarizar los protocolos pertinentes de la IETF y API del navegador en la W3C.
El proyecto WebRTC de la W3C es un trabajo en progreso que cuenta implementaciones avanzadas en Firefox y Chrome. El API se basa en el trabajo previo realizado en la WHATWG. Se conoce como la API ConnectionPeer, y una implementación de los conceptos pre estándar fue creada en los laboratorios Ericsson). El grupo de trabajo de WebRTC espera que esta especificación evolucione significativamente con base en:
* Los resultados de los intercambios en curso por el grupo RTCWEB de la IETF para definir el conjunto de protocolos que, junto con este documento, permitirán comunicaciones en tiempo real en los navegadores Web.
* Los problemas de privacidad que surgen al exponer las capacidades y los flujos locales.
* Las discusiones técnicas dentro del grupo, sobre la implementación de canales de datos en particular.
* La experiencia adquirida a través de la experimentación temprana.
* Los comentarios recibidos de otros grupos e individuos.

## Diseño

Los principales componentes de WebRTC incluyen:
* getUserMedia, que permite a un navegador web acceder a la cámara y el micrófono
* PeerConnection, que establece las llamadas de audio / vídeo
* DataChannels, que permiten a los navegadores a compartir datos a través de peer-to-peer
A partir de marzo de 2012, el Códec IETF WebRTC y el Procesamiento de Requisitos de Medios del proyecto requieren implementaciones para proporcionar PCMA/PCMU (RFC 3551) eventos del teléfono como DTMF (RFC 4733) y Opus (RFC 6716), junto con una serie de códecs de vídeo de capacidades mínimas. El Peerconnection, los canales de datos y una API de captura de los medios de comunicación del navegador se detallan en la W3C.

## Soporte

WebRTC es soportado por los siguiente navegadores:
* PC
** Google Chrome 28+
** Mozilla Firefox v.53
** Opera 12
* Android
** Google Chrome 28 (Habilitado por defecto desde la versión 29)
** Mozilla Firefox 24
** Opera Mobile 12
* Google Chrome OS

## Controversia

En enero de 2015, TorrentFreak informó que los navegadores que soportan WebRTC sufren de un serio fallo de seguridad que compromete la seguridad de los túneles VPN, permitiendo que la verdadera dirección IP pueda ser obtenida. Existen sin embargo extensiones que evitan este problema (p. ej. uBlock Origin).