diff --git a/src/scripts/browser.js b/src/scripts/browser.js index 672ef23fd4..af0a72ffe4 100644 --- a/src/scripts/browser.js +++ b/src/scripts/browser.js @@ -109,6 +109,51 @@ function iOSversion() { return []; } +function web0sVersion(browser) { + // Detect webOS version by web engine version + + if (browser.chrome) { + const userAgent = navigator.userAgent.toLowerCase(); + + if (userAgent.indexOf('netcast') !== -1) { + // The built-in browser (NetCast) may have a version that doesn't correspond to the actual web engine + // Since there is no reliable way to detect webOS version, we return an undefined version + + console.warn('Unable to detect webOS version - NetCast'); + + return undefined; + } + + // The next is only valid for the app + + if (browser.versionMajor >= 79) { + return 6; + } else if (browser.versionMajor >= 68) { + return 5; + } else if (browser.versionMajor >= 53) { + return 4; + } else if (browser.versionMajor >= 38) { + return 3; + } else if (browser.versionMajor >= 34) { + // webOS 2 browser + return 2; + } else if (browser.versionMajor >= 26) { + // webOS 1 browser + return 1; + } + } else if (browser.versionMajor >= 538) { + // webOS 2 app + return 2; + } else if (browser.versionMajor >= 537) { + // webOS 1 app + return 1; + } + + console.error('Unable to detect webOS version'); + + return undefined; +} + let _supportsCssAnimation; let _supportsCssAnimationWithPrefix; function supportsCssAnimation(allowPrefix) { @@ -251,14 +296,16 @@ browser.tizen = userAgent.toLowerCase().indexOf('tizen') !== -1 || window.tizen browser.web0s = isWeb0s(); browser.edgeUwp = browser.edge && (userAgent.toLowerCase().indexOf('msapphost') !== -1 || userAgent.toLowerCase().indexOf('webview') !== -1); -if (!browser.tizen) { - browser.orsay = userAgent.toLowerCase().indexOf('smarthub') !== -1; -} else { +if (browser.web0s) { + browser.web0sVersion = web0sVersion(browser); +} else if (browser.tizen) { // UserAgent string contains 'Safari' and 'safari' is set by matched browser, but we only want 'tizen' to be true delete browser.safari; const v = (navigator.appVersion).match(/Tizen (\d+).(\d+)/); browser.tizenVersion = parseInt(v[1]); +} else { + browser.orsay = userAgent.toLowerCase().indexOf('smarthub') !== -1; } if (browser.edgeUwp) { diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index 9e203c48e3..6ef748fbf8 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -387,11 +387,14 @@ import browser from './browser'; videoAudioCodecs.push('mp2'); } - let supportsDts = browser.tizen || browser.web0s || options.supportsDts || videoTestElement.canPlayType('video/mp4; codecs="dts-"').replace(/no/, '') || videoTestElement.canPlayType('video/mp4; codecs="dts+"').replace(/no/, ''); + let supportsDts = options.supportsDts; + if (supportsDts == null) { + supportsDts = browser.tizen || browser.web0sVersion || videoTestElement.canPlayType('video/mp4; codecs="dts-"').replace(/no/, '') || videoTestElement.canPlayType('video/mp4; codecs="dts+"').replace(/no/, ''); - // DTS audio not supported in 2018 models (Tizen 4.0) - if (browser.tizenVersion >= 4) { - supportsDts = false; + // DTS audio is not supported by Samsung TV 2018+ (Tizen 4.0+) and LG TV 2020+ (webOS 5.0+) models + if (browser.tizenVersion >= 4 || browser.web0sVersion >= 5) { + supportsDts = false; + } } if (supportsDts) {