Build with SPDN

Drop-in peer-to-peer delivery for your existing HLS player. Keep your CDN, your player, your auth — just add two script tags and watch your bandwidth bill collapse.

Two ways to integrate

Choose your model

Both run on the same multi-edge backend. The difference is who owns the manifest + segment hosting — and consequently, who pays the bandwidth bill.

STABLE · V3.18

SPDN Pro — Iframe Embed

Source URL in, embed iframe out. We host everything.

  • Give us any source — HLS, RTMP, MP4, MKV, DASH
  • Multi-edge CDN with V3.17 region-aware ingest
  • Zero-config: copy the embed code, paste, done
  • HTTP origins welcome (we HTTPS-terminate at the edge)
  • Flat-rate plans, bandwidth included
Create your first stream →
SPDN Lite SDK

P2P delivery, your existing player

The browser SDK hijacks your player's segment loader so chunks flow between viewers over WebRTC. Cache-miss segments fall back to your origin exactly the way they do today — no change to your manifest, no change to your auth, no change to your DRM.

60-second quickstart

HTML — drop into any page
<!-- 1. Load hls.js (or your player; Clappr / Video.js / JW Player all use hls.js underneath) -->
<script src="https://cdn.jsdelivr.net/npm/hls.js@1.5.13/dist/hls.min.js"></script>
<!-- 2. Load the SPDN SDK -->
<script src="https://spdn.tv/sdk/spdn-p2p.js"></script>

<video id="player" controls></video>
<script>
  // 3. Auth + open a session — pulls an app token from the dashboard
  const spdn = new SPDN({
    token:    "spdn_app_YOUR_TOKEN_HERE",
    streamId: "live-channel-1"
  });

  // 4. Hand any hls.js instance to the SDK; mesh starts on the next segment.
  spdn.ready.then(() => {
    const hls = new Hls();
    hls.attachMedia(document.getElementById("player"));
    spdn.attachToHls(hls);
    hls.loadSource("https://your-cdn.example.com/live.m3u8");
  });
</script>

Supported players

Anything built on hls.js works today. Native iOS Safari + non-HLS engines (Shaka, dash.js) are on the roadmap; ping us if you need one.

Live
hls.js
Raw integration · /sdk/demo
Live
Clappr
Auto-attach via internal hls · /sdk/clappr-demo
Compat
Video.js
hls.js-based; same attachToHls path
Compat
JW Player
hls.js-based; same attachToHls path
Roadmap
Shaka Player
Separate engine, planned
Roadmap
dash.js
DASH-specific path, planned
Roadmap
Bitmovin / THEOplayer
Commercial-player adapters
Roadmap
iOS / Android / Flutter
Native SDKs after web reaches GA

How it works

┌──────────────────┐ │ Customer site │ ← your domain │ ─────────────── │ │ hls.js + SDK │ ──HTTPS──► your CDN (m3u8 + segments) │ │ │ │ │ WebRTC │ ◄────► other viewers (peer mesh) │ ▼ │ │ signaling │ ──WSS──► spdn.tv signaling/tracker └──────────────────┘ (no segment bytes here) ──HTTPS──► spdn.tv stats heartbeat (~150 B / 30 s)

SPDN's infrastructure carries zero video bytes. The mesh delivers the offloadable fraction (typically 60–90%); the remainder falls back to your CDN over the same URLs as before. You only pay for what the mesh delivers — that's the saving, not the bill.

Get started

Three steps to first byte over P2P

1

Sign up

Create a free SPDN account — no credit card. Same dashboard powers both Lite and Pro.

2

Mint an app token

Dashboard → Developer → SDK Tokens → Create. Drop in your customer-facing domain(s); rotate any time.

3

Paste two script tags

Quickstart snippet above. Reload your page, open DevTools → Network, watch chunks come in over WebRTC instead of HTTP.

Open Dashboard → Developer Clappr demo →
Server-side API

Programmatic room management

Beyond the browser SDK, SPDN exposes a REST API for server-to-server use: create rooms, manage allowed domains, query stream stats, configure webhooks. Authenticated with the same dashboard via X-API-Key headers.

Read the API reference →

Need help integrating?

Tell us which player you're on and how much traffic you're moving today. We'll size a Lite or Pro plan, walk through the integration, and stand up your first stream.

hello@spdn.tv