Ses
Lavalink ve @discordjs/voice dahil ses botları kod değişikliği olmadan çalışır. GameVox, Discord'un ses gateway protokolünü birebir konuşur, ardından AEAD-RTP akışını sentetik bir eş (peer) olarak kendi yerel WebRTC SFU'suna köprüler.
Uyumlu kütüphaneler
- Lavalink v3 + v4 (Java, önünde JDA / discord4j vb. ile JVM botları)
- @discordjs/voice (Node)
- discord.py ses ekleri (
PyNaCl) - Ses modülüyle JDA
- discord4j
- İsteğe bağlı ses bağımlılıklarıyla Eris
Endpoint'ler
Bölge başına: bot, VOICE_SERVER_UPDATE mesajının söylediği bölgeye bağlanır.
compatible-voice-gateway-us.gamevox.comcompatible-voice-gateway-eu.gamevox.comcompatible-voice-gateway-ap.gamevox.com
Ana gateway, kanalın SFU konumuna göre doğru bölgeyi gönderir. Bot kütüphanen endpoint değerini bu mesajdan okur ve oraya bağlanır; elle yönlendirme gerekmez.
Bağlantı akışı
- Bot, ana gateway'de (
gateway.gamevox.com)channel_idileop:4 Update Voice Stategönderir. - Ana gateway, bir endpoint ve oturuma özel bir token ile
VOICE_STATE_UPDATE+VOICE_SERVER_UPDATEgönderir. - Bot
wss://{endpoint}/?v=8adresine WSS açar,{server_id, user_id, session_id, token}ileop:0 Identifygönderir. - Ses gateway'i
ssrc,ip,portve desteklenen şifreleme modlarıylaop:2 Readyyanıtı verir. - Bot UDP IP keşfi yapar (74 baytlık
0x0001türünde paket →0x0002türünde yankı). - Bot, seçtiği şifreleme moduyla
op:1 Select Protocolgönderir. - Ses gateway'i 32 baytlık
secret_keyileop:4 Session Descriptionyanıtı verir. - Bot, anlaşılan modla AEAD şifreli olarak RTP üzerinden Opus akışı gönderir.
Şifreleme modları
Discord ile eşleşen iki AEAD-RTPSize modu desteklenir:
aead_aes256_gcm_rtpsize: tercih edilen. Nonce'u şifreli payload'a eklenen 4 baytlık bir sayaçtan türetilen AES-256-GCM.aead_xchacha20_poly1305_rtpsize: AES-NI olmayan kütüphaneler için yedek.
Eski modlar (xsalsa20_poly1305, _lite, _suffix) sunulmaz: Discord bunları 2024'te kullanımdan kaldırdı ve büyük kütüphaneler bunları bıraktı. Bot kütüphanen eski bir moda sabitlenmişse güncelle.
Lavalink notları
Lavalink, endpoint değerini doğrudan VOICE_SERVER_UPDATE içinden okur ve UDP bağlantısını kendisi kurar. Endpoint'e ulaşılabildiği sürece (ulaşılabiliyor) Lavalink, Discord ile konuşmadığını bilmez.
Test edilen sürümler: Lavalink v3.7.x ve v4.0.x. Sürüme özel bir sorunla karşılaşırsan, CI'da senin sürümüne karşı test edebilmemiz için geliştirici portalından bildir.
Gecikme bütçesi
Köprünün eklediği hedef gecikme: gelen UDP'den SFU çıkışına kadar ölçüldüğünde 5 ms'nin altında. 5 ms'nin üzerinde müzik yanlış duyulur (nota başlangıçlarında zamanlama kayması, hi-hat titremesi). Köprü Opus'u doğrudan geçirir (transcoding yok), yani asıl sayı şifre çözme + yeniden paketleme süresidir.
Konuşma olayları
op:5 Speaking çift yönlüdür ve Discord ile aynıdır. Ses gateway'i, gelen insan konuşmacıların SSRC'lerini kullanıcı ID'lerine eşler ve botun eşleştirme yapabilmesi için {ssrc, user_id} ile op:5 gönderir.
Temiz şekilde durdurma
Ana gateway'de channel_id: null ile op:4 Update Voice State göndermek oturumu sonlandırır. Ses gateway'i UDP soketini kapatır ve sentetik SFU eşini kaldırır; insan dinleyiciler sesi hemen almayı bırakır.
Henüz desteklenmeyenler
- DAVE / E2EE: Discord'un kanal başına uçtan uca şifreli ses modu. Henüz bir takvim yok.
- Ses Panosu: botlar ses panosu sesleri çalamaz.
- Sahne kanalları: veri formatı düzeyinde kabul edilir, ama ayrı bir dinleyici / konuşmacı yönetimi yok.