@@ -24,8 +24,6 @@ shaka.polyfill.MediaCapabilities = class {
24
24
* @export
25
25
*/
26
26
static install ( ) {
27
- shaka . log . debug ( 'MediaCapabilities: install' ) ;
28
-
29
27
// Since MediaCapabilities is not fully supported on Chromecast yet, we
30
28
// should always install polyfill for Chromecast.
31
29
// TODO: re-evaluate MediaCapabilities in the future versions of Chromecast.
@@ -40,17 +38,26 @@ shaka.polyfill.MediaCapabilities = class {
40
38
// TODO: re-evaluate MediaCapabilities in the future versions of PS5
41
39
// Browsers.
42
40
if ( ! shaka . util . Platform . isChromecast ( ) &&
43
- ! shaka . util . Platform . isApple ( ) &&
44
- ! shaka . util . Platform . isPS5 ( ) &&
45
- navigator . mediaCapabilities ) {
46
- shaka . log . debug (
41
+ ! shaka . util . Platform . isApple ( ) &&
42
+ ! shaka . util . Platform . isPS5 ( ) &&
43
+ navigator . mediaCapabilities ) {
44
+ shaka . log . info (
47
45
'MediaCapabilities: Native mediaCapabilities support found.' ) ;
48
46
return ;
49
47
}
50
48
49
+ shaka . log . info ( 'MediaCapabilities: install' ) ;
50
+
51
51
if ( ! navigator . mediaCapabilities ) {
52
52
navigator . mediaCapabilities = /** @type {!MediaCapabilities } */ ( { } ) ;
53
53
}
54
+
55
+ // Keep the patched MediaCapabilities object from being garbage-collected in
56
+ // Safari.
57
+ // See https://github.com/google/shaka-player/issues/3696#issuecomment-1009472718
58
+ shaka . polyfill . MediaCapabilities . originalMcap =
59
+ navigator . mediaCapabilities ;
60
+
54
61
navigator . mediaCapabilities . decodingInfo =
55
62
shaka . polyfill . MediaCapabilities . decodingInfo_ ;
56
63
}
@@ -180,6 +187,16 @@ shaka.polyfill.MediaCapabilities = class {
180
187
}
181
188
} ;
182
189
190
+ /**
191
+ * A copy of the MediaCapabilities instance, to prevent Safari from
192
+ * garbage-collecting the polyfilled method on it. We make it public and export
193
+ * it to ensure that it is not stripped out by the compiler.
194
+ *
195
+ * @type {MediaCapabilities }
196
+ * @export
197
+ */
198
+ shaka . polyfill . MediaCapabilities . originalMcap = null ;
199
+
183
200
// Install at a lower priority than MediaSource polyfill, so that we have
184
201
// MediaSource available first.
185
202
shaka . polyfill . register ( shaka . polyfill . MediaCapabilities . install , - 1 ) ;
0 commit comments