/koe

Tiny and embeddable Discord media transport library based on Netty.

Primary LanguageJavaMIT LicenseMIT

koe

Tiny, minimal dependency and embeddable library implementing Discord media server protocols, built on Netty, aiming for high performance and reduced GC usage.

Get it on JitPack

Example:

repositories {
    maven { url 'https://jitpack.io' }
}

// ...

dependencies {
    implementation 'moe.kyokobot.koe:core:VERSION'
}

VERSION can be either a tag or a git commit hash.

Dependencies

  • Netty
  • slf4j
  • Java 11+ (could be backported to Java 8 with minor code changes)

Features

  • Supports voice gateway v4 and v5.
  • Easily extendable for stuff such as support for codecs other than Opus or video sending, if Discord ever decides to support it on bots.
  • Experimental video support.
  • Basic RTCP support for measuring packet loss and other stuff.

Non-goals / won't do

  • Encoding - Koe only implements voice server communication, not voice handling itself, so it only accepts Opus frames and you have set up an encoder yourself, use lavaplayer, libav/ffmpeg or anything else.
  • Voice receiving support - it's not supported by Discord anyway, although someone could implement it by registering hooks.

Extensions

Credits

@TheAkio for name idea.

Koe includes modified/stripped-down parts based on following open-source projects:

  • tweetnacl-java (Poly1305, SecretBox)
  • nanojson (modified for bytebuf support, changed the API a bit and etc.)