From 053ce59352369fa7a02b22bcc54c5385e8340153 Mon Sep 17 00:00:00 2001 From: gnattu Date: Wed, 5 Nov 2025 18:45:51 +0800 Subject: [PATCH 1/3] Relax dynamic HDR device Profile HDR10+ are designed to be backward-compatible with HDR10 which means we can just advertise HDR10+ as supported for HDR10 supported clients. This will avoid the server to force a remux to remove the HDR10+ metadata to ensure compatibility. At least the server-side removal is not needed for major web browsers and the tvs that uses the web client. For TVs, we need to relax the device profile even more by exposing not-supported but can be played ranges. This is due to the HLS support on TVs are often lacking features and the remux on server side would end up removing more than just the dynamic range. I don't personally own any of the TVs, so I'm not sure if this relaxed profile would break anything though. --- src/scripts/browserDeviceProfile.js | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index 80bf0f33e3..b99e5e7d6f 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -1184,12 +1184,15 @@ export default function (options) { } if (supportsHdr10(options)) { - hevcVideoRangeTypes += '|HDR10'; - vp9VideoRangeTypes += '|HDR10'; - av1VideoRangeTypes += '|HDR10'; + // HDR10+ videos can be safely played on all HDR10 capable devices, just without the dynamic metadata. + hevcVideoRangeTypes += '|HDR10|HDR10Plus'; + vp9VideoRangeTypes += '|HDR10|HDR10Plus'; + av1VideoRangeTypes += '|HDR10|HDR10Plus'; if (browser.tizenVersion >= 3 || browser.vidaa) { - hevcVideoRangeTypes += '|DOVIWithHDR10'; + // Tizen TV does not support Dolby Vision at all, but it can safely play the HDR fallback. + // Advertising the support so that the server don't have to do the remux. + hevcVideoRangeTypes += '|DOVIWithHDR10|DOVIWithHDR10Plus|DOVIWithEL|DOVIWithELHDR10Plus|DOVIInvalid'; } } @@ -1209,11 +1212,17 @@ export default function (options) { hevcVideoRangeTypes += '|DOVI'; } if (profiles.includes(8)) { - hevcVideoRangeTypes += '|DOVIWithHDR10|DOVIWithHLG|DOVIWithSDR'; + hevcVideoRangeTypes += '|DOVIWithHDR10|DOVIWithHLG|DOVIWithSDR|DOVIWithHDR10Plus'; + } + + if (browser.web0s) { + // For webOS, we should allow direct play of some not fully supported DV profiles to avoid unnecessary remux/transcode + // webOS seems to be able to play the fallback of Profile 7 and most invalid profiles + hevcVideoRangeTypes += '|DOVIWithEL|DOVIWithELHDR10Plus|DOVIInvalid'; } if (supportedDolbyVisionProfileAv1(videoTestElement)) { - av1VideoRangeTypes += '|DOVI|DOVIWithHDR10|DOVIWithHLG|DOVIWithSDR'; + av1VideoRangeTypes += '|DOVI|DOVIWithHDR10|DOVIWithHLG|DOVIWithSDR|DOVIWithHDR10Plus'; } } From 7c0807680d154adadd0ff5952efa02ecc70fc2ad Mon Sep 17 00:00:00 2001 From: gnattu Date: Wed, 5 Nov 2025 19:26:57 +0800 Subject: [PATCH 2/3] Fix comment Co-authored-by: Tim Eisele --- src/scripts/browserDeviceProfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index b99e5e7d6f..c2c733709c 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -1191,7 +1191,7 @@ export default function (options) { if (browser.tizenVersion >= 3 || browser.vidaa) { // Tizen TV does not support Dolby Vision at all, but it can safely play the HDR fallback. - // Advertising the support so that the server don't have to do the remux. + // Advertising the support so that the server doesn't have to remux. hevcVideoRangeTypes += '|DOVIWithHDR10|DOVIWithHDR10Plus|DOVIWithEL|DOVIWithELHDR10Plus|DOVIInvalid'; } } From 9c76311936f91729723531c5371a9b6905beaa9e Mon Sep 17 00:00:00 2001 From: gnattu Date: Fri, 7 Nov 2025 10:35:05 +0800 Subject: [PATCH 3/3] Also add av1 ranges to relaxed profile --- src/scripts/browserDeviceProfile.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index c2c733709c..3b900326f0 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -1193,6 +1193,9 @@ export default function (options) { // Tizen TV does not support Dolby Vision at all, but it can safely play the HDR fallback. // Advertising the support so that the server doesn't have to remux. hevcVideoRangeTypes += '|DOVIWithHDR10|DOVIWithHDR10Plus|DOVIWithEL|DOVIWithELHDR10Plus|DOVIInvalid'; + // Although no official tools exist to create AV1+DV files yet, some of our users managed to use community tools to create such files. + // These files should also be playable on Tizen TVs. + av1VideoRangeTypes += '|DOVIWithHDR10|DOVIWithHDR10Plus|DOVIWithEL|DOVIWithELHDR10Plus|DOVIInvalid'; } } @@ -1223,6 +1226,11 @@ export default function (options) { if (supportedDolbyVisionProfileAv1(videoTestElement)) { av1VideoRangeTypes += '|DOVI|DOVIWithHDR10|DOVIWithHLG|DOVIWithSDR|DOVIWithHDR10Plus'; + if (browser.web0s) { + // For webOS, we should allow direct play of some not fully supported DV profiles to avoid unnecessary remux/transcode + // webOS seems to be able to play the fallback of Profile 7 and most invalid profiles + av1VideoRangeTypes += '|DOVIWithEL|DOVIWithELHDR10Plus|DOVIInvalid'; + } } }