apirJS/gemacast
apirJS/gemacast has 35 GitHub stars and 5 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-14 18:27 UTC. Last push 2026-10-28.
Measured star growth
- in 24h
- 0
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
About
Low-latency audio streaming from PC to Android over a Wi-Fi or USB or ADB
Creative & MediaREADME.md
Original
Gemacast
PC-to-Android audio streaming over Wi-Fi, USB tethering, or ADB.
The desktop tray application captures system or per-application audio. Each connected phone has independent source, bitrate, and playback-buffer settings. Phones selecting the same source share capture, with separate encoders.
Platforms
| Platform | Audio implementation |
|---|---|
| Windows | WASAPI desktop and per-process capture; cpal desktop fallback |
| Linux | PipeWire desktop and per-process capture; cpal desktop fallback |
| macOS 13+ | ScreenCaptureKit desktop and per-process capture; cpal desktop fallback |
| macOS 11–12 | cpal desktop capture; no per-process capture |
| Android 8.0+ (API 26) | Native playback through Oboe |
The macOS cpal path requires system audio routed to a capture device. ScreenCaptureKit requires Screen Recording permission. iOS is not implemented.
Installation
Packages are available on the release page.
| Platform | Package |
|---|---|
| Windows | .msi installer or .zip archive |
| Linux | .deb, .rpm, .AppImage, or .tar.xz |
| macOS | .dmg |
| Android ARM64 | gemacast-mobile.apk |
| Android, multiple architectures | gemacast-mobile-universal.apk |
Linux package installation:
sudo apt install ./gemacast-pc_*.deb # Debian / Ubuntu
sudo dnf install ./gemacast-pc-*.rpm # Fedora
Linux archives require GTK3 and AppIndicator runtime libraries for the tray. The Windows MSI installs firewall exceptions. Linux package scripts attempt firewall configuration; portable archives and AppImages do not.
The macOS application is unsigned and unnotarized. To remove quarantine after copying it into Applications:
xattr -d com.apple.quarantine /Applications/Gemacast.app
Connection
- Start the PC tray application and the Android application.
- Configure a connection mode from the table below and select the PC on the phone.
- During initial pairing, compare the six-digit code on both devices and approve.
- Select desktop or application audio and start playback.
| Mode | Setup | Transport |
|---|---|---|
| Wi-Fi | Connect both devices to the same reachable LAN | UDP audio; HTTPS/WSS control |
| USB tethering | Connect USB and enable Android USB tethering | Same protocol as Wi-Fi over the tethered interface |
| ADB | Enable USB debugging, connect USB, and approve the computer | TCP connections through automatic adb reverse |
LAN discovery can be blocked by client isolation, guest networks, VPN routing, or firewall rules. ADB discovery uses the forwarded connection.
Audio
All sources are converted to 48 kHz stereo. Each 10 ms frame contains 480 samples per channel, or 960 interleaved samples.
| Format | Encoding | Audio payload rate |
|---|---|---|
| Opus | LowDelay/CELT | 6–512 kbit/s |
| PCM | Native-endian f32 stereo |
3.072 Mbit/s, excluding transport overhead |
Playback provides adaptive and fixed jitter-buffer presets, gain control, optional PC-volume matching, and automatic reconnection. Each phone buffers independently; playback is not synchronized across phones.
The displayed RTT and buffer depth do not measure capture-to-speaker latency. Capture, encoding, network transport, decoding, and output buffers also contribute to that delay.
Authentication and privacy
- Control uses TLS and P-256 device authentication. Pairing compares a six-digit code; approved PC identities are stored on the phone.
- Session tokens are memory-only and rotate on connection. A changed PC certificate requires forgetting its stored identity before pairing again.
- UDP audio is neither encrypted nor authenticated. LAN streaming therefore requires a trusted network.
- An authenticated phone can request the PC process list to select an audio source.
- ADB audio passes through the approved debugging connection and has no separate audio encryption.
Network ports
| Port | Protocol | Use |
|---|---|---|
| 23555 | UDP | LAN discovery and probes |
| 23556 | UDP | Audio received by the phone |
| 23559 | TCP | HTTPS/WSS control received by the PC |
The PC sends audio from an ephemeral UDP port. The phone returns heartbeat and RTT traffic to that sender port. Firewalls must allow the audio flow and replies. ADB forwards TCP 23557 (audio), 23558 (discovery), and 23559 (control); it needs no LAN firewall rule.
The Linux firewalld service includes UDP 23555–23556 and TCP 23559. Equivalent UFW rules:
sudo ufw allow 23555,23556/udp
sudo ufw allow 23559/tcp
Interface
Application selection, settings, and desktop tray
Documentation
| Document | Content |
|---|---|
| Architecture | Components, session lifecycle, transport, and packet formats |
| Contributing | Setup, builds, checks, diagnostics, and issue/PR contents |
| Development constraints | Repository-specific coding constraints |
| Website | Vue source map and commands |
| Containers | Linux and Android check environments |
License
GPL-3.0-or-later. Third-party dependencies are listed in THIRD_PARTY_NOTICES.md.