diff --git a/lib/polyfill/media_capabilities.js b/lib/polyfill/media_capabilities.js index 1979bd27da..ee4ec5551e 100644 --- a/lib/polyfill/media_capabilities.js +++ b/lib/polyfill/media_capabilities.js @@ -25,10 +25,8 @@ shaka.polyfill.MediaCapabilities = class { * @export */ static install() { - // Since MediaCapabilities implementation is buggy on the Chromecast - // platform (see https://github.com/shaka-project/shaka-player/issues/4569), - // we should always install polyfills on all Chromecast models. - // TODO: re-evaluate MediaCapabilities in the future versions of Chromecast. + // We can enable MediaCapabilities in Android and Fuchsia devices, but not + // in Linux devices because the implementation is buggy. // Since MediaCapabilities implementation is buggy in Apple browsers, we // should always install polyfill for Apple browsers. // See: https://github.com/shaka-project/shaka-player/issues/3530 @@ -50,12 +48,16 @@ shaka.polyfill.MediaCapabilities = class { // Since MediaCapabilities implementation is buggy in Hisense browsers, we // should always install polyfill for Hisense browsers. let canUseNativeMCap = true; + if (shaka.util.Platform.isChromecast() && + !shaka.util.Platform.isAndroidCastDevice() && + !shaka.util.Platform.isFuchsiaCastDevice()) { + canUseNativeMCap = false; + } if (shaka.util.Platform.isApple() || shaka.util.Platform.isPS5() || shaka.util.Platform.isPS4() || shaka.util.Platform.isWebOS() || shaka.util.Platform.isTizen() || - shaka.util.Platform.isChromecast() || shaka.util.Platform.isEOS() || shaka.util.Platform.isHisense()) { canUseNativeMCap = false; diff --git a/test/polyfill/media_capabilities_unit.js b/test/polyfill/media_capabilities_unit.js index 9737c68227..d484bb18aa 100644 --- a/test/polyfill/media_capabilities_unit.js +++ b/test/polyfill/media_capabilities_unit.js @@ -194,10 +194,10 @@ describe('MediaCapabilities', () => { await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig); expect(mockCanDisplayType).not.toHaveBeenCalled(); - // 1 (during install()) + + // 3 (during install()) + // 1 (for video config check) + // 1 (for audio config check). - expect(isChromecastSpy).toHaveBeenCalledTimes(3); + expect(isChromecastSpy).toHaveBeenCalledTimes(5); // 1 (fallback in canCastDisplayType()) + // 1 (mockDecodingConfig.audio). expect(supportMap.has(mockDecodingConfig.video.contentType)) @@ -219,10 +219,10 @@ describe('MediaCapabilities', () => { await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig); expect(mockCanDisplayType).not.toHaveBeenCalled(); - // 1 (during install()) + + // 3 (during install()) + // 1 (for video config check) + // 1 (for audio config check). - expect(isChromecastSpy).toHaveBeenCalledTimes(3); + expect(isChromecastSpy).toHaveBeenCalledTimes(5); // 1 (fallback in canCastDisplayType()) + // 1 (mockDecodingConfig.audio). expect(supportMap.has(mockDecodingConfig.video.contentType)) @@ -268,10 +268,10 @@ describe('MediaCapabilities', () => { shaka.polyfill.MediaCapabilities.install(); await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig); - // 1 (during install()) + + // 3 (during install()) + // 1 (for video config check) + // 1 (for audio config check). - expect(isChromecastSpy).toHaveBeenCalledTimes(3); + expect(isChromecastSpy).toHaveBeenCalledTimes(5); // 1 (mockDecodingConfig.audio). expect(supportMap.has(chromecastType)).toBe(true); // Called once in canCastDisplayType.