Skip to content

About

Public showcase & roadmap for IRL Multitool — a smart mobile IRL-streaming client for Android

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

IRL Multitool

Kotlin Android C++ Status

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.


What is IRL Multitool

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.


Why it matters

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.

Features

📷 Camera & optics

  • 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.

🎞 Video encoding

  • 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.

🎙 Audio

  • 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.

📡 Transport

  • 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.
  • 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.

🧠 Adaptive bitrate — the crown jewel

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.

💬 Chat, TTS & overlays

  • 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.

🔌 Integrations

  • 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.

🛡 Networking & resilience

  • Anti-DPI — TLS ClientHello fragmentation (≈20-byte fragments) to bypass SNI-based blocking.
  • DNS-over-HTTPS resolution, proxy configuration, WebP validation, emote prefetching.

🔋 Battery & performance first

  • 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.

🌍 Localization

  • Russian + English, with a beginner / pro experience mode that renames technical terms for newcomers.

How it works

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.


Tech stack

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.


Roadmap

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.

Screenshots

📸 Coming soon — screenshots and demo GIFs will land here as the UI stabilises.


Status

  • 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.

About

Public showcase & roadmap for IRL Multitool — a smart mobile IRL-streaming client for Android

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors