feat: Add basic support for TiVo OS (#9758)

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 <ladvan91@hotmail.com>
This commit is contained in:
Matthias Van Parijs
2026-03-31 09:59:01 +02:00
committed by GitHub
parent 8230cddecd
commit 5dbb2987ff
3 changed files with 69 additions and 0 deletions
+2
View File
@@ -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.
+1
View File
@@ -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
+66
View File
@@ -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());
}