Cerca de seis meses atrás, decidi criar um programa para controlar um computador através de um navegador. Comecei com um servidor HTTP simples de soquete único, que transferia imagens para o navegador e recebia as coordenadas do cursor para controle.
Em um certo estágio, percebi que a tecnologia WebRTC é adequada para esses fins. O navegador Chrome tem uma solução, é instalada através da extensão. Mas eu queria criar um programa leve que funcionasse sem instalação.
No começo, tentei usar a biblioteca fornecida pelo Google, mas após a compilação são necessários 500 MB. Eu tive que implementar toda a pilha WebRTC quase do zero, consegui encaixar tudo em um arquivo exe com 2,5 MB de tamanho. Um amigo ajudou na interface JS, foi o que acabou.
Execute o programa:
Abrimos o link na guia do navegador e obtemos acesso total à área de trabalho:
Uma pequena animação do processo de configuração da conexão:
Suportado pelo Chrome, Firefox, Safari, Opera.
Existe a possibilidade de transmitir som, chamada de áudio, gerenciamento de área de transferência, transferência de arquivos e teclas de atalho.
No decorrer do trabalho no programa, tive que estudar cerca de uma dúzia de RFCs e entender que a Internet não possui informações suficientes sobre a operação do protocolo WebRTC. Quero escrever um artigo sobre as tecnologias usadas nele, quero saber quais problemas dos seguintes assuntos interessam à comunidade:
- Protocolo de descrição de streaming SDP
- Candidatos ICE e estabelecendo uma conexão entre dois pontos, servidor STUN e TURN
- Conexão DTLS e transferência de chave para a sessão RTP
- Protocolos RTP e RTCP com criptografia para transmissão de mídia
- Transferir H264, VP8 e Opus sobre RTP
- Conexão de dados binários SCTP