API que admite la comunicación entre navegadores
WebRTC ( Web Real-Time Communication ) es un proyecto gratuito y de código abierto que proporciona a los navegadores web y 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 y transmisión de audio y video funcione dentro de las páginas web al permitir la comunicación directa entre pares , lo que elimina la necesidad de instalar complementos o descargar aplicaciones nativas. [3]
Con el apoyo de Apple , Google , Microsoft , Mozilla y Opera , las especificaciones WebRTC han sido publicadas por el Consorcio World Wide Web (W3C) y el Grupo de Trabajo de Ingeniería de Internet (IETF). [4] [5]
Historia
En mayo de 2010, Google compró Global IP Solutions o GIPS, una empresa de software de VoIP y videoconferencia que había desarrollado muchos de los componentes necesarios para RTC, como códecs y técnicas de cancelación de eco. Google convirtió la tecnología GIPS en código abierto y se puso en contacto con los organismos de normalización pertinentes de la IETF y el W3C para garantizar el consenso de la industria. [6] [7] En mayo de 2011, Google lanzó un proyecto de código abierto para la comunicación en tiempo real basada en navegador, conocido como WebRTC. [8] A esto le siguió un trabajo continuo para estandarizar los protocolos pertinentes en la IETF [9] y las API de navegador en el W3C. [10]
En enero de 2011, Ericsson Labs creó la primera implementación de WebRTC utilizando una biblioteca WebKit modificada. [11] [12] En octubre de 2011, el W3C publicó su primer borrador de la especificación. [13] Los hitos de WebRTC incluyen la primera videollamada entre navegadores (febrero de 2013), las primeras transferencias de datos entre navegadores (febrero de 2014) y, a partir de julio de 2014, Google Hangouts "en cierto modo" utilizaba WebRTC. [14]
El borrador de la API del W3C se basó en el trabajo preliminar realizado en el WHATWG . [15] Se lo denominó ConnectionPeer API y se creó una implementación conceptual previa a los estándares en Ericsson Labs. [11] El grupo de trabajo WebRTC espera que esta especificación evolucione significativamente en función de:
- Resultados de los intercambios en curso en el grupo RTCWEB complementario en IETF [16] para definir el conjunto de protocolos que, junto con este documento, definen las comunicaciones en tiempo real en los navegadores web. Si bien no se exige ningún protocolo de señalización, SIP sobre WebSockets ( RFC 7118) se utiliza a menudo en parte debido a la aplicabilidad de SIP [17] a la mayoría de los escenarios de comunicación previstos, así como a la disponibilidad de software de código abierto como JsSIP .
- Problemas de privacidad que surgen al exponer capacidades locales y transmisiones locales
- Discusiones técnicas dentro del grupo, en particular sobre la implementación de canales de datos [18]
- Experiencia adquirida a través de la experimentación temprana
- Comentarios de otros grupos e individuos
En noviembre de 2017, la especificación WebRTC 1.0 pasó de borrador de trabajo a recomendación candidata. [19]
En enero de 2021, la especificación WebRTC 1.0 pasó de ser una recomendación candidata a una recomendación . [4]
Diseño
Los componentes principales de WebRTC incluyen varias API de JavaScript :
getUserMedia
adquiere los medios de audio y video (por ejemplo, accediendo a la cámara y al micrófono de un dispositivo). [20]RTCPeerConnection
Permite la comunicación de audio y video entre pares. Realiza el procesamiento de señales , el manejo de códecs , la comunicación entre pares, la seguridad y la gestión del ancho de banda . [21]RTCDataChannel
permite la comunicación bidireccional de datos arbitrarios entre pares. Los datos se transportan utilizando SCTP sobre DTLS . [22] Utiliza la misma API que WebSockets y tiene una latencia muy baja . [23]
La API WebRTC también incluye una función de estadísticas:
getStats
permite que la aplicación web recupere un conjunto de estadísticas sobre las sesiones WebRTC. Estos datos estadísticos se describen en un documento independiente del W3C. [24]
La API WebRTC no incluye disposiciones para la señalización , es decir, para descubrir pares a los que conectarse y determinar cómo establecer conexiones entre ellos. Las aplicaciones utilizan el establecimiento de conectividad interactiva para las conexiones y son responsables de administrar las sesiones, posiblemente basándose en cualquiera de los protocolos Session Initiation Protocol , Extensible Messaging and Presence Protocol ( XMPP ), Message Queuing Telemetry Transport , Matrix u otro. La señalización puede depender de uno o más servidores. [25] [26]
La RFC 7478 exige que las implementaciones proporcionen como capacidades mínimas los códecs de audio PCMA / PCMU ( RFC 3551), Telephone Event as DTMF ( RFC 4733) y Opus ( RFC 6716) . Las API de PeerConnection, canal de datos y navegador de captura de medios se detallan en la especificación W3C.
El W3C está desarrollando ORTC (Object Real-Time Communications) para WebRTC. [27]
Aplicaciones
WebRTC permite a los navegadores transmitir archivos directamente entre sí, reduciendo o eliminando por completo la necesidad de alojamiento de archivos del lado del servidor. WebTorrent utiliza un transporte WebRTC para permitir el intercambio de archivos de igual a igual mediante el protocolo BitTorrent en el navegador. [28] Algunos sitios web de intercambio de archivos lo utilizan para permitir que los usuarios se envíen archivos directamente entre sí en sus navegadores, aunque esto requiere que el cargador mantenga la pestaña abierta hasta que se haya descargado el archivo. [29] [30] [31] Algunas CDN , como Peer5, propiedad de Microsoft, utilizan el ancho de banda del cliente para cargar medios a otros pares conectados, lo que permite que cada par actúe como un servidor de borde. [32] [33]
Aunque inicialmente se desarrolló para navegadores web, WebRTC tiene aplicaciones para dispositivos que no son navegadores, incluidas plataformas móviles y dispositivos IoT . Algunos ejemplos incluyen telefonía VoIP basada en navegador , también llamada teléfonos en la nube o teléfonos web, que permiten realizar y recibir llamadas desde un navegador web, reemplazando el requisito de descargar e instalar un softphone. [34]
Apoyo
WebRTC es compatible con los siguientes navegadores (lista incompleta; se especifica la versión compatible más antigua):
Compatibilidad de códecs en todos los navegadores
WebRTC establece un conjunto estándar de códecs que todos los navegadores compatibles deben implementar. Algunos navegadores también pueden admitir otros códecs. [41]
Vulnerabilidad
En enero de 2017, TorrentFreak informó sobre una falla de seguridad grave en los navegadores compatibles con WebRTC, que comprometió la seguridad de los túneles VPN al exponer la verdadera dirección IP de un usuario . [43] Las solicitudes de lectura de la dirección IP no son visibles en la consola de desarrollador del navegador y no son bloqueadas por la mayoría de los complementos de bloqueo de anuncios , privacidad y seguridad , lo que permite el seguimiento en línea a pesar de las precauciones. [44]
Se ha informado que la causa de la fuga de direcciones no es un error que pueda ser corregido, sino que es fundamental para el funcionamiento de WebRTC; sin embargo, existen varias soluciones para mitigar el problema. La fuga de WebRTC se puede probar y se ofrecen soluciones para la mayoría de los navegadores. [45] WebRTC se puede deshabilitar, si no es necesario, en la mayoría de los navegadores. El complemento uBlock Origin puede solucionar este problema (como algunos navegadores ahora solucionan este problema por sí mismos, a partir de uBlock Origin v1.38 en adelante, esta opción se ha deshabilitado en estos navegadores [46] ).
Véase también
Referencias
- ^ "WebRTC 1.0: comunicación en tiempo real entre navegadores". World Wide Web Consortium . 27 de septiembre de 2018. Archivado desde el original el 7 de abril de 2019. Consultado el 25 de marzo de 2019 .
- ^ "Src/webrtc - Git en Google". Archivado desde el original el 23 de abril de 2018. Consultado el 22 de abril de 2018 .
- ^ Cómo WebRTC está revolucionando la telefonía Archivado el 7 de abril de 2014 en Wayback Machine . Blogs.trilogy-lte.com (21 de febrero de 2014). Consultado el 11 de abril de 2014.
- ^ ab "Web Real-Time Communications (WebRTC) transforma el panorama de las comunicaciones al convertirse en una recomendación del Consorcio World Wide Web (W3C) y en estándares del Grupo de Trabajo de Ingeniería de Internet (IETF)". Consorcio World Wide Web . 26 de enero de 2021. Archivado desde el original el 27 de julio de 2022 . Consultado el 27 de enero de 2021 .
- ^ "Páginas de estado de Rtcweb". tools.ietf.org . Archivado desde el original el 20 de abril de 2020 . Consultado el 18 de febrero de 2021 .
- ^ "¿Son los componentes WebRTC de la adquisición de Global IP Solutions por parte de Google?". WebRTC . Archivado desde el original el 7 de junio de 2011 . Consultado el 6 de febrero de 2018 .
- ^ Wauters, Robin (18 de mayo de 2010). «Google hace una oferta en efectivo de 68,2 millones de dólares por Global IP Solutions». TechCrunch . Archivado desde el original el 7 de febrero de 2018 . Consultado el 6 de febrero de 2018 .
- ^ Harald Alvestrand (31 de mayo de 2011). «Google lanza el código fuente de WebRTC». [email protected]. Archivado desde el original el 27 de febrero de 2013. Consultado el 12 de septiembre de 2012 .
- ^ "Carta del grupo de trabajo sobre comunicación en tiempo real en navegadores WEB (rtcweb)". Archivado desde el original el 11 de noviembre de 2013. Consultado el 11 de noviembre de 2013 .
- ^ "WebRTC 1.0: comunicación en tiempo real entre navegadores". W3.org. Archivado desde el original el 5 de septiembre de 2012. Consultado el 12 de septiembre de 2012 .
- ^ ab "Más allá de HTML5: video conversacional entre pares". Blog de investigación de Ericsson . Labs.ericsson.com. 25 de enero de 2011. Archivado desde el original el 25 de febrero de 2017 . Consultado el 21 de marzo de 2021 .
- ^ Stefan Håkansson; Stefan Ålund (26 de mayo de 2011). «Beyond HTML5: Experiment with Real-Time Communication in a Browser» (Más allá de HTML5: Experimento con comunicación en tiempo real en un navegador). Blog de investigación de Ericsson . Archivado desde el original el 7 de febrero de 2018. Consultado el 6 de febrero de 2018 .
- ^ "WebRTC 1.0: Comunicación en tiempo real entre navegadores (borrador de trabajo del W3C del 27 de octubre de 2011)". World Wide Web Consortium . 27 de octubre de 2011. Archivado desde el original el 29 de octubre de 2011 . Consultado el 6 de febrero de 2018 .
- ^ Nowak, Szymon. «WebRTC: mucho más que videoconferencias». GitHub . Archivado desde el original el 7 de febrero de 2018. Consultado el 6 de febrero de 2018 .
- ^ "Introducción: estándar HTML". Whatwg.org. Archivado desde el original el 16 de agosto de 2014. Consultado el 12 de septiembre de 2012 .
- ^ "Páginas de estado de Rtcweb". Tools.ietf.org. Archivado desde el original el 5 de septiembre de 2012. Consultado el 12 de septiembre de 2012 .
- ^ SIP Trunking, MTPL (18 de julio de 2023). «SIP Trunking VoIP con WebRTC SDK». Moon Technolabs . Archivado desde el original el 5 de agosto de 2023. Consultado el 18 de julio de 2023 .
- ^ "draft-jesup-rtcweb-data-protocol-00 - Protocolo de canal de datos WebRTC". Tools.ietf.org. Archivado desde el original el 2012-10-31 . Consultado el 2012-09-12 .
- ^ "WebRTC 1.0: comunicación en tiempo real entre navegadores (recomendación candidata del W3C del 2 de noviembre de 2017)". 2 de noviembre de 2017. Archivado desde el original el 2 de noviembre de 2017 . Consultado el 25 de marzo de 2019 .
- ^ "Captura de medios y transmisiones: getUserMedia". W3C. 3 de septiembre de 2013. Archivado desde el original el 2 de enero de 2014. Consultado el 15 de enero de 2014 .
- ^ "WebRTC: Interfaz RTCPeerConnection". W3C. 10 de septiembre de 2013. Archivado desde el original el 5 de septiembre de 2012. Consultado el 15 de enero de 2014 .
- ^ "RFC 8831 - Canales de datos WebRTC". datatracker.ietf.org . Archivado desde el original el 2022-03-10 . Consultado el 2022-03-10 .
- ^ "WebRTC: RTCDataChannel". W3C. 10 de septiembre de 2013. Archivado desde el original el 5 de septiembre de 2012. Consultado el 15 de enero de 2014 .
- ^ "Identificadores para la API de estadísticas de WebRTC". W3C. 29 de septiembre de 2014. Archivado desde el original el 15 de julio de 2017. Consultado el 2 de diciembre de 2017 .
- ^ Tsahi Levent-Levi (13 de abril de 2020). «Servidor WebRTC: ¿Qué es exactamente?». BlogGeek.me . Archivado desde el original el 11 de mayo de 2020. Consultado el 10 de junio de 2020 .
- ^ Tsahi Levent-Levi (13 de noviembre de 2014). «Matrix.org y WebRTC: una entrevista con Matthew Hodgson». BlogGeek.me . Archivado desde el original el 25 de febrero de 2021. Consultado el 10 de junio de 2020 .
- ^ "Grupo comunitario ORTC (Object Real-time Communications) del W3C". Archivado desde el original el 29 de octubre de 2014. Consultado el 29 de octubre de 2014 .
- ^ "Preguntas frecuentes sobre WebTorrent". webtorrent.io . Archivado desde el original el 2022-03-11 . Consultado el 2022-03-10 .
- ^ "Cómo transferir archivos entre Linux, Android e iOS con Snapdrop". MUO . 2021-08-04. Archivado desde el original el 2022-01-29 . Consultado el 2022-03-10 .
- ^ Pinola, Melanie (7 de abril de 2014). «La forma más fácil y rápida de transferir archivos entre dispositivos de la misma red». Computerworld . Archivado desde el original el 28 de junio de 2022. Consultado el 10 de marzo de 2022 .
- ^ "FilePizza: comparte archivos sin intermediarios en tu navegador - gHacks Tech News". gHacks Technology News . 2015-05-12. Archivado desde el original el 2022-01-23 . Consultado el 2022-03-10 .
- ^ Foley, Mary Jo. «Microsoft adquiere Peer5 para complementar la transmisión de video en vivo de Teams». ZDNet . Archivado desde el original el 2022-03-10 . Consultado el 2022-03-10 .
- ^ "Descripción general - Documentos de Peer5 P2P". docs.peer5.com . Archivado desde el original el 2022-03-16 . Consultado el 2022-03-10 .
- ^ "Atrapa al pez Babel: una empresa de telecomunicaciones irlandesa diseña un nuevo tipo de teléfono en la nube". Noviembre de 2017. Archivado desde el original el 1 de noviembre de 2017. Consultado el 20 de noviembre de 2017 .
- ^ "ORTC API ya está disponible en Microsoft Edge". Microsoft. 18 de septiembre de 2015. Archivado desde el original el 9 de octubre de 2015. Consultado el 20 de septiembre de 2015 .
- ^ Firefox Notes - Desktop Archivado el 21 de agosto de 2014 en Wayback Machine . Mozilla.org (25 de junio de 2013). Consultado el 11 de abril de 2014.
- ^ "Safari 11.0". Apple Inc. Archivado desde el original el 14 de noviembre de 2017 . Consultado el 6 de junio de 2017 .
- ^ Opera News Archivado el 7 de septiembre de 2015 en Wayback Machine . blogs.opera.com (19 de noviembre de 2013). Consultado el 17 de septiembre de 2015.
- ^ Firefox Notes - Desktop Archivado el 1 de abril de 2021 en Wayback Machine . Mozilla.org (17 de septiembre de 2013). Consultado el 4 de agosto de 2014.
- ^ "Notas de la versión de GStreamer 1.14". gstreamer.freedesktop.org . Archivado desde el original el 2018-03-20 . Consultado el 2019-12-19 .desde la versión 1.15
- ^ "Códecs utilizados por WebRTC - Tecnologías de medios web | MDN". developer.mozilla.org . Archivado desde el original el 2021-07-27 . Consultado el 2021-07-29 .
- ^ Fablet, Youenn (12 de marzo de 2019). "En camino hacia WebRTC 1.0, incluido VP8". WebKit . Archivado desde el original el 29 de julio de 2021 . Consultado el 29 de julio de 2021 .
- ^ Una enorme falla de seguridad filtra las direcciones IP reales de los usuarios de VPN Archivado el 8 de enero de 2021 en Wayback Machine TorrentFreak.com (30 de enero de 2015). Consultado el 21 de febrero de 2015.
- ^ Solicitudes de direcciones IP STUN para WebRTC Archivado el 18 de febrero de 2015 en Wayback Machine . Consultado el 21 de febrero de 2015.
- ^ Timmerman, Crystal (28 de febrero de 2022). «WebRTC filtra direcciones IP reales (incluso con VPN)». IPVanish . Archivado desde el original el 13 de agosto de 2022 . Consultado el 12 de agosto de 2022 .
- ^ Raymond Hill (17 de septiembre de 2021). «Evitar que WebRTC filtre direcciones IP locales». Documentación de uBlock Origin . Archivado desde el original el 21 de febrero de 2016. Consultado el 18 de diciembre de 2021 .
Lectura adicional
- Proust, S., ed. (mayo de 2016). Códecs de audio WebRTC adicionales para interoperabilidad. IETF . doi : 10.17487/RFC7875 . RFC 7875 . Consultado el 12 de octubre de 2016 .
- Valin, JM; Bran, C. (mayo de 2016). Requisitos de procesamiento y códec de audio WebRTC. IETF . doi : 10.17487/RFC7874 . RFC 7874 . Consultado el 12 de octubre de 2016 .
- Roach, AB (marzo de 2016). Requisitos de códec y procesamiento de video WebRTC. IETF . doi : 10.17487/RFC7742 . RFC 7742 . Consultado el 12 de octubre de 2016 .
- Perumal, M.; Wing, D.; Ravindranath, R.; Reddy, T.; Thomson, M. (octubre de 2015). Utilidades de recorrido de sesión para uso de NAT (STUN) para la actualización del consentimiento. IETF . doi : 10.17487/RFC7675 . RFC 7675 . Consultado el 12 de octubre de 2016 .
- Holmberg, C.; Hakansson, S.; Eriksson, G. (marzo de 2015). Casos de uso y requisitos de comunicación web en tiempo real. IETF . doi : 10.17487/RFC7478 . RFC 7478 . Consultado el 12 de octubre de 2016 .
Enlaces externos
- Sitio web oficial
- Grupo de trabajo de comunicaciones web en tiempo real del W3C
- Grupo de trabajo de comunicación en tiempo real en navegadores web (rtcweb) del IETF
- Aplicación de demostración de video chat basada en WebRTC
- libdatachannel, biblioteca de red WebRTC de código abierto