npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@ottbasics/ott-analytics

v0.1.6

Published

High performance QoE-QoS analytics engine for DASH/HLS, optimized for Low Latency (LL) workflows

Downloads

492

Readme

Markdown

ott-analytics

A lightweight, framework-agnostic analytics SDK for modern OTT web players.

ott-analytics normalizes complex internal metrics from Shaka Player and Dash.js into a simple, unified data stream. It is specifically designed for monitoring Low Latency (LL-DASH) performance and live stream health.

License: MIT


Features

  • Unified Adapter Pattern: One API for both Shaka and Dash.js.
  • Low Latency First: Accurately calculates Live Edge drift and Latency to DASH (L2D) metrics.
  • Plug-and-Play UI: Includes a native Web Component diagnostic overlay using Shadow DOM for total style isolation.
  • Zero Dependencies: Pure TypeScript. No React, Vue, or heavy libraries required.
  • Memory Safe: Built-in detach() logic to prevent memory leaks on Smart TVs.

Quick Start

1. Installation

npm install @ottbasics/ott-analytics

2. Basic Usage with Visual Overlay

Use this if you want the built-in UI for showing the analytics.

import { OTTAnalytics } from "@ottbasics/ott-analytics";

const video = document.getElementById("my-video");
const player = new shaka.Player(video);

const analytics = new OTTAnalytics({ debug: true, speedTest: { interval: 5000 } });

//If you want to enable Network Speed too (use it cautiously, e.g. interval: 10000 as it is a heavy task)
//const analytics = new OTTAnalytics({ debug: true, speedTest: { interval: 5000 } });

// Attach to the player instance
analytics.attach(player, video);

// Listen for normalized updates
analytics.onMetrics((metrics) => {
    console.log(`Latency: ${metrics.latency}s | Buffer: ${metrics.bufferLevel}s`);
});

//The parent element to which the UI overlay should be attached
const container = document.getElementById("video-container");

analytics.showOverlay(container);

Diagnostics UI

The diagnostic UI is built using native Custom Elements to ensure maximum compatibility.

  • Encapsulation: Using Shadow DOM ensures your site's CSS won't break our overlay, and our styles won't leak into your application.
  • Portability: The UI works automatically across all modern frameworks (React, Vue, Angular) or plain HTML without requiring specific wrappers.

Metrics Data Model

The SDK normalizes all player data into a consistent object format for easy monitoring:

| Property | Type | Description | | :-------------------- | :-------- | :----------------------------------------------------------------------------------- | | latency | number | End-to-end latency in seconds. | | manifestLiveGap | number | Distance from current playhead to manifest live edge. | | bufferLevel | number | Current forward buffer in seconds. | | resolution | string | Playback rate of the video elementCurrent playback resolution (e.g., "1920x1080"). | | isLowLatency | boolean | Whether the player is in Low Latency mode. | | playbackRate | number | Playback rate of the video element. | | playerState | string | Player state - paused or playing. | | networkSpeed | number | Network Speed in bps. |


Cleanup

To avoid memory leaks, especially on memory-constrained devices like Smart TVs, always detach the analytics when destroying the player:

// Detach the analytics instance and clean up listeners
analytics.detach();

Sample Screenshot

App Screenshot