UNPKG

shaka-player

Version:
156 lines (135 loc) 3.03 kB
/*! @license * Shaka Player * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ goog.provide('shaka.device.PlayStation'); goog.require('shaka.device.AbstractDevice'); goog.require('shaka.device.DeviceFactory'); goog.require('shaka.device.IDevice'); goog.require('shaka.log'); goog.require('shaka.util.Lazy'); /** * @final */ shaka.device.PlayStation = class extends shaka.device.AbstractDevice { constructor() { super(); /** @private {!shaka.util.Lazy<?number>} */ this.version_ = new shaka.util.Lazy(() => { const match = navigator.userAgent.match(/PlayStation (\d+)/); if (match) { return parseInt(match[1], 10); } return null; }); } /** * @override */ getDeviceName() { return 'PlayStation'; } /** * @override */ getDeviceType() { return shaka.device.IDevice.DeviceType.CONSOLE; } /** * @override */ getBrowserEngine() { return shaka.device.IDevice.BrowserEngine.WEBKIT; } /** * @override */ getVersion() { return this.version_.value(); } /** * @override */ supportsMediaCapabilities() { return false; } /** * @override */ supportsSequenceMode() { return false; } /** * @override */ supportsSmoothCodecSwitching() { return false; } /** * @override */ shouldAvoidUseTextDecoderEncoder() { return this.getVersion() === 4; } /** * @override */ async detectMaxHardwareResolution() { const maxResolution = {width: 1920, height: 1080}; let supports4K = false; try { const result = await window.msdk.device.getDisplayInfo(); supports4K = result.resolution === '4K'; } catch (e) { try { const result = await window.msdk.device.getDisplayInfoImmediate(); supports4K = result.resolution === '4K'; } catch (e) { shaka.log.alwaysWarn( 'PlayStation: Failed to get the display info:', e); } } if (supports4K) { maxResolution.width = 3840; maxResolution.height = 2160; } return maxResolution; } /** * @override */ adjustConfig(config) { super.adjustConfig(config); // The PS4 only supports the Playready DRM, so it should // prefer that key system by default to improve startup performance. if (this.getVersion() === 4) { config.drm.preferredKeySystems.push('com.microsoft.playready'); } config.streaming.clearDecodingCache = true; return config; } /** * @override */ returnLittleEndianUsingPlayReady() { return this.getVersion() === 4; } /** * @override */ supportsEncryptionSchemePolyfill() { return this.getVersion() !== 4; } /** * @return {boolean} * @private */ static isPlayStation_() { return navigator.userAgent.includes('PlayStation'); } }; if (shaka.device.PlayStation.isPlayStation_()) { shaka.device.DeviceFactory.registerDeviceFactory( () => new shaka.device.PlayStation()); }