~350-550ms time-to-first-frame on nearby relays. Direct MSE rendering with no player library overhead.
Automatic fallback to WebSocket for Safari and restrictive networks. Races WebTransport vs WebSocket.
Buffer-based ABR with automatic track switching. Supports multi-rendition CMAF streams.
No Shaka, dash.js, or HLS.js. Three standalone JS files — drop into any page.
Parses H.264 (avcC) and AAC (esds) codec info directly from init segments. No manual configuration.
RTT, throughput, and packet loss from the relay's perspective via the relay-stats MoQ track.
<video id="video" autoplay muted playsinline></video>
<script src="qmux.js"></script>
<script src="fragment-appender.js"></script>
<script src="moqt-player.js"></script>
<script>
const player = new MoqtPlayer({
relayUrl: 'https://your-relay.example.com',
namespace: 'your-stream',
video: document.getElementById('video'),
});
player.connect();
</script>
index.html?relay=https://relay.moqcdn.net&ns=my-stream