NOME
kayo-ozamigos - transmissão de tela de jogos entre amigos, com voz e chat
SINOPSE
DESCRIÇÃO
Projeto pessoal e open source. Transmite a tela de um PC direto para os amigos, sem servidor de mídia no meio, com voz, chat e salas protegidas por senha. Tem app para Windows e versão web.
EXEMPLOS
Abre o site do Ozamigos, com as telas e o que o app faz.
Abre a versão no navegador: crie um grupo com nome e senha e transmita a tela para quem entrar nele.
Baixa o instalador do app para Windows, com a captura de tela própria e o som do PC sem eco.
ARQUITETURA
- backend
- Java 25 e Spring Boot 4.1. Salas e signaling por WebSocket; o servidor nunca recebe vídeo.
- frontend
- React 19, TypeScript e Vite.
- vídeo
- WebRTC peer-to-peer. H.265 codificado na GPU, com fallback para H.264 quando um dos lados não suporta.
- voz
- Opus, com redução de ruído por RNNoise (WebAssembly) num AudioWorklet.
- desktop
- Electron 44 e dois módulos nativos em C# (.NET 10): captura de tela pelo Windows Graphics Capture com Direct3D 11, e captura do áudio de cada processo.
DECISÕES
Vídeo direto entre os PCs
O servidor só coordena as conexões. Sem tráfego de mídia, ele roda em um plano gratuito e não vira gargalo quando mais gente transmite.
Captura de tela própria
A captura do navegador limitava o FPS em jogos pesados. O módulo em C# captura pela GPU e envia os quadros ao Electron por um canal dedicado, com controle de fluxo.
Medir antes de mudar
Métricas do WebRTC a cada segundo e benchmarks reproduzíveis guiaram as mudanças de captura, codec e rede.
SEGURANÇA
Hash de senhas com PBKDF2 e salt; rate limiting por IP; preview de links só de domínios de uma allowlist, contra SSRF; Electron com contextIsolation e sandbox.
TESTES
Cinco camadas no GitHub Actions a cada push: backend (JUnit), frontend (Vitest), áudio, E2E (Playwright) e app. Os releases saem por pipeline de CI/CD, com auto-update do instalador.