Referência

Como o Unkvoid conecta

O Unkvoid separa autoridade, sinalização e mídia em três peças. Essa divisão evita que o servidor que carrega contas e mensagens seja também o caminho que processa cada quadro de vídeo.

Peça Responsabilidade
Laravel Contas, servidores, cargos, canais, mensagens e autorização.
SFU Salas de voz, peers, produtores e consumidores de mídia.
Aplicativo desktop Interface, captura, encoder e reprodução local.

Entrada em voz

O aplicativo pede ao Laravel um token para o canal de voz. O Laravel confere CONNECT, o limite de pessoas e as demais permissões; então assina um token HMAC de 60 segundos com o identificador do canal, a conta e as capacidades permitidas. O SFU verifica a assinatura e o vencimento, mas não decide a permissão.

O token é renovado antes de cada entrada, inclusive em uma reconexão. Uma conta mantém apenas uma sessão no SFU: uma nova entrada substitui a anterior.

Caminho da mídia

A mídia não passa pelo Laravel. Para compartilhar a tela, o aplicativo captura o quadro como textura da placa de vídeo e usa o encoder de hardware para gerar o vídeo. Em seguida, envia RTP cifrado diretamente do aplicativo ao SFU por UDP; o SFU o encaminha aos consumidores sem decodificar o vídeo.

Esse caminho também leva o áudio da tela, microfone e, quando o cliente produz a fonte, câmera. O tráfego de mídia usa SRTP, com uma chave sorteada por transmissão. O receptor devolve pedidos de retransmissão e de quadro-chave por SRTCP quando necessário.

Chat e presença

Chat, presença e atualizações em tempo real passam pelo WebSocket do SFU, mas a permissão de se inscrever em cada canal continua sendo consultada no Laravel. Uma pessoa sem VIEW_CHANNEL não recebe a assinatura nem o conteúdo do canal.

O Laravel e o SFU usam chamadas HTTP assinadas para ações administrativas, como mutar, mover ou remover alguém da voz. Essas chamadas são internas; não são uma API de integração pública.