Shamratha G

All Projects
Full-Stack

HLS Monitor

Team project — Amagi Media Labs Learning Hub 2025, with @Suraj-B12

A real-time HLS stream monitoring solution with live analytics, signal visualization, and health tracking: streams are polled every 7 seconds, scored 0–100 for health, analyzed via FFprobe, and rendered in a dark-themed dashboard with live thumbnails, VU meters, historical charts, and downloadable daily logs.

React Tailwind CSS Socket.io Recharts Node.js MongoDB

Problem Statement

  • Broadcast teams need to know an HLS stream is degrading before viewers do.
  • Bitrate, signal, and manifest health telemetry arrive as fast real-time bursts that a naive frontend can't render smoothly.
  • Critical failures need alerts that cut through, not just a red dot on a dashboard.
  • Error logs grow large quickly and must stay browsable without tanking the UI.

System Overview

HLS streamsNode.js polling workers + FFprobe analysisHealth scoring & MongoDB logsSocket.io real-time pushReact telemetry dashboard
  • Node.js/Express backend polls HLS streams on 7-second intervals, running FFprobe for detailed video, audio, and container analysis, with a sliding-window 0-100 health score and MongoDB-backed audit and error logs.
  • Real-time updates flow over Socket.io into the React + Tailwind dashboard (my scope): live VU meters for video/audio bitrates and scrollable historical Recharts graphs.
  • I built a custom AudioSynth engine on the Web Audio API that triggers localized siren/beep alerts for critical stream failures.
  • The frontend state layer I designed maps backend worker updates — manifest health scores, staleness metrics, sequence drifts — into the telemetry components.
  • Paginated lazy-loading for error logs keeps frame rates smooth under heavy data bursts; playback happens client-side via HLS.js-style playback so the server carries no video load.
  • Auto-updating stream thumbnails, downloadable daily log files with date selection, and a custom dark theme round out the operator experience.

What I Built

  • Architected the React + Tailwind CSS dashboard, using Socket.io to stream real-time video/audio bitrates into live VU meters and scrollable historical charts (Recharts).
  • Built a custom AudioSynth engine on the Web Audio API to trigger localized siren/beep alerts for critical stream failures.
  • Implemented paginated lazy-loading for error logs to keep frame rates smooth under heavy data bursts.
  • Designed the frontend state layer that maps real-time backend worker updates — manifest health scores, staleness metrics, sequence drifts — into the telemetry components.

Key Decisions & Tradeoffs

  • Socket.io streaming into the dashboard so bitrate and signal telemetry render live rather than on refresh.
  • Synthesized alert audio in the browser with the Web Audio API instead of shipping audio assets.
  • Paginated lazy-loading for error logs, chosen specifically to hold frame rates under heavy data bursts.
  • Client-side HLS playback so preview streams add no server load.

Why It Matters

It's production-flavored broadcast tooling built in an industry setting — real-time telemetry UI engineering where smoothness under data bursts is the actual requirement.

What I'd Improve Next

  • Add configurable alert rules and escalation channels (email/Slack/webhooks) beyond in-dashboard audio alerts.
  • Support adaptive-bitrate ladder analysis — per-rendition health rather than a single stream score.
  • Add long-term metric retention with downsampling so historical charts scale past daily log files.
  • Introduce user roles and authentication around the audit-logged operations.
  • Detect and alert on subtler stream pathologies such as SCTE-35 marker gaps, caption loss, and audio silence.