Skip to content

Compatibility

MeshedFlow runs in the browser, behind your player, over standard web platform APIs. This page covers what it works with and how device class shapes behavior.

  • hls.jsgenerally available. The primary, supported integration: MeshedFlow ships as an hls.js loader. If you play HLS with hls.js, you keep your player and wire MeshedFlow in as the loader.
  • Shaka Playerbeta, via the Shaka adapter.
  • dash.jsbeta (v5+), via the dash.js adapter.

Many popular players are wrappers around hls.js — video.js in hls.js mode (via an hls.js source-handler plugin), Plyr, Clappr, and ArtPlayer among them. Where the wrapper works, MeshedFlow works: the integration is the same loader / loaderConfig pair the SDK reference documents, passed through the wrapper’s hls.js config.

// Clappr example — wrappers that accept an hls.js config forward it verbatim.
import { MeshedFlowLoader } from 'https://meshedflow.com/sdk/dist/sdk.mjs';
const player = new Clappr.Player({
parentId: '#player',
source: 'https://cdn.example.com/live-demo/master.m3u8',
playback: {
hlsjsConfig: {
loader: MeshedFlowLoader,
loaderConfig: {
signalingUrl: 'wss://signal.meshedflow.com:8445/ws',
streamId: 'cust_20260808_eb8790f7:live-demo',
authToken: '<your-sdk-token>',
},
},
},
});

For wrappers where you construct the Hls instance yourself (Plyr, ArtPlayer’s customType), create new Hls({ loader: MeshedFlowLoader, loaderConfig: { … } }) and attach it to the wrapper’s <video> element as usual.

A beta adapter registers MeshedFlow as a Shaka networking scheme plugin for http/https: media segment requests go through the mesh (peer-first, CDN fallback, signed-segment verification); manifest, license, and every other request type passes straight to the network, untouched. Shaka’s request cancellation maps onto the mesh fetch. See the SDK reference for the snippet.

A beta adapter uses the dash.js v5 request/response interceptor API (player.addRequestInterceptor) to serve media segments from the mesh with automatic CDN fallback; MPD and license requests pass through untouched. dash.js v4 does not expose these interceptors — for v4, use an hls.js-style low-level integration or ask us. See the SDK reference for the snippet.

  • HLS — supported. MeshedFlow works with your existing HLS packaging.
  • DASH — beta, through the Shaka Player and dash.js adapters above.

Your packaging workflow is unchanged — MeshedFlow is a delivery layer, not a packaging or rights-management layer.

MeshedFlow needs these web platform APIs:

  • WebRTCRTCPeerConnection and RTCDataChannel (the peer data path).
  • WebSocket — for signaling / peer discovery.
  • SubtleCrypto (crypto.subtle) — for verifying segment signatures.

Minimum supported environments:

  • Chrome desktop — current and previous major.
  • Edge desktop — current and previous major.
  • Chrome Android — current and previous major.
  • Safari — treat as experimental unless verified for your content.
  • iOS — treat as constrained: WebRTC/DataChannel support and background behavior vary.

The SDK adapts its participation to the device class:

  • Desktop — connects to up to ~10 peers (maxPeers default 10).
  • Mobile — connects to fewer peers (mobile is capped lower internally) and applies upload caps to protect data and battery. A smaller in-memory cache applies on mobile automatically.
  • TV / constrained clients — can run receive-only (receiveOnly: true), downloading from peers without uploading to them.

By default the SDK is STUN-only: it uses public STUN servers (Google + Cloudflare) and does not relay through TURN. TURN URLs passed in iceServers are stripped unless you opt in.

  • To bring your own TURN, set allowByoTurn: true and provide your TURN servers in iceServers.
  • iceDirectTimeoutMs (default 45000) bounds direct ICE setup before the SDK abandons a direct peer connection and lets the segment fall back to the CDN.

Clients behind symmetric NAT often can’t establish a direct data channel STUN-only and will fall back to CDN for delivery. If a meaningful share of your audience is behind symmetric NAT and you want them meshing, add TURN — see Troubleshooting.