Skip to content

Havik PlayerPlayer SDKs for live esports streams

Web, iOS and Android. Low-latency HLS, DRM and playback analytics come wired up; you pass a match URN and an api-key.

Havik Player

Built for esports and iGaming products: odds pages, betting interfaces and tournament hubs, where the live stream sits next to the rest of your product.

How it works

1Onboard once

You get a publishable api-key, and your domains and apps go on its allow-list.

2Embed the player

An iframe, the JS SDK, or a native SDK. Pass a match URN and a key.

3We deliver the stream

DRM-protected low-latency HLS from a global CDN, with go-live pickup.

4You see the quality

QoE measured in the player: join time, rebuffers, quality switches.

Play a match in your page

html
<!-- Quickest possible integration. See the guide for production hardening. -->
<iframe
  src="https://player-dev.oddin-video.gg/embed/?baseUrl=https%3A%2F%2Ffeed-dev.oddin-video.gg&matchUrn=od%3Amatch%3A1234&apiKey=pk_test_your_key"
  allow="autoplay; encrypted-media; picture-in-picture; fullscreen"
  allowfullscreen
  referrerpolicy="no-referrer"
  style="border: 0; width: 100%; aspect-ratio: 16 / 9"
></iframe>
ts
import { mountEmbed } from '@oddin-gg/havik-player';

const embed = mountEmbed({
  container: document.querySelector('#player')!,
  src: 'https://player-dev.oddin-video.gg/embed/',
  baseUrl: 'https://feed-dev.oddin-video.gg',
  matchUrn: 'od:match:1234',
  apiKey: 'pk_test_your_key', // dev only — see the embed guide
  onEvent: (msg) => console.log(msg.type),
});

embed.play();
ts
import { createPlayer } from '@oddin-gg/havik-player';

const player = await createPlayer({
  video: document.querySelector('video')!,
  baseUrl: 'https://feed-dev.oddin-video.gg',
  matchUrn: 'od:match:1234',
  credential: { apiKey: 'pk_test_your_key' },
  muted: true,
  waitForLive: true,
});
ts
import { resolveStream, licenseRequestHeaders } from '@oddin-gg/havik-player';

const cred = { apiKey: 'pk_test_your_key' };

const stream = await resolveStream({
  baseUrl: 'https://feed-dev.oddin-video.gg',
  matchUrn: 'od:match:1234',
  credential: cred,
  waitForLive: true,
});

// stream = { manifestUrl, drm: { widevine: { licenseUrl } }, … } — feed it to
// YOUR player and attach licenseRequestHeaders(stream, cred) on license calls.
// Full hls.js wiring: see the Bring-your-own-player guide.

Your api-key only works from origins Oddin has allow-listed, so onboard your domains before the first play. Every stream needs a match URN and a publishable api-key, and both come with onboarding.

Native apps, same streams

The iOS SDK plays FairPlay-protected LL-HLS through AVPlayer and is in private preview, on device today. The Android SDK, built on Media3 and Widevine, is in development. Both use the same resolve API, the same events and the same errors as the web SDK.

Havik app icon (iOS)Havik Player DemoiOS · App StoreComing soon
Havik app icon (Android)Havik Player DemoAndroid · Google PlayComing soon

Want early access? havik-support@oddin.gg

ISC licensed. Bundles hls.js (Apache-2.0).