One phone. Professional IRL streaming.
Bonded multi-network uplink · native predictive adaptive bitrate · chat & overlays · built to not overheat.
🚧 Work in progress — this app is under active development and is not released yet. This repository is the public showcase & roadmap. The source code lives in a private repo. ⭐ Star / watch to follow progress and be first in line when it ships.
IRL Multitool turns an Android phone into a dedicated IRL (In Real Life) broadcast rig. Stream from anywhere — city walks, forests, cycling, travel, multi-day adventures — without a laptop, without a backpack of gear, without losing the stream when the network dips.
It is a complete mobile streaming stack in one app: camera capture, GPU processing, hardware encoding, a custom MPEG-TS muxer, bonded transport, a predictive bitrate brain, chat, TTS and overlays.
Output goes to your own SRT / SRTLA receiver (BELABOX, IRLServer, OBS) or straight to Twitch / YouTube over RTMP.
Mobile streams die from two things: flaky networks and heat / battery drain. IRL Multitool is designed against both from day one.
- Bonding — aggregates Wi-Fi + cellular at the same time over SRTLA, so the stream survives dead zones and tower hand-overs.
- Predictive ABR — a native C++ controller fixes quality before the freeze, not after.
- Battery-first — energy efficiency is an acceptance criterion for every change, not an afterthought.
- No extra gear — camera, encoder, muxer, transport, chat and overlays all run on the phone.
- Camera2 API with multi-lens support — wide / ultra-wide / tele via the logical zoom ratio.
- Pro manual controls — focus (auto / macro / infinity), exposure compensation, white-balance presets (auto / incandescent / fluorescent / daylight / cloudy), anti-flicker (50/60 Hz), digital zoom, torch.
- Screenshot capture with organised, timestamped storage.
- Hardware H.264 / HEVC via
MediaCodec— CBR / VBR / CQ bitrate modes, HIGH / MAIN profile, configurable GOP and on-the-fly keyframe (sync-frame) requests. - Backpressure, not dropped frames — the encoder waits for the muxer instead of throwing frames away.
- GPU pixelation (privacy mosaic) — a zero-allocation OpenGL fragment shader turns the picture into a live mosaic so viewers see motion but no readable detail.
- AAC encoding (48 kHz) with noise suppression, acoustic echo cancellation and AGC.
- Software pre-gain + limiter (up to +30 dB) with RMS-targeted auto-gain — fixes quiet voice.
- Mute / stream-pause (sends silence), plus raw PCM dumps for diagnosing audio issues.
- SRT (via
srtdroid/ libsrt) — caller / listener modes, stream-id, password, latency 20–30000 ms. - SRTLA bonding across Wi-Fi + cellular simultaneously:
- distribution modes:
MIRROR,DISTRIBUTE,WEIGHTED,FAILOVER; - handshake flavours:
AUTO,CLASSIC,BELABOX,IRL_SERVER; - per-link telemetry: bitrate, bytes sent, carrier, operator, last activity.
- distribution modes:
- RTMP (via
antmedia/rtmp-client) for direct Twitch / YouTube publishing, with correct AVC (SPS/PPS) and AAC (ASC) config injection and connection-loss handling. - Custom MPEG-TS muxer — PAT/PMT/PES, PCR (33-bit, 90 kHz) and continuity counters, Annex-B / ADTS normalisation, packet-dropping backpressure under overload.
A pluggable ABR engine with eight strategies, topped by a native C++17 predictive controller running at 10 Hz with zero allocations in the hot loop (JNI / NDK).
The predictive core combines:
- EWMA-smoothed network metrics and a fuzzy-logic network-stress model;
- a BTTL (buffer-time-to-live) predictor that reacts to a filling send-buffer before it overflows;
- slew-rate-limited recovery — quality climbs back slowly only after the network is provably calm;
- three emergency detectors that override the fuzzy core: blackhole link, link drop during an I-frame, and NACK retransmission storm;
- a quality ladder that trades resolution / FPS / bitrate with hysteresis, cutting FPS before resolution (readable 720p@24 beats blurry 540p@30).
Available strategies: PREDICTIVE, HYBRID, LADDER, LOGARITHMIC,
SURVIVAL, INTELLIGENT_SURVIVAL, PREDICTIVE_BUFFER, LEGACY (fallback).
| Ladder step | Resolution | FPS | Bitrate |
|---|---|---|---|
| 0 | 1920×1080 | 30 | 4.5–6.0 Mbps |
| 1 | 1600×900 | 30 | 3.0–4.5 Mbps |
| 2 | 1280×720 | 30 | 1.8–3.0 Mbps |
| 3 | 1280×720 | 24 | 1.2–1.8 Mbps |
| 4 | 960×540 | 24 | 0.8–1.2 Mbps |
| 5 | 854×480 | 20 | 0.5–0.8 Mbps |
| 6 | 640×360 | 20 | 0.30–0.5 Mbps |
| 7 | 640×360 | 15 | 0.20–0.30 Mbps |
Full model and simulations: docs/predictive_abr/DESIGN.md.
- Multi-platform chat — Twitch (IRC over WebSocket with auto-reconnect & keepalive), YouTube Live (polling), Kick (Pusher WebSocket), with 7TV / BTTV emote prefetching.
- Text-to-speech reader with message templates, bot/command filtering and per-user ignore lists.
- System-overlay HUD — a pure-Canvas, draggable heads-up display: FPS, bitrate, battery, CPU temp, network signal, resolution, recording duration.
- Twitch chat overlay — a Samsung edge-panel-style collapsible tab that floats above other apps.
- Stream overlay editor — images, GIFs and web overlays with drag / scale / rotate.
- Twitch moderation API integration.
- OBS — full WebSocket remote: list/switch scenes, start/stop streaming, grab a screenshot, with QR-code pairing (ML Kit barcode scanner).
- DonationAlerts — real-time donation events over Centrifugo WebSocket.
- YouTube OAuth — PKCE (RFC 7636) authorization-code flow with browser / WebView hybrid fallback.
- Twitch OAuth — token and moderation scopes.
- Anti-DPI — TLS ClientHello fragmentation (≈20-byte fragments) to bypass SNI-based blocking.
- DNS-over-HTTPS resolution, proxy configuration, WebP validation, emote prefetching.
- Reactive battery / thermal monitor plus CPU / battery / temperature metrics on the HUD.
- Foreground service with sticky notification and wake locks.
- Hard engineering rules: no busy loops, throttled logging, bounded retries, no per-frame allocations, every coroutine cleaned up.
- Russian + English, with a beginner / pro experience mode that renames technical terms for newcomers.
Camera2 ──► [GPU pixelation?] ──► MediaCodec (H.264/HEVC) ─┐
├──► MPEG-TS muxer ──► SRT / SRTLA / RTMP
AudioRecord ──► AAC encoder (NS/AEC/AGC/gain) ───────────┘
▲
└── ABR engine (Kotlin strategies / native C++ core)
Orchestrated by a foreground service with sticky notification and wake locks. UI is Jetpack Compose + MVVM, persistence via DataStore, images via Coil.
| Layer | Technology |
|---|---|
| Language | Kotlin 2.4, C++17 (NDK) |
| UI | Jetpack Compose (Material 3), MVVM |
| Camera | Camera2 API, CameraX helpers |
| Encoding | MediaCodec (H.264/HEVC, AAC), OpenGL ES |
| Transport | srtdroid (libsrt), antmedia rtmp-client (librtmp) |
| ABR | Kotlin strategies + native C++ predictive core (JNI) |
| Networking | OkHttp (+ DNS-over-HTTPS), Coil, kotlinx.serialization |
| Auth | AppAuth (PKCE), Chrome Custom Tabs |
| OBS / donations | WebSocket (okhttp), Centrifugo, ML Kit barcode |
| Persistence | Jetpack DataStore, encrypted storage |
Android: minSdk 26, target/compileSdk 36.
Highlights of what is planned next:
- Advanced audio — compressor, limiter, noise-gate, high-pass filter, ducking.
- Replay buffer — save a clip of the last 60–120 s in one tap.
- Stream delay (30–90 s) — a safety feature against doxxing / stalking.
- Config profiles — day / night / indoor / cycling presets.
- Hardware hotkeys — volume rocker / BLE buttons for mute, privacy, clip.
- OBS-grade HUD telemetry — per-link RTT, chip temperature, throttle risk.
- Server-side restream — relay one uplink to multiple platforms.
📸 Coming soon — screenshots and demo GIFs will land here as the UI stabilises.
- Status: early development, not yet released. Public APIs / UX may change.
Made for IRL streamers · ⭐ star the repo and stay tuned — the best is still coming.
