Web, iOS and Android
The same streams, the same events and the same error codes on every platform. Web is available today, iOS is in private preview and Android is in development.
Native SDKs
Web, iOS and Android. Low-latency HLS, DRM and playback analytics come wired up; you pass a match URN and an api-key.
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.
You get a publishable api-key, and your domains and apps go on its allow-list.
An iframe, the JS SDK, or a native SDK. Pass a match URN and a key.
DRM-protected low-latency HLS from a global CDN, with go-live pickup.
QoE measured in the player: join time, rebuffers, quality switches.
<!-- 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>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();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,
});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.
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.
Want early access? havik-support@oddin.gg