3.1 KiB
Vídeo contínuo com qualidade automática
Desenho aprovado em 05/10/2026: vídeo contínuo, qualidade automática como padrão, buscando 30 fps. Boca e sobrancelhas com controles independentes.
Integração
O painel recebe uma faixa de vídeo via WebRTC. O servidor Python troca apenas sinalização (/rtc/session, /rtc/send, /rtc/poll); o vídeo comprimido passa diretamente pela rede local entre Android e navegador. Sem serviços externos de STUN/TURN e sem gravação. Cada vez há um painel receptor ativo; abrir outro substitui a sessão anterior.
O Android usa uma WebView auxiliar com página embutida transmissao.html, em contexto file:// já usado no app para câmera. Ela permanece anexada à Activity atrás do rosto e recebe somente a permissão de vídeo. A ponte Java fornece sinalização HTTP, telemetria e movimento; não há permissão de acesso remoto a arquivos pela WebView.
Durante a transmissão, o detector Camera2 anterior é suspenso para liberar a lente. A página de vídeo calcula movimento numa amostra 176×132, dez vezes por segundo, e manda o mesmo sinal à carinha. Sem transmissão, o detector nativo volta. Microfone, rosto e economia de brilho continuam funcionando. Sair do primeiro plano para câmera e conexão.
Qualidade
Captura solicitada: até 1280×720 a 30 fps; fallback por restrição de formato em 640×480. O codec é negociado pelo WebRTC entre as capacidades dos aparelhos (não é forçado H.264). Prioridade maintain-framerate; os fps efetivos aparecem no painel.
Controle automático usa estatísticas reais do emissor. Congestionamento, atraso elevado ou fps baixo reduzem resolução/bitrate. Só sobe após quatro leituras estáveis, evitando oscilações. Tetos de bitrate: 2,5 / 1,3 / 0,6 Mb/s; fatores de escala: 1 / 1,5 / 2. A taxa de quadros alvo permanece 30. Esses valores são tetos, não garantia de resultado em qualquer rede/aparelho.
Validação
- Testes HTTP verificam isolamento de sessão, mensagens preservadas por cursor e rejeição de sessões antigas.
- Teste Node verifica redução automática e subida após estabilidade.
- Teste
test_rtc_browser.pyusa câmera simulada de 30 fps e conexões WebRTC reais entre duas páginas Chromium. Resultado observado: 63 quadros em 2,2 segundos, painel 30 fps, 640×360. - Teste de navegador verifica ativação/desativação independente de boca e sobrancelhas.
- Compilação/verificação da assinatura Android necessárias antes de atualizar.
- Validação no S10 exige reabrir o app após a instalação e recarregar o painel.
Referências técnicas
- RTCRtpSender.setParameters: bitrate, escala e prioridade de degradação.
- RTCPeerConnection.getStats: estatísticas da conexão.
Arquivos
sinalizacao.py: sessões e mensagens. painel-video.js: receptor e fps. transmissao.html: captura/emissor e detector. qualidade-auto.js: decisão automática. MainActivity/PonteRTC: ciclo de vida, câmera exclusiva e comunicação com Java.