Controls & headless mode
Every control in the chrome has its own visibility flag — progress bar, time labels, ±seek buttons, volume, speed, quality, audio, subtitles, fullscreen, cast/AirPlay (mobile), title, content ratings. Flip any subset, or take the chrome fully headless and render your own UI on top of the engine.
// per-controlOGUiConfig.Builder() .setShowSpeedButton(false) .setShowCastButton(false) .build()
// fully headlessOGUiConfig.Builder().hideAllControls().build()// …or bring your own Composables:OGPlayerView(player = player, customControls = { MyControls(player) })// per-controlvar config = OGUIConfig()config.showSpeedButton = falseconfig.showAirPlayButton = false
// fully headlessvar lean = OGUIConfig.hidingAllControls()// …or bring your own view:OGPlayerView(player: player, isFullscreen: $isFullscreen, customControls: { AnyView(MyControls(player: player)) })// per-controlel.config = { showSpeedButton: false };
// fully headlessimport { hidingAllControls } from "ogplayer";el.config = hidingAllControls();Rules the SDK keeps for you:
- Play/pause and the LIVE chip are never hidden by the per-control flags — a player must stay operable.
- Live gating stacks on top of your flags: pure
LIVEdrops the scrubber, seek buttons and time labels; playback speed disappears on any live stream. - The error overlay always wins — even over custom controls.