Há cerca de seis meses, pensei em criar um programa para controlar um computador através do navegador. Comecei com um simples servidor HTTP de socket único, que transmitia imagens para o navegador e recebia as coordenadas do cursor para controle.
Em determinado momento, percebi que a tecnologia WebRTC se adequava bem a esses objetivos. Essa solução já está disponível no navegador Chrome, sendo instalada através de uma extensão. Mas eu queria desenvolver um programa leve, que funcionasse sem instalação.
Primeiro, tentei utilizar a biblioteca fornecida pelo Google, mas, após a compilação, ela ocupava 500 MB. Tive que implementar quase todo o stack WebRTC do zero, conseguindo compactar tudo em um arquivo exe de 2,5 MB. Um amigo me ajudou com a interface em JS, e aqui está o resultado final.
Executamos o programa:

Abrimos o link em uma aba do navegador e obtemos acesso completo ao desktop:

Uma pequena animação do processo de conexão:

São suportados Chrome, Firefox, Safari, Opera.
Há a possibilidade de transmissão de som, chamadas de áudio, controle da área de transferência, transferência de arquivos e acionamento de teclas de atalho.
Durante o trabalho no programa, precisei estudar uma dezena de RFCs e perceber que na internet não há informações suficientes sobre o funcionamento do protocolo WebRTC. Quero escrever um artigo sobre as tecnologias que ele utiliza e gostaria de saber quais questões das listadas abaixo interessam à comunidade:
- Protocolo SDP para descrição de fluxos de dados
- Candidatos ICE e estabelecimento de conexão entre dois pontos, STUN e TURN servidor
- Conexão DTLS e transmissão de chaves na sessão RTP
- Protocolos RTP e RTCP com criptografia para transmissão de dados de mídia
- Transmissão de H264, VP8 e Opus por RTP
- Conexão SCTP para transmissão de dados binários
Fonte: habr.com
