From 5dbb2987ffa2400d7bafd9b90830b37dc1ec4197 Mon Sep 17 00:00:00 2001 From: Matthias Van Parijs Date: Tue, 31 Mar 2026 09:59:01 +0200 Subject: [PATCH] feat: Add basic support for TiVo OS (#9758) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I got in touch with some people at TiVo OS and they're willing to help out with proper device support. This is a draft as we'll have to figure out the details (eg; max resolution probing, HDR capabilities) along the way. Caveats - Earlier versions of BMW run on Linux, with user agent "Mozilla/5.0 (X11; Linux aarch64) AppleWebKit/573.36 (KHTML, like Gecko) Chrome/126.1.0.0.0 Safari/537.36 BMW/156", which is TiVo under the hood. Current implementation wouldn't match this but there's a few config variables that need to be adjusted (eg; CrossBoundaryStrategy RESET). - I have yet to check if newer BMW's (run on Android) contain TiVoOS in their user agent. - TiVo is a new player in the TV market, they ship their OS with various vendors. I shall yet have to receive proper info of what runs where. --------- Co-authored-by: Álvaro Velad Galván --- README.md | 2 ++ build/types/devices | 1 + lib/device/tivo_os.js | 66 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 lib/device/tivo_os.js diff --git a/README.md b/README.md index f2c34ff75..1fdb3a0de 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ for the up-to-date list of maintained branches of Shaka Player. |Playstation 4⁷| - | - | - | - | - | - | - | - |**Y**| |Playstation 5⁷| - | - | - | - | - | - | - | - |**Y**| |Titan OS⁷ | - | - | - | - | - | - | - | - |**Y**| +|TiVo OS⁷ | - | - | - | - | - | - | - | - |**Y**| NOTES: - ²: The latest stable Chromecast firmware is tested. Both sender and receiver @@ -254,6 +255,7 @@ Note: This module is experimental and is only included in the experimental build |Playstation 5⁷| - |untested⁷| - | - |untested⁷ | |Huawei⁷ | - | - | - |untested⁷|untested⁷ | |Titan OS⁷ |untested⁷ |untested⁷| - | - |untested⁷ | +|TiVo OS⁷ |untested⁷ |untested⁷| - | - |untested⁷ | Other DRM systems should work out of the box if they are interoperable and compliant to the EME spec. diff --git a/build/types/devices b/build/types/devices index 1cc2d3add..45a887def 100644 --- a/build/types/devices +++ b/build/types/devices @@ -4,6 +4,7 @@ +../../lib/device/hisense.js +../../lib/device/playstation.js +../../lib/device/titan_os.js ++../../lib/device/tivo_os.js +../../lib/device/tizen.js +../../lib/device/vizio.js +../../lib/device/webkit_stb.js diff --git a/lib/device/tivo_os.js b/lib/device/tivo_os.js new file mode 100644 index 000000000..087a1f12b --- /dev/null +++ b/lib/device/tivo_os.js @@ -0,0 +1,66 @@ +/*! @license + * Shaka Player + * Copyright 2026 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +goog.provide('shaka.device.TiVoOS'); + +goog.require('shaka.device.AbstractDevice'); +goog.require('shaka.device.DeviceFactory'); +goog.require('shaka.device.IDevice'); + + +/** + * @final + */ +shaka.device.TiVoOS = class extends shaka.device.AbstractDevice { + /** + * @override + */ + getVersion() { + return null; + } + + /** + * @override + */ + getDeviceName() { + return 'TiVoOS'; + } + + /** + * @override + */ + getDeviceType() { + return shaka.device.IDevice.DeviceType.TV; + } + + /** + * @override + */ + getBrowserEngine() { + return shaka.device.IDevice.BrowserEngine.CHROMIUM; + } + + /** + * @override + */ + supportsSmoothCodecSwitching(keySystem) { + return false; + } + + /** + * Check if the current platform is TiVoOS. + * @return {boolean} + * @private + */ + static isTiVoOS_() { + return navigator.userAgent.includes('TiVoOS'); + } +}; + +if (shaka.device.TiVoOS.isTiVoOS_()) { + shaka.device.DeviceFactory.registerDeviceFactory( + () => new shaka.device.TiVoOS()); +}