The video player SDK
Native SDKs.
One API.
Native playback on every platform behind a single, mirrored API — live & DVR, multi-DRM, server- and client-side ads, subtitles, casting, content ratings and a fully themeable player UI.
Free to evaluate — the full SDK, every feature, no sign-up, no time limit. The player shows a small OGPlayer watermark until a license key removes it.
The actual player chrome — identical on every platform.
Every feature, every platform
Distilled from the cross-platform parity matrix — dig into any of them in the guides.
Playlists & up next
Queue videos that auto-advance — per-item DRM and ads, a themeable countdown card, and a skip callback for analytics.
Vertical feed
A swipeable portrait feed on the same engine — player pool with instant swipes, split layouts, sponsored items, host rail.
Multi-DRM WV · PR · FP
Widevine, PlayReady and FairPlay behind one config — the SDK picks whichever the device supports, with rotating-token providers.
Live & DVR
Live edge, seekable DVR windows, behind-edge state — the chrome adapts to the stream type automatically.
Ads IMA · FreeWheel
Pre/mid/post-roll pods with SDK-drawn ad chrome, cue markers, skip handling and an ad-blocker policy on web.
Subtitles & audio
Embedded and sideloaded tracks, multi-language audio, styling and viewer-controlled text size.
Watermarks & overlays
Your overlays in nine anchored slots — the SDK keeps them clear of the controls and hides them during ads.
Content ratings
Kijkwijzer-style age and descriptor icons at program start — presets built in, your own artwork pluggable.
Custom actions & theming
Up to eight of your own icons in the chrome, replaceable glyphs, full color and dimension tokens.
Casting
Chromecast on Android, AirPlay on iOS — with a configurable button in the player chrome.
Don't take our word for it
The full demo runs in your browser — real streams, real DRM, real ads, no signup. Better yet: paste your own stream URL and watch it play in our player.
Write it once. Ship it everywhere.
The same class names, the same listeners, the same error codes — an integration ports between platforms almost mechanically.
val player = OGPlayer.Builder(context)
.setLicenseKey("OGP1…")
.build()
player.load(
OGMediaItem.Builder("https://…/master.m3u8")
.setTitle("Tears of Steel")
.build(),
) let player = OGPlayer(licenseKey: "OGP1…")
if let item = OGMediaItem(
urlString: "https://…/master.m3u8",
title: "Tears of Steel"
) {
player.load(item)
} const player = new OGPlayer({ licenseKey: "OGP1…" });
document.querySelector("og-player").player = player;
player.load({
url: "https://…/master.m3u8",
title: "Tears of Steel",
}); <OGPlayerView
licenseKey="OGP1…"
source={{
url: "https://…/master.m3u8",
title: "Tears of Steel",
}}
/> Coming soon. Native, modern on every platform
No XML layouts, no UIKit wrappers, no jQuery-era widgets — the player UI is built exclusively on each platform's modern toolkit.
Media3/ExoPlayer engine with a Compose-only player UI — drop OGPlayerView straight into your Compose tree. Published AAR artifacts.
AVFoundation engine with a SwiftUI-only player view — OGPlayerView is a native SwiftUI citizen. Swift Package Manager.
hls.js with native-HLS fallback, a framework-agnostic <og-player> element — npm package or a single script tag.
The same native players behind a typed Fabric component — <OGPlayerView> from npm wraps the Android and iOS SDKs, so playback, DRM and ads never leave native code. Flutter is coming soon.