Hace aproximadamente seis meses, decidí crear un programa para controlar una computadora a través del navegador. Comencé con un simple servidor HTTP de un solo socket, que transmitía imágenes al navegador y recibía las coordenadas del cursor para el control.
En cierta fase me di cuenta de que la tecnología WebRTC era adecuada para estos fines. Esta solución está presente en el navegador Chrome y se instala a través de una extensión. Pero quería hacer un programa liviano que funcionara sin instalación.
Primero intenté usar la biblioteca que ofrece Google, pero tras la compilación ocupaba 500MB. Tuve que implementar casi todo el stack de WebRTC desde cero, logrando que todo quepa en un archivo exe de 2.5MB. Un amigo me ayudó con la interfaz en JS, y esto es lo que finalmente se logró.
Iniciamos el programa:

Abrimos el enlace en una pestaña del navegador y obtenemos acceso completo al escritorio:

Una pequeña animación del proceso de establecimiento de conexión:

Se admite Chrome, Firefox, Safari, Opera.
Hay posibilidades de transmisión de sonido, llamadas de audio, gestión del portapapeles, transferencia de archivos y uso de atajos de teclado.
Durante el trabajo en el programa, tuve que estudiar varias RFC y entender que hay información insuficiente en Internet sobre el funcionamiento del protocolo WebRTC. Quiero escribir un artículo sobre las tecnologías que se utilizan en él, y me gustaría saber cuáles de las preguntas enumeradas a continuación interesan a la comunidad:
- Protocolo SDP para la descripción de flujos de datos
- Candidatos ICE y establecimiento de conexión entre dos puntos, STUN y TURN servidores
- Conexión DTLS y transmisión de claves en la sesión RTP
- Protocolos RTP y RTCP con cifrado para la transmisión de datos multimedia
- Transmisión de H264, VP8 y Opus a través de RTP
- Conexión SCTP para la transferencia de datos binarios
Fuente: habr.com
