Hi, I'm Navaneeth 👋

Bringing video to life on every screen — with code, care, and conviction

What's New

May 02, 2025

Started writing a journal series on Custom JS Player

Explains how video playes inside a browser, How to parse a manifest file, and many more

Apr 30, 2025

Bug Fixes

Fixed issues with $time$ MPDs and added support for manual bitrate switch

Apr 24, 2025

Released an NPM Package

A custom player from scratch using JavaScript and MSE - no libraries, no shortcuts

Projects

Custom DASH Player From Scratch

Custom JavaScript-based DASH player built using MSE with buffer handling, and manifest parsing, perfect for learning, extending, or integrating with legacy and modern web platforms.

  • JavaScript
  • MSE
  • DASH
  • Video

Responsive Player/Stream tester

Different JS players integrated with custom input and QoE analytics, built using plugin architecture

  • JavaScript
  • SHAKA
  • HLS JS
  • VideoJS
  • NSE-NAV
  • Architecture

High Performant TV APP

90+ Lighthouse scores for Performance, Accessibility and Best Practices

  • JavaScript
  • SHAKA
  • HLS JS
  • VideoJS
  • NSE-NAV
  • Architecture

Career Timeline

Senior Software Engineer – Ovyo

Jul 2023 – Present

Built highly optimized OTT TV apps across Samsung Tizen, LG WebOS, Hisense Vidaa and also Web Platforms — focused on playback performance, analytics, and cross-platform debugging.

Frontend Engineer – Diagnal

Jul 2019 – Jul 2023

Launched Optus Sport on PS4, migrated apps to React, integrated Shaka/Bitmovin with analytics and ads. Worked on TV Platforms like Samsung Tizen, LG WebOS, Hisense Vidaa, Microsoft Xbox, Sony PS4 AndroidTV and FireTV

Articles

Why Build Your Own Player in 2025?

Explains my journey of starting the project and a brief introduction

Read Article →

HTML5 Video and MSE: How Playback Actually Works

Explains how how video plays back in an HTML5 Video tag and how MSE helps in Adaptive video streaming

Read Article →

Parsing the MPD Manifest from Scratch

Explains how how to parse an mpd manifest and feed it to browser so that it can fetch and play the segments

Read Article →