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.
Players
Section titled “Players”- hls.js — generally 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 Player — beta, via the Shaka adapter.
- dash.js — beta (v5+), via the dash.js adapter.
Players that embed hls.js
Section titled “Players that embed hls.js”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.
Shaka Player (beta)
Section titled “Shaka Player (beta)”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.
dash.js (beta)
Section titled “dash.js (beta)”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.
Formats
Section titled “Formats”- 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.
Browser requirements
Section titled “Browser requirements”MeshedFlow needs these web platform APIs:
- WebRTC —
RTCPeerConnectionandRTCDataChannel(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.
Device behavior
Section titled “Device behavior”The SDK adapts its participation to the device class:
- Desktop — connects to up to ~10 peers (
maxPeersdefault10). - 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.
NAT and ICE
Section titled “NAT and ICE”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: trueand provide your TURN servers iniceServers. iceDirectTimeoutMs(default45000) 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.
Related
Section titled “Related”- SDK reference → Core options —
maxPeers,receiveOnly,iceServers,allowByoTurn. - Troubleshooting & FAQ.