BustPlay
EN

A video player that earns on its own

Embeddable HTML5 player with an ad engine built in: VAST with wrapper chains, VMAP break scheduling and tracking that survives network drops — no external SDKs. Lightweight, keyboard-accessible, recolored with a single variable.

4.0 KB core (gzip) 0 core dependencies VAST + VMAP no SDK 164 tests in CI

This is not a screen recording — a real player from real builds. The first play starts with a pre-roll: the ad engine parses a VAST tag and runs the break itself. Space to play, F for fullscreen, hover the track for chapter previews.

What the product is made of

Platform

Not just a player — the whole loop

PII-free QoE analytics with ClickHouse ingest, offline licenses with domain binding, a dashboard with a builder and analytics. Every part is a separate package with its own size budget.

  • Analytics: TTFF, rebuffer, completion funnel
  • Licenses: ECDSA signature, verified offline
  • Dashboard: 2FA, keys, embed builder

One minute to the first frame

Two scripts and a stylesheet — the player works. Ads, streaming and analytics come as separate packages, only if you need them.

Documentation →
index.html

Build your player

A live builder, not screenshots: every setting is applied to a real player right away, and the code below it is ready to copy.

Skin
Accent
Interface language
Modules
BustPlayUI.createUI(player, { title: 'BustPlay' })

Size against the competition

Measured by us on September 4, 2026: official bundles, one method (gzip −9). The protocol with versions and caveats is in the repository.

Configuration (JS+CSS, gzip)BustPlayPlyr 3.8Fluid 3.60video.js 8.24
Player only17.5 KiB37.059.4208.3
Player + HLS (hls.js 1.7)202.2220.4≈243*208.3 (VHS built in)
Player + VAST ads26.859.4 (built in)≥392 (contrib-ads + IMA)

Honest caveats: video.js and Plyr have more features and a bigger ecosystem; our numbers reflect the current stage. *Fluid loads hls.js at runtime. IMA loads more code after start — 392 KiB is the lower bound. TTFF was not measured — that needs a shared rig.

FAQ

How is this different from Video.js or Plyr?

Monetization built in: ads are not a plugin on top but the dedicated core of a working RTB platform (VAST, wrapper chains, quartiles, capping). Plus size discipline: every package budget is a build gate — the “player only” config is 17.5 KiB gzip vs 208 for video.js.

Do I need Google IMA or another ad SDK?

No. The player parses and plays VAST tags itself, VMAP schedules too. External SDKs are attached through adapters only if you really need them.

How do I recolor the player to match my brand?

With a single CSS variable: --bp-played sets the accent, the rest of the chrome stays neutral. Skin is set by the data-skin attribute. No rebuild needed.

What about analytics privacy?

No PII by default: a random per-page session id (not a cookie), IP anonymized on ingest before storage, the page URL is sent only with the integrator’s explicit consent, and the share of sampled sessions is configurable.

Is it open source?

Yes: the core and all open-core modules are MIT. The second option is a commercial license: white-label without the attribution badge, priority support and guarantees. Without a key the player works fully — only the “BustPlay” badge remains.