Voz
O Decoding Chat opera sua camada de voz sobre o LiveKit. O Gateway principal aloca a sessão em um canal de voz e entrega uma credencial de acesso. O cliente apresenta essa credencial ao servidor de mídia, e todas as faixas (tracks) de áudio e vídeo trafegam através da conexão aberta diretamente lá. Microfone, câmera e compartilhamento de tela são fontes de faixas na mesma conexão; portanto, iniciar uma transmissão ao vivo (Go Live) não abre novas conexões adicionais.
Consulte Comandos do cliente e Eventos do Gateway para o protocolo de alocação.
Superfícies de voz
Seção intitulada “Superfícies de voz”| Superfície | O que é | Referência |
|---|---|---|
| Canal de voz de servidor | Canal do tipo 2, com suporte a mensagens, pins e modo lento | Canais |
| Chamada privada | O equivalente a um canal de voz para mensagens diretas (DM) e DMs em grupo | Chamadas |
| Transmissão Go Live1 | Compartilhamento de tela publicado como faixa extra na conexão de voz existente | Transmissões |
| Som de entrada2 | Um clipe curto anunciado aos participantes já conectados ao canal de voz | Sons de entrada |
| Compartilhamento de atividade de voz | Define se amigos podem visualizar em qual canal de voz você está | Configurações do usuário |
1 Transmitir tela não abre uma segunda conexão e não gera nova credencial
2 A única superfície de voz que não transmite faixas contínuas de mídia
Transporte de mídia
Seção intitulada “Transporte de mídia”A mídia de áudio e vídeo nunca passa pela API HTTP. Nenhuma rota HTTP retorna faixas de áudio/vídeo, credenciais de conexão de mídia ou chaves criptográficas de ponta a ponta.
O Decoding Chat roda a mídia sobre LiveKit e não publica protocolo de sinalização próprio de baixo nível. O cliente conecta no endpoint indicado no evento Voice Server Update, apresenta o token de concessão recebido e comunica-se utilizando o protocolo LiveKit a partir de então.
| Conceito | Valor |
|---|---|
| Nome da sala, canal de voz de servidor | guild_{guild_id}_channel_{channel_id} |
| Nome da sala, chamada privada | dm_channel_{channel_id} |
| Identidade do participante | user_{user_id}_{connection_id} |
A concessão (grant) tem validade de 600 segundos.
Cada sala representa um canal de voz, e cada participante representa uma conexão de voz. Um membro conectado por múltiplos dispositivos possui múltiplos participantes na mesma sala.
A concessão define também quais fontes a conexão pode publicar: a permissão SPEAK autoriza a faixa de microfone, e STREAM autoriza tanto a câmera quanto o compartilhamento de tela. Conexões ensurdecidas pelo servidor não podem publicar nem receber áudio.
Estado do recurso na implantação
Seção intitulada “Estado do recurso na implantação”Uma implantação pode operar sem o serviço de voz habilitado. O documento de descoberta informa isso em features.voice_enabled.
Quando features.voice_enabled for falso, o Decoding Chat não emite credenciais de mídia e requisições de alocação de voz são recusadas com VOICE_TOKEN_FAILED.
Alocação
Seção intitulada “Alocação”O comando Voice State Update declara onde a sessão deseja se posicionar, informando guild_id, channel_id, connection_id, além de self_mute, self_deaf, self_video e self_stream. channel_id: null desconecta, e chamadas diretas usam guild_id: null.
| Formato do comando | Resultado |
|---|---|
channel_id sem connection_id | Abre uma nova conexão |
channel_id com connection_id | Atualiza ou move a conexão informada |
channel_id: null com connection_id (em servidor) | Desconecta aquela conexão |
channel_id: null sem connection_id (em servidor) | Recusado com VOICE_MISSING_CONNECTION_ID |
channel_id: null sem connection_id (em chamada direta) | Desconecta todas as participações de voz da sessão |
O servidor responde com Voice State Update para todas as sessões que podem visualizar o canal e Voice Server Update exclusivamente para a sessão solicitante.
Canais de voz em servidores
Seção intitulada “Canais de voz em servidores”Canais de voz em servidores armazenam bitrate, user_limit, voice_connection_limit e rtc_region no objeto de canal.
Canais novos iniciam com bitrate: 64000 (limite padrão 96000, expansível até 384000 via recursos de servidor). Chamadas diretas rodam sempre a 64000.
Permissões
Seção intitulada “Permissões”| Permissão | Efeito na voz |
|---|---|
| VIEW_CHANNEL e CONNECT | Ambas são obrigatórias para conectar ao canal de voz |
| SPEAK | Publicar áudio de microfone |
| STREAM | Publicar vídeo de câmera e transmissões de tela |
| MUTE_MEMBERS | Mutar participantes como moderador |
| DEAFEN_MEMBERS | Ensurdecer participantes como moderador |
| MOVE_MEMBERS | Mover participantes para outros canais ou desconectá-los |
| UPDATE_RTC_REGION | Alterar a região RTC do canal |
A permissão ADMINISTRATOR concede todas as permissões acima.
Moderação de voz (mutar, ensurdecer, mover ou desconectar membros) é uma operação realizada via API HTTP através de Modificar membro do servidor.
Capacidade
Seção intitulada “Capacidade”| Limite | Recusa |
|---|---|
user_limit | VOICE_CHANNEL_FULL |
voice_connection_limit | VOICE_CONNECTION_LIMIT_REACHED |
| 25 membros com câmera ligada | VOICE_CAMERA_USER_LIMIT |
Membros temporariamente silenciados (communication_disabled_until no futuro) recebem VOICE_MEMBER_TIMED_OUT. Contas não reivindicadas recebem VOICE_UNCLAIMED_ACCOUNT em chamadas 1:1 e canais de servidores de terceiros.
Transmissões Go Live
Seção intitulada “Transmissões Go Live”O compartilhamento de tela publica faixas de vídeo e áudio do sistema diretamente na conexão LiveKit já existente do participante. O publicador ativa a transmissão definindo self_stream: true via Voice State Update.
A chave da transmissão (stream key) possui o formato {guild_id}:{channel_id}:{connection_id} em servidores e dm:{channel_id}:{connection_id} em chamadas privadas.
Sons de entrada
Seção intitulada “Sons de entrada”Um som de entrada é um clipe curto executado para os participantes conectados ao canal de voz quando um usuário entra. Cada usuário pode manter até 8 clipes pessoais (100 a 5.200 ms, formatos mp3, ogg, m4a ou wav).
Ao tocar, o Decoding Chat emite o evento ENTRANCE_SOUND_PLAY contendo a URL do clipe na CDN, e cada cliente o reproduz localmente.

