Dolby Vision
This page documents how Dolby Vision is detected in DIVA Web and how Dolby Vision indicators are rendered in the UI.
What you learn
You are instantiating DIVA Player in your web front-end and want Dolby Vision streams to be evaluated and rendered correctly at runtime.
The goal of this article is to provide a working baseline where:
- HDR preference is enabled through
hdrMode. - Device HDR capability is provided through
deviceCapabilities.hasHDRSupport. - Internal runtime stream detection drives Dolby Vision UI.
Before starting
- Ensure your DIVA Back Office instance is up and running.
- Ask your video engineering team for
<videoId>and<settings URL>. - Ensure your test stream has Dolby Vision variants in manifest metadata.
Instantiation
Write the Basic instantiation code, then add dynamic-range related configuration.
Working sample code (.tsx)
Write App() as follows to provide startup HDR preference and device capability in a BO integration:
import { BoAdapterWebComponentProps, DivaWebBoAdapter } from "@deltatre-vxp/diva-sdk/diva-web-bo-adapter";
import "@deltatre-vxp/diva-sdk/diva-web-sdk/index.min.css";
const videoId = "<videoId>";
const libs = {
mux: "https://cdnjs.cloudflare.com/ajax/libs/mux.js/6.2.0/mux.min.js",
shaka: "https://ajax.googleapis.com/ajax/libs/shaka-player/4.16.15/shaka-player.compiled.js",
hlsJs: "https://cdn.jsdelivr.net/npm/hls.js@1.5.7",
googleIMA: false,
googleDAI: false,
googleCast: false,
threeJs: false,
};
const config = {
videoId,
hdrMode: true, // Enable HDR/Dolby Vision startup preference (Optional)
libs,
};
function App() {
const props: BoAdapterWebComponentProps = {
settingsUrl: "<settings URL>",
languageCode: "en-US",
languageDictionary: "en-US",
onDivaBoAdapterError: console.error,
config,
};
return <DivaWebBoAdapter {...props} />;
}
export default App;
End-to-end flow
- The active media player (HLS or DASH) computes dynamic range flags.
- The player updates internal Dolby Vision/HDR state.
- Engine player manager forwards this state through internal item/player pipelines.
- UI renders the Dolby Vision icon when runtime conditions are met.
Platform support
Current Dolby Vision support follows the same runtime pipeline used for HDR.
- RW: supported on all browsers where stream metadata and player detection rules are available.
- TV platforms supported:
- Tizen
- webOS
- Hisense
- Not supported:
- PS4
- PS5
- Xbox
How to use Dolby Vision
1. Enable startup dynamic-range preference
Set hdrMode: true in player config so your integration requests HDR-capable playback paths when available.
const config = {
videoId,
hdrMode: true, // Keep enabled to request HDR-capable playback
libs,
};
2. Return Dolby Vision-capable sources in metadata/entitlement
Ensure your backend and metadata pipeline return Dolby Vision-capable variants when HDR mode is enabled and the device can render compatible output.
3. Drive UI with runtime detection
Dolby Vision indicators are driven by internal runtime detection in DIVA Player/UI.
No public streamDynamicRange API is exposed for direct subscription in integrations.
4. Verify the flow
- Verify
hdrModeis true in launch/config. - Verify entitlement data includes:
videoCapabilities.hdruserpreference.hdr
- Verify Dolby Vision behavior at runtime using supported UI/player outcomes.
- Verify the Dolby Vision icon appears only when the active track is Dolby Vision and the device supports Dolby Vision.
Package context: HLS and DASH Dolby Vision detection
HLS detection rules
In player runtime, HLS computes dynamic range from level metadata and codec information:
isDolbyVisionis derived from supplemental codecs tokens or video codec tokens.isHdrandisDolbyVisionare clamped by device HDR rendering capability.
Conceptually, detection follows:
isDolbyVision = hasDolbyVisionSupplementalCodecs || hasDolbyVisionVideoCodec;
return { isHdr: activeFlags.isHdr && canRenderHdr, isDolbyVision: activeFlags.isDolbyVision && canRenderHdr };
DASH detection rules
In DASH runtime, Dolby Vision is derived from active variant codec values:
isDolbyVisionwhen codec includesdvav,dvhe, ordvh1.isHdrwhenhdrmetadata isPQ/HLGor codec includes HDR indicators.
Conceptually, detection follows:
const isDolbyVision = !!(codec && (codec.includes("dvav") || codec.includes("dvhe") || codec.includes("dvh1")));
Base player and engine propagation
- Runtime detection state is maintained internally by media players.
- Concrete players update internal dynamic-range state whenever detection changes.
- Engine player manager forwards this internal state to UI consumers.
Device capability and UI gating
Dolby Vision badge rendering is gated by both content flags and device capability:
- Runtime content flag: internal Dolby Vision detection state
- Device flag:
deviceModel.hasDolbyVisionSupport()
In WebTV UI (HdrDolby component), the Dolby Vision icon is shown only when both are true.
Entitlement and startup signals
There is no separate dolbyVisionMode startup prop.
hdrModeis the startup preference signal.- Runtime Dolby Vision state is resolved internally during playback.
Entitlement mapping uses HDR capability and preference keys:
videoCapabilities.hdruserpreference.hdr
Dolby Vision visibility is then finalized at runtime from stream metadata and device support checks.
How HDR capability is sent in entitlement request
hasHDRSupport is wired into adapter/device capabilities and then injected into entitlement data mapping.
Flow:
- Web BO adapter registers capability callback (
deviceCapabilities.hasHDRSupport). - Entitlement request builder receives
deviceCapabilities.hasHDRSupport. - During data mapping construction, it resolves
videoCapabilities.hdr. - The resolved mapping is serialized into
DataJSON and sent in entitlement request body.
hdrMode launch prop
hdrMode is a launch/config preference signal and is different from runtime stream detection.
hdrMode: requested HDR preference/activation at item/config level.- Runtime Dolby Vision state: active-stream detection handled internally by player and UI.
Quick troubleshooting
- No Dolby Vision icon:
- Check manifest metadata and active track codec values (
dvav,dvhe,dvh1). - Confirm active level/variant is Dolby Vision-capable.
- Verify playback behavior on a Dolby Vision-capable test stream/device combination.
- Verify device capability returns true from
hasDolbyVisionSupport().
- Check manifest metadata and active track codec values (
- Icon appears unexpectedly:
- Inspect active level/variant codec fields used by detection logic.
- Validate active track at the same time UI subscribes and renders.
- Expecting entitlement-only behavior:
- Dolby Vision is decided by runtime detection plus device support, not by a dedicated Dolby entitlement key.