← Back

Personal Project · KMM · In Development

GameTape

Live-stream basketball recording with real-time score overlays and a custom video pipeline.

KMM OpenGL ES MediaCodec Camera2 Firebase

I play basketball at a semi-professional level in the UK and for a local league team called Southside Saints. We record our games on phone and love watching back the tape — but a raw recording doesn't tell you much without context. I thought it'd be good to have the live score overlaid so you can track how impactful a moment was just by the score at the time.

GameTape is that idea built out properly. It captures game footage through a custom video pipeline while pulling live score data from Firebase Realtime Database and rendering it as an overlay using OpenGL ES. The technical focus for me is learning the full pipeline — GPU rendering, audio and video encoding, compression, and muxing — starting on Android with Camera2 and MediaCodec, then bringing it to iOS through KMM.

Live score overlay rendered in real-time via OpenGL ES

Custom video pipeline — Camera2, MediaCodec, muxer

Real-time score data synced from Firebase Realtime Database

RTMP live-stream output with embedded overlay

Hardware-accelerated video encoding and compression

Android-first, with iOS via Kotlin Multiplatform

Screenshots coming soon

TBC — Detailed breakdown of my personal involvement coming soon.

Kotlin Multiplatform

Shared business logic across Android & iOS

Camera2

Low-level Android camera API for video capture

MediaCodec

Hardware-accelerated video & audio encoding

OpenGL ES

GPU-rendered score overlay composited onto frames

Firebase Realtime Database

Live score data synced in real-time

Koin

Dependency injection

Stage In Development
Platform Android & iOS
Type Personal Project