From 12bf6428e00b93cc2cf9cefcf4db39fe9c749ee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Velad=20Galv=C3=A1n?= Date: Fri, 29 Mar 2024 09:53:18 +0100 Subject: [PATCH] fix: Add ManagedMediaSource support in MediaSource polyfill (#6361) --- lib/polyfill/mediasource.js | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/lib/polyfill/mediasource.js b/lib/polyfill/mediasource.js index eab297881..4accb035a 100644 --- a/lib/polyfill/mediasource.js +++ b/lib/polyfill/mediasource.js @@ -30,7 +30,7 @@ shaka.polyfill.MediaSource = class { // platform detection tricks to decide which patches to install. const safariVersion = shaka.util.Platform.safariVersion(); - if (!window.MediaSource) { + if (!window.MediaSource && !window.ManagedMediaSource) { shaka.log.info('No MSE implementation available.'); } else if (shaka.util.Platform.isChromecast()) { shaka.log.info('Patching Chromecast MSE bugs.'); @@ -158,12 +158,25 @@ shaka.polyfill.MediaSource = class { * @private */ static rejectContainer_(container) { - const isTypeSupported = MediaSource.isTypeSupported; + const isTypeSupported = + // eslint-disable-next-line no-restricted-syntax + MediaSource.isTypeSupported.bind(MediaSource); MediaSource.isTypeSupported = (mimeType) => { const actualContainer = shaka.util.MimeUtils.getContainerType(mimeType); return actualContainer != container && isTypeSupported(mimeType); }; + + if (window.ManagedMediaSource) { + const isTypeSupportedManaged = + // eslint-disable-next-line no-restricted-syntax + ManagedMediaSource.isTypeSupported.bind(ManagedMediaSource); + + window.ManagedMediaSource.isTypeSupported = (mimeType) => { + const actualContainer = shaka.util.MimeUtils.getContainerType(mimeType); + return actualContainer != container && isTypeSupportedManaged(mimeType); + }; + } } /** @@ -175,12 +188,25 @@ shaka.polyfill.MediaSource = class { * @private */ static rejectCodec_(codec) { - const isTypeSupported = MediaSource.isTypeSupported; + const isTypeSupported = + // eslint-disable-next-line no-restricted-syntax + MediaSource.isTypeSupported.bind(MediaSource); MediaSource.isTypeSupported = (mimeType) => { const actualCodec = shaka.util.MimeUtils.getCodecBase(mimeType); return actualCodec != codec && isTypeSupported(mimeType); }; + + if (window.ManagedMediaSource) { + const isTypeSupportedManaged = + // eslint-disable-next-line no-restricted-syntax + ManagedMediaSource.isTypeSupported.bind(ManagedMediaSource); + + window.ManagedMediaSource.isTypeSupported = (mimeType) => { + const actualCodec = shaka.util.MimeUtils.getCodecBase(mimeType); + return actualCodec != codec && isTypeSupportedManaged(mimeType); + }; + } } /**