All workSK / ENGINEERING

CASE STUDY · DIGITAL AVENUES · 2025–2026

Prisium — a remote multi-camera live production studio.

I built the web and mobile clients for Prisium at Digital Avenues: a remote multi-camera live production platform. In 10 months, I shipped a three-workflow platform—with separate paths for live preview and high-resolution recording, a producer studio, and phone-based guest capture.

ROLE
Software EngineerWeb + mobile clients
DURATION
10 months
TEAM CONTEXT
Cross-functional
Next.js 15React 19TypeScriptReact NativeWebRTCMediasoupGCP
prisiumProducer studio LIVE PRODUCTION
PREVIEWCAM 2
PROGRAMCAM 1
SOURCES4 CONNECTED
SEPARATE PREVIEW + RECORDINGPROGRAM OUT CAM 1
FIG. 01 — PRODUCER STUDIOOriginal illustration · not a product screenshot
01 — THE PROBLEM

Remote guests.
Production-grade control.

Remote production needs broadcast-grade multi-camera control over the internet, while guests need to join from their phones. I worked on the web and mobile clients that connect those two sides: a producer choosing what goes live, and participants capturing footage that can also be recorded at high resolution.

LIVE PREVIEWNATIVE CAPTUREPRODUCER CONTROL
02 — ARCHITECTURE

Separate the paths.
Connect the experience.

I used Socket.IO for signalling and Mediasoup for WebRTC sessions. High-resolution ISO recording stays on a separate capture-and-upload path, coordinated through the web and native clients.

SYSTEM TOPOLOGYLIVE MEDIA ≠ ISO FILES

PARTICIPANTS + SIGNALLING

LIVE PREVIEW PATH

DEVICE ISO + PROCESSING

BFF + SERVICES

WebRTC mediaSignallingISO / uploadService calls
Mediasoup SFU · MY CONTRIBUTION

I built the real-time session path with Mediasoup, keeping live preview separate from high-resolution recording.

FIG. 02 — ARCHITECTUREConceptual contribution map · not an infrastructure inventory
03 — WHAT I BUILT

From guest capture
to program output.

01 / REAL-TIME CORE

One session. Two distinct paths.

I built 4–6 participant WebRTC sessions with Mediasoup SFU and Socket.IO signalling. Live preview and high-resolution recording run through separate pipelines.

The producer needs a live view of the session; the recording path needs to preserve high-resolution footage. I separated those responsibilities rather than treating the preview stream as the recording.

WebRTCMediasoupSocket.IO
02 / PRODUCER STUDIO

A control room in the browser.

I built feed switching, wide shot, screen capture, overlays, LUT grading and program output into the producer studio.

The web client brings source selection and output control into one production surface, alongside the visual tools needed to compose the program.

Next.js 15React 19Zustand
03 / 4K ISO RECORDING

Keep the take. Recover the upload.

I orchestrated 4K ISO recording across the web and native Kotlin/Swift code, including Android dual-pipeline capture and resumable chunked uploads to Google Cloud Storage.

Retry and resumable chunks improved recording reliability by 70%. Native capture and web orchestration address different parts of the recording lifecycle.

KotlinSwiftGCS
04 / AI CAMERA SWITCHING

Switch with confidence, not noise.

I built AI camera switching on two platforms using MediaPipe lip detection and audio active-speaker signals.

A rising confidence score prevents flip-flopping. When the signal is unclear, I hold the last speaker; when several people speak, I fall back to a wide shot.

MediaPipeActive-speaker detection
05 / LIVESHARE MOBILE

The guest camera is a phone.

I built the React Native LiveShare app so guests can join through a deep link and broadcast from their phones.

The capture experience includes multi-lens zoom and Bluetooth audio routing, with native capabilities connected to the cross-platform client.

React NativeExpoDeep linking
06 / BFF + CLOUD

An explicit integration boundary.

I built a Next.js BFF over FastAPI with Firebase auth, Stripe and SendGrid, reducing integration complexity by 22%.

I delivered three FastAPI workflows using Pub/Sub and Cloud Run for video processing, with Jenkins CI/CD. The BFF connects the web client to those services.

FastAPICloud RunPub/SubJenkins
04 — ENGINEERING DEEP DIVE
SIGNAL → DECISION → CAMERA

Making AI camera switching
feel human.

The loudest signal is not always the right moment to cut.

I combined MediaPipe lip detection with audio active-speaker signals. An instant threshold makes the decision too sensitive to a changing signal: small crossings can repeatedly change the selected camera.

I moved to a rising confidence score instead of switching immediately. Sustained evidence earns a switch; unclear evidence holds the last active speaker. When several people speak, the wide shot becomes the fallback rather than choosing one speaker arbitrarily.

SIMULATED SIGNALS
INPUTSpeaker A
Speaker A85%
Speaker B12%
Speaker C8%
CANDIDATE CONFIDENCE1.00
PROGRAMSpeaker A
Speaker A
Stable active speaker01 / 41
Same input. Different decisions.
FIG. 03 — SWITCHING BEHAVIORIllustrative signals and scoring · not production tuning
01 / BUILD CONFIDENCE

Wait for sustained evidence.

A rising score prevents a momentary signal from becoming an immediate cut.

02 / HOLD THE SHOT

Uncertainty is not a switch.

When the signal is unclear, preserve the last active speaker.

03 / GO WIDE

Show the conversation.

When several people speak, fall back to the wide shot.

05 — RESULTS

What shipped. What improved.

10months

To ship the platform

3workflows

Across web + mobile

70%

Recording reliability gain

22%

Less integration complexity

2platforms

AI camera switching

06 — WHAT I’D DO NEXT / LESSONS

The next iteration.

  1. 01

    Test the uncertain moments.

    I’d expand repeatable switching scenarios around ambiguous signals and overlapping speakers. A camera decision needs to make sense even when the evidence does not.

  2. 02

    Design recovery as its own path.

    I’d keep capture, upload and recovery as separate failure boundaries. Resumable chunks and retry belong in the design, not as a last-minute fallback.

  3. 03

    Keep the boundaries explicit.

    I’d preserve clear service boundaries while keeping producer-facing behavior predictable. The complexity behind a control should not leak into the decision to use it.

OPEN TO SOFTWARE ENGINEER ROLES

Let’s build something
that goes live.

Suman Kumar KhanPRISIUM · DIGITAL AVENUES · 2025–2026