shaka-player 4.9.27 → 4.9.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +2 -4
  2. package/dist/cast-boot.js +7 -0
  3. package/dist/deps.js +3 -3
  4. package/dist/locales.js +35 -35
  5. package/dist/shaka-player.compiled.d.ts +1 -1
  6. package/dist/shaka-player.compiled.debug.d.ts +1 -1
  7. package/dist/shaka-player.compiled.debug.js +123 -119
  8. package/dist/shaka-player.compiled.debug.map +3 -3
  9. package/dist/shaka-player.compiled.js +1059 -1052
  10. package/dist/shaka-player.compiled.map +3 -3
  11. package/dist/shaka-player.ui.d.ts +1 -1
  12. package/dist/shaka-player.ui.debug.d.ts +1 -1
  13. package/dist/shaka-player.ui.debug.js +315 -309
  14. package/dist/shaka-player.ui.debug.map +3 -3
  15. package/dist/shaka-player.ui.js +1060 -1053
  16. package/dist/shaka-player.ui.map +3 -3
  17. package/externs/shaka/player.js +13 -2
  18. package/lib/dash/dash_parser.js +7 -4
  19. package/lib/hls/hls_parser.js +18 -4
  20. package/lib/media/gap_jumping_controller.js +4 -2
  21. package/lib/media/preload_manager.js +17 -0
  22. package/lib/media/presentation_timeline.js +7 -1
  23. package/lib/media/streaming_engine.js +58 -21
  24. package/lib/net/networking_utils.js +5 -0
  25. package/lib/offline/storage.js +12 -10
  26. package/lib/player.js +44 -34
  27. package/lib/polyfill/encryption_scheme.js +9 -0
  28. package/lib/polyfill/media_capabilities.js +8 -2
  29. package/lib/util/periods.js +3 -0
  30. package/lib/util/platform.js +9 -1
  31. package/lib/util/player_configuration.js +5 -0
  32. package/package.json +1 -1
  33. package/ui/controls.js +14 -2
  34. package/ui/locales/README.md +16 -0
  35. package/ui/locales/sjn-translations.yaml +50 -4
  36. package/ui/locales/sjn.json +8 -1
  37. package/ui/locales/sync-sjn.py +41 -0
  38. package/ui/locales/zh-HK.json +30 -11
  39. package/ui/resolution_selection.js +4 -1
package/README.md CHANGED
@@ -41,7 +41,7 @@ for the up-to-date list of maintained branches of Shaka Player.
41
41
  |Edge Chromium |**Y** |**Y** |**Y** |untested⁵|**Native**|**Native** |**Native** | - | - |
42
42
  |IE | N | - | - | - | - | - | - | - | - |
43
43
  |Safari¹ | - |**Y** | - | - |**Native**|**Y** |**Y** | - | - |
44
- |Opera¹ |untested⁵ |untested⁵|untested⁵|untested⁵|**Native**| - | - | - | - |
44
+ |Opera¹ |**Y** |**Y** |**Y** |untested⁵|**Native**| - | - | - | - |
45
45
  |Chromecast². | - | - | - | - | - | - | - | - |**Y**|
46
46
  |Tizen TV³ | - | - | - | - | - | - | - | - |**Y**|
47
47
  |WebOS⁶ | - | - | - | - | - | - | - | - |**Y**|
@@ -182,7 +182,7 @@ MSS features **not** supported:
182
182
  |Edge³ | - |**Y** | - | - |
183
183
  |Edge Chromium |**Y** |**Y** | - |**Y** |
184
184
  |Safari | - | - |**Y** | - |
185
- |Opera |untested⁵ | - | - |untested⁵ |
185
+ |Opera |**Y** | - | - |**Y** |
186
186
  |Chromecast |**Y** |**Y** | - |**Y** |
187
187
  |Tizen TV |**Y** |**Y** | - |**Y** |
188
188
  |WebOS⁷ |untested⁷ |untested⁷| - |untested⁷ |
@@ -200,8 +200,6 @@ NOTES:
200
200
  - ²: DRM must be enabled by the user. The first time a Firefox user visits a
201
201
  site with encrypted media, the user will be prompted to enable DRM.
202
202
  - ³: PlayReady in Edge does not seem to work on a VM or over Remote Desktop.
203
- - ⁵: These are expected to work, but are not actively tested by the Shaka
204
- Player team.
205
203
  - ⁶: ClearKey is a useful tool for debugging, and does not provide actual
206
204
  content security.
207
205
  - ⁷: These are expected to work, but are community-supported and untested by
package/dist/cast-boot.js CHANGED
@@ -33,5 +33,12 @@ if (navigator.userAgent.indexOf('CrKey') != -1) {
33
33
  console.log('Cast SDK loaded');
34
34
  };
35
35
 
36
+ // Use an anonymous function here, normally banned in favor of arrow
37
+ // functions, for compatibility with the oldest devices and runtimes.
38
+ // eslint-disable-next-line no-restricted-syntax
39
+ script.onerror = function(error) {
40
+ window.dump('Unable to load Cast SDK: ' + error);
41
+ };
42
+
36
43
  document.head.appendChild(script);
37
44
  }
package/dist/deps.js CHANGED
@@ -126,9 +126,9 @@ goog.addDependency('../../../../lib/player.js', ['shaka.Player'], ['goog.asserts
126
126
  goog.addDependency('../../../../lib/polyfill/abort_controller.js', ['shaka.polyfill.AbortController'], ['shaka.polyfill', 'shaka.util.FakeEvent', 'shaka.util.FakeEventTarget'], {'lang': 'es6'});
127
127
  goog.addDependency('../../../../lib/polyfill/all.js', ['shaka.polyfill'], ['shaka.log'], {'lang': 'es6'});
128
128
  goog.addDependency('../../../../lib/polyfill/aria.js', ['shaka.polyfill.Aria'], ['shaka.log', 'shaka.polyfill'], {'lang': 'es6'});
129
- goog.addDependency('../../../../lib/polyfill/encryption_scheme.js', ['shaka.polyfill.EncryptionScheme'], ['shaka.polyfill'], {'lang': 'es6'});
129
+ goog.addDependency('../../../../lib/polyfill/encryption_scheme.js', ['shaka.polyfill.EncryptionScheme'], ['shaka.polyfill', 'shaka.util.Platform'], {'lang': 'es6'});
130
130
  goog.addDependency('../../../../lib/polyfill/fullscreen.js', ['shaka.polyfill.Fullscreen'], ['shaka.polyfill'], {'lang': 'es6'});
131
- goog.addDependency('../../../../lib/polyfill/media_capabilities.js', ['shaka.polyfill.MediaCapabilities'], ['shaka.log', 'shaka.media.Capabilities', 'shaka.polyfill', 'shaka.util.DrmUtils', 'shaka.util.Platform'], {'lang': 'es8'});
131
+ goog.addDependency('../../../../lib/polyfill/media_capabilities.js', ['shaka.polyfill.MediaCapabilities'], ['shaka.log', 'shaka.media.Capabilities', 'shaka.polyfill', 'shaka.util.DrmUtils', 'shaka.util.MimeUtils', 'shaka.util.Platform'], {'lang': 'es8'});
132
132
  goog.addDependency('../../../../lib/polyfill/mediasource.js', ['shaka.polyfill.MediaSource'], ['shaka.log', 'shaka.polyfill', 'shaka.util.MimeUtils', 'shaka.util.Platform'], {'lang': 'es6'});
133
133
  goog.addDependency('../../../../lib/polyfill/orientation.js', ['shaka.polyfill.Orientation'], ['shaka.log', 'shaka.polyfill', 'shaka.util.FakeEvent', 'shaka.util.FakeEventTarget'], {'lang': 'es6'});
134
134
  goog.addDependency('../../../../lib/polyfill/patchedmediakeys_apple.js', ['shaka.polyfill.PatchedMediaKeysApple'], ['goog.asserts', 'shaka.log', 'shaka.polyfill', 'shaka.util.BufferUtils', 'shaka.util.DrmUtils', 'shaka.util.EventManager', 'shaka.util.FakeEvent', 'shaka.util.FakeEventTarget', 'shaka.util.MediaReadyState', 'shaka.util.PublicPromise', 'shaka.util.StringUtils'], {'lang': 'es6'});
@@ -260,7 +260,7 @@ goog.addDependency('../../../../ui/presentation_time.js', ['shaka.ui.Presentatio
260
260
  goog.addDependency('../../../../ui/range_element.js', ['shaka.ui.RangeElement'], ['shaka.ui.Element', 'shaka.util.Dom', 'shaka.util.Timer'], {'lang': 'es6'});
261
261
  goog.addDependency('../../../../ui/recenter_vr.js', ['shaka.ui.RecenterVRButton'], ['shaka.ui.Controls', 'shaka.ui.Element', 'shaka.ui.Enums', 'shaka.ui.Locales', 'shaka.ui.Localization', 'shaka.ui.OverflowMenu', 'shaka.ui.Utils', 'shaka.util.Dom'], {'lang': 'es6'});
262
262
  goog.addDependency('../../../../ui/remote_button.js', ['shaka.ui.RemoteButton'], ['shaka.Player', 'shaka.ui.Controls', 'shaka.ui.Element', 'shaka.ui.Enums', 'shaka.ui.Locales', 'shaka.ui.Localization', 'shaka.ui.OverflowMenu', 'shaka.ui.Utils', 'shaka.util.Dom', 'shaka.util.Platform'], {'lang': 'es8'});
263
- goog.addDependency('../../../../ui/resolution_selection.js', ['shaka.ui.ResolutionSelection'], ['goog.asserts', 'shaka.Player', 'shaka.ui.Controls', 'shaka.ui.Enums', 'shaka.ui.Locales', 'shaka.ui.Localization', 'shaka.ui.OverflowMenu', 'shaka.ui.Overlay.TrackLabelFormat', 'shaka.ui.SettingsMenu', 'shaka.ui.Utils', 'shaka.util.Dom', 'shaka.util.FakeEvent'], {'lang': 'es6'});
263
+ goog.addDependency('../../../../ui/resolution_selection.js', ['shaka.ui.ResolutionSelection'], ['goog.asserts', 'shaka.Player', 'shaka.ui.Controls', 'shaka.ui.Enums', 'shaka.ui.Locales', 'shaka.ui.Localization', 'shaka.ui.OverflowMenu', 'shaka.ui.Overlay.TrackLabelFormat', 'shaka.ui.SettingsMenu', 'shaka.ui.Utils', 'shaka.util.Dom', 'shaka.util.FakeEvent', 'shaka.util.Functional'], {'lang': 'es6'});
264
264
  goog.addDependency('../../../../ui/rewind_button.js', ['shaka.ui.RewindButton'], ['shaka.ui.Controls', 'shaka.ui.Element', 'shaka.ui.Enums', 'shaka.ui.Locales', 'shaka.ui.Localization', 'shaka.util.Dom'], {'lang': 'es6'});
265
265
  goog.addDependency('../../../../ui/seek_bar.js', ['shaka.ui.SeekBar'], ['shaka.ads.AdManager', 'shaka.net.NetworkingEngine', 'shaka.ui.Constants', 'shaka.ui.Locales', 'shaka.ui.Localization', 'shaka.ui.RangeElement', 'shaka.ui.Utils', 'shaka.util.Dom', 'shaka.util.Error', 'shaka.util.Mp4Parser', 'shaka.util.Networking', 'shaka.util.Timer'], {'lang': 'es8'});
266
266
  goog.addDependency('../../../../ui/settings_menu.js', ['shaka.ui.SettingsMenu'], ['shaka.ui.Element', 'shaka.ui.Enums', 'shaka.ui.Utils', 'shaka.util.Dom', 'shaka.util.FakeEvent', 'shaka.util.Iterables'], {'lang': 'es6'});
package/dist/locales.js CHANGED
@@ -761,49 +761,49 @@ shaka.ui.Locales.addTo = function(localization) {
761
761
  * @const
762
762
  */
763
763
  shaka.ui.Locales.Ids = {
764
- SURROUND: 'SURROUND',
765
- ON: 'ON',
766
- PICTURE_IN_PICTURE: 'PICTURE_IN_PICTURE',
767
- TOGGLE_STEREOSCOPIC: 'TOGGLE_STEREOSCOPIC',
768
- LIVE: 'LIVE',
769
- UNRECOGNIZED_LANGUAGE: 'UNRECOGNIZED_LANGUAGE',
764
+ EXIT_LOOP_MODE: 'EXIT_LOOP_MODE',
770
765
  MUTE: 'MUTE',
771
- QUALITY: 'QUALITY',
772
- REWIND: 'REWIND',
773
- ENTER_PICTURE_IN_PICTURE: 'ENTER_PICTURE_IN_PICTURE',
774
- PAUSE: 'PAUSE',
775
- SEEK: 'SEEK',
776
- VOLUME: 'VOLUME',
777
- ENTER_LOOP_MODE: 'ENTER_LOOP_MODE',
778
- SUBTITLE_FORCED: 'SUBTITLE_FORCED',
779
- EXIT_FULL_SCREEN: 'EXIT_FULL_SCREEN',
780
- NOT_APPLICABLE: 'NOT_APPLICABLE',
766
+ AD_DURATION: 'AD_DURATION',
767
+ FULL_SCREEN: 'FULL_SCREEN',
768
+ PLAY: 'PLAY',
769
+ UNRECOGNIZED_LANGUAGE: 'UNRECOGNIZED_LANGUAGE',
770
+ REPLAY: 'REPLAY',
781
771
  RESOLUTION: 'RESOLUTION',
782
- CAPTIONS: 'CAPTIONS',
783
- AD_STATISTICS: 'AD_STATISTICS',
784
- STATISTICS: 'STATISTICS',
785
772
  MULTIPLE_LANGUAGES: 'MULTIPLE_LANGUAGES',
773
+ LIVE: 'LIVE',
774
+ PICTURE_IN_PICTURE: 'PICTURE_IN_PICTURE',
786
775
  UNMUTE: 'UNMUTE',
787
- PLAY: 'PLAY',
788
- EXIT_LOOP_MODE: 'EXIT_LOOP_MODE',
789
- MORE_SETTINGS: 'MORE_SETTINGS',
776
+ EXIT_PICTURE_IN_PICTURE: 'EXIT_PICTURE_IN_PICTURE',
777
+ AIRPLAY: 'AIRPLAY',
778
+ AD_TIME: 'AD_TIME',
779
+ REWIND: 'REWIND',
780
+ ENTER_PICTURE_IN_PICTURE: 'ENTER_PICTURE_IN_PICTURE',
781
+ ON: 'ON',
790
782
  FAST_FORWARD: 'FAST_FORWARD',
791
- UNDETERMINED_LANGUAGE: 'UNDETERMINED_LANGUAGE',
792
- AUTO_QUALITY: 'AUTO_QUALITY',
793
- FULL_SCREEN: 'FULL_SCREEN',
783
+ AD_STATISTICS: 'AD_STATISTICS',
784
+ SKIP_TO_LIVE: 'SKIP_TO_LIVE',
785
+ MORE_SETTINGS: 'MORE_SETTINGS',
786
+ STATISTICS: 'STATISTICS',
787
+ PAUSE: 'PAUSE',
788
+ RECENTER_VR: 'RECENTER_VR',
794
789
  PLAYBACK_RATE: 'PLAYBACK_RATE',
795
- SKIP_AD: 'SKIP_AD',
790
+ NOT_APPLICABLE: 'NOT_APPLICABLE',
796
791
  LANGUAGE: 'LANGUAGE',
797
- RECENTER_VR: 'RECENTER_VR',
798
- OFF: 'OFF',
799
- AD_PROGRESS: 'AD_PROGRESS',
800
792
  CAST: 'CAST',
801
- EXIT_PICTURE_IN_PICTURE: 'EXIT_PICTURE_IN_PICTURE',
802
- AD_DURATION: 'AD_DURATION',
803
- SKIP_TO_LIVE: 'SKIP_TO_LIVE',
793
+ SURROUND: 'SURROUND',
794
+ EXIT_FULL_SCREEN: 'EXIT_FULL_SCREEN',
795
+ AUTO_QUALITY: 'AUTO_QUALITY',
796
+ UNDETERMINED_LANGUAGE: 'UNDETERMINED_LANGUAGE',
797
+ QUALITY: 'QUALITY',
798
+ AD_PROGRESS: 'AD_PROGRESS',
804
799
  BACK: 'BACK',
805
- REPLAY: 'REPLAY',
806
- AIRPLAY: 'AIRPLAY',
800
+ SUBTITLE_FORCED: 'SUBTITLE_FORCED',
801
+ CAPTIONS: 'CAPTIONS',
802
+ SEEK: 'SEEK',
803
+ OFF: 'OFF',
804
+ ENTER_LOOP_MODE: 'ENTER_LOOP_MODE',
807
805
  LOOP: 'LOOP',
808
- AD_TIME: 'AD_TIME',
806
+ SKIP_AD: 'SKIP_AD',
807
+ TOGGLE_STEREOSCOPIC: 'TOGGLE_STEREOSCOPIC',
808
+ VOLUME: 'VOLUME',
809
809
  };
@@ -4639,7 +4639,7 @@ declare namespace shaka.extern {
4639
4639
  }
4640
4640
  // Generated from /home/runner/work/shaka-player/shaka-player/externs/shaka/player.js
4641
4641
  declare namespace shaka.extern {
4642
- type StreamingConfiguration = { allowMediaSourceRecoveries : boolean , alwaysStreamText : boolean , autoLowLatencyMode : boolean , bufferBehind : number , bufferingGoal : number , clearDecodingCache : boolean , disableAudioPrefetch : boolean , disableTextPrefetch : boolean , disableVideoPrefetch : boolean , dispatchAllEmsgBoxes : boolean , durationBackoff : number , evictionGoal : number , failureCallback : (a : shaka.util.Error ) => any , forceHTTP : boolean , forceHTTPS : boolean , gapDetectionThreshold : number , gapJumpTimerTime : number , ignoreTextStreamFailures : boolean , inaccurateManifestTolerance : number , infiniteLiveStreamDuration : boolean , liveSync : boolean , liveSyncMaxLatency : number , liveSyncMinLatency : number , liveSyncMinPlaybackRate : number , liveSyncPanicMode : boolean , liveSyncPanicThreshold : number , liveSyncPlaybackRate : number , liveSyncTargetLatencyTolerance : number , loadTimeout : number , lowLatencyMode : boolean , maxDisabledTime : number , minTimeBetweenRecoveries : number , observeQualityChanges : boolean , parsePrftBox : boolean , preferNativeHls : boolean , prefetchAudioLanguages : string [] , preloadNextUrlWindow : number , rebufferingGoal : number , retryParameters : shaka.extern.RetryParameters , safeSeekOffset : number , segmentPrefetchLimit : number , stallEnabled : boolean , stallSkip : number , stallThreshold : number , startAtSegmentBoundary : boolean , updateIntervalSeconds : number , useNativeHlsForFairPlay : boolean , useNativeHlsOnSafari : boolean , vodDynamicPlaybackRate : boolean , vodDynamicPlaybackRateBufferRatio : number , vodDynamicPlaybackRateLowBufferRate : number } ;
4642
+ type StreamingConfiguration = { allowMediaSourceRecoveries : boolean , alwaysStreamText : boolean , autoLowLatencyMode : boolean , bufferBehind : number , bufferingGoal : number , clearDecodingCache : boolean , disableAudioPrefetch : boolean , disableTextPrefetch : boolean , disableVideoPrefetch : boolean , dispatchAllEmsgBoxes : boolean , durationBackoff : number , evictionGoal : number , failureCallback : (a : shaka.util.Error ) => any , forceHTTP : boolean , forceHTTPS : boolean , gapDetectionThreshold : number , gapJumpTimerTime : number , gapPadding : number , ignoreTextStreamFailures : boolean , inaccurateManifestTolerance : number , infiniteLiveStreamDuration : boolean , liveSync : boolean , liveSyncMaxLatency : number , liveSyncMinLatency : number , liveSyncMinPlaybackRate : number , liveSyncPanicMode : boolean , liveSyncPanicThreshold : number , liveSyncPlaybackRate : number , liveSyncTargetLatencyTolerance : number , loadTimeout : number , lowLatencyMode : boolean , maxDisabledTime : number , minTimeBetweenRecoveries : number , observeQualityChanges : boolean , parsePrftBox : boolean , preferNativeHls : boolean , prefetchAudioLanguages : string [] , preloadNextUrlWindow : number , rebufferingGoal : number , retryParameters : shaka.extern.RetryParameters , safeSeekOffset : number , segmentPrefetchLimit : number , stallEnabled : boolean , stallSkip : number , stallThreshold : number , startAtSegmentBoundary : boolean , updateIntervalSeconds : number , useNativeHlsForFairPlay : boolean , useNativeHlsOnSafari : boolean , vodDynamicPlaybackRate : boolean , vodDynamicPlaybackRateBufferRatio : number , vodDynamicPlaybackRateLowBufferRate : number } ;
4643
4643
  }
4644
4644
  // Generated from /home/runner/work/shaka-player/shaka-player/externs/shaka/player.js
4645
4645
  declare namespace shaka.extern {
@@ -4639,7 +4639,7 @@ declare namespace shaka.extern {
4639
4639
  }
4640
4640
  // Generated from /home/runner/work/shaka-player/shaka-player/externs/shaka/player.js
4641
4641
  declare namespace shaka.extern {
4642
- type StreamingConfiguration = { allowMediaSourceRecoveries : boolean , alwaysStreamText : boolean , autoLowLatencyMode : boolean , bufferBehind : number , bufferingGoal : number , clearDecodingCache : boolean , disableAudioPrefetch : boolean , disableTextPrefetch : boolean , disableVideoPrefetch : boolean , dispatchAllEmsgBoxes : boolean , durationBackoff : number , evictionGoal : number , failureCallback : (a : shaka.util.Error ) => any , forceHTTP : boolean , forceHTTPS : boolean , gapDetectionThreshold : number , gapJumpTimerTime : number , ignoreTextStreamFailures : boolean , inaccurateManifestTolerance : number , infiniteLiveStreamDuration : boolean , liveSync : boolean , liveSyncMaxLatency : number , liveSyncMinLatency : number , liveSyncMinPlaybackRate : number , liveSyncPanicMode : boolean , liveSyncPanicThreshold : number , liveSyncPlaybackRate : number , liveSyncTargetLatencyTolerance : number , loadTimeout : number , lowLatencyMode : boolean , maxDisabledTime : number , minTimeBetweenRecoveries : number , observeQualityChanges : boolean , parsePrftBox : boolean , preferNativeHls : boolean , prefetchAudioLanguages : string [] , preloadNextUrlWindow : number , rebufferingGoal : number , retryParameters : shaka.extern.RetryParameters , safeSeekOffset : number , segmentPrefetchLimit : number , stallEnabled : boolean , stallSkip : number , stallThreshold : number , startAtSegmentBoundary : boolean , updateIntervalSeconds : number , useNativeHlsForFairPlay : boolean , useNativeHlsOnSafari : boolean , vodDynamicPlaybackRate : boolean , vodDynamicPlaybackRateBufferRatio : number , vodDynamicPlaybackRateLowBufferRate : number } ;
4642
+ type StreamingConfiguration = { allowMediaSourceRecoveries : boolean , alwaysStreamText : boolean , autoLowLatencyMode : boolean , bufferBehind : number , bufferingGoal : number , clearDecodingCache : boolean , disableAudioPrefetch : boolean , disableTextPrefetch : boolean , disableVideoPrefetch : boolean , dispatchAllEmsgBoxes : boolean , durationBackoff : number , evictionGoal : number , failureCallback : (a : shaka.util.Error ) => any , forceHTTP : boolean , forceHTTPS : boolean , gapDetectionThreshold : number , gapJumpTimerTime : number , gapPadding : number , ignoreTextStreamFailures : boolean , inaccurateManifestTolerance : number , infiniteLiveStreamDuration : boolean , liveSync : boolean , liveSyncMaxLatency : number , liveSyncMinLatency : number , liveSyncMinPlaybackRate : number , liveSyncPanicMode : boolean , liveSyncPanicThreshold : number , liveSyncPlaybackRate : number , liveSyncTargetLatencyTolerance : number , loadTimeout : number , lowLatencyMode : boolean , maxDisabledTime : number , minTimeBetweenRecoveries : number , observeQualityChanges : boolean , parsePrftBox : boolean , preferNativeHls : boolean , prefetchAudioLanguages : string [] , preloadNextUrlWindow : number , rebufferingGoal : number , retryParameters : shaka.extern.RetryParameters , safeSeekOffset : number , segmentPrefetchLimit : number , stallEnabled : boolean , stallSkip : number , stallThreshold : number , startAtSegmentBoundary : boolean , updateIntervalSeconds : number , useNativeHlsForFairPlay : boolean , useNativeHlsOnSafari : boolean , vodDynamicPlaybackRate : boolean , vodDynamicPlaybackRateBufferRatio : number , vodDynamicPlaybackRateLowBufferRate : number } ;
4643
4643
  }
4644
4644
  // Generated from /home/runner/work/shaka-player/shaka-player/externs/shaka/player.js
4645
4645
  declare namespace shaka.extern {