@amazon/vinyl 1.2.0 → 1.2.2
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.
- package/dist/index.cjs +24 -6
- package/dist/index.cjs.map +2 -2
- package/dist/index.js +33 -13
- package/dist/index.js.map +3 -3
- package/dist/test/integ.es5.js +62 -62
- package/dist/test/integ.js +119 -6
- package/dist/test/integ.js.map +2 -2
- package/dist/types/current/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/current/ad/AdBreakInfo.d.ts.map +1 -0
- package/dist/types/current/ad/AdBreakInfo.js +5 -0
- package/dist/types/current/ad/AdController.d.ts +229 -0
- package/dist/types/current/ad/AdController.d.ts.map +1 -0
- package/dist/types/current/ad/AdController.js +19 -0
- package/dist/types/current/ad/AdControllerImpl.d.ts +162 -0
- package/dist/types/current/ad/AdControllerImpl.d.ts.map +1 -0
- package/dist/types/current/ad/AdControllerImpl.js +741 -0
- package/dist/types/current/ad/AdError.d.ts +6 -0
- package/dist/types/current/ad/AdError.d.ts.map +1 -0
- package/dist/types/current/ad/AdError.js +14 -0
- package/dist/types/current/ad/AdsProvider.d.ts +28 -0
- package/dist/types/current/ad/AdsProvider.d.ts.map +1 -0
- package/dist/types/current/ad/AdsProvider.js +5 -0
- package/dist/types/current/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/current/ad/defaultAdLoadOptionsResolver.d.ts.map +1 -0
- package/dist/types/current/ad/defaultAdLoadOptionsResolver.js +26 -0
- package/dist/types/current/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/current/ad/discoverHlsInterstitials.d.ts.map +1 -0
- package/dist/types/current/ad/discoverHlsInterstitials.js +248 -0
- package/dist/types/current/drm/DrmControllerImpl.d.ts +6 -0
- package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
- package/dist/types/current/drm/DrmControllerImpl.js +23 -1
- package/dist/types/current/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/current/playback/createStallDetector.d.ts +43 -0
- package/dist/types/current/playback/createStallDetector.d.ts.map +1 -0
- package/dist/types/current/playback/createStallDetector.js +101 -0
- package/dist/types/current/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/current/playback/createStallMonitor.d.ts.map +1 -0
- package/dist/types/current/playback/createStallMonitor.js +99 -0
- package/dist/types/current/streaming/AudioOptions.d.ts +66 -0
- package/dist/types/current/streaming/AudioOptions.d.ts.map +1 -0
- package/dist/types/current/streaming/AudioOptions.js +19 -0
- package/dist/types/current/streaming/LoadMetric.d.ts +72 -0
- package/dist/types/current/streaming/LoadMetric.d.ts.map +1 -0
- package/dist/types/current/streaming/LoadMetric.js +5 -0
- package/dist/types/current/streaming/ManifestControllerImpl.d.ts +43 -0
- package/dist/types/current/streaming/ManifestControllerImpl.d.ts.map +1 -0
- package/dist/types/current/streaming/ManifestControllerImpl.js +104 -0
- package/dist/types/current/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/current/streaming/buffering/codecDenylist.d.ts.map +1 -0
- package/dist/types/current/streaming/buffering/codecDenylist.js +62 -0
- package/dist/types/current/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/current/streaming/createAllowedContentTypesValue.d.ts.map +1 -0
- package/dist/types/current/streaming/createAllowedContentTypesValue.js +43 -0
- package/dist/types/current/streaming/createTimelineContentTypesValue.d.ts +21 -0
- package/dist/types/current/streaming/createTimelineContentTypesValue.d.ts.map +1 -0
- package/dist/types/current/streaming/createTimelineContentTypesValue.js +25 -0
- package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.d.ts.map +1 -0
- package/dist/types/current/streaming/mediaTimelineAccessibilityFilter.js +75 -0
- package/dist/types/current/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/current/text/HtmlTextTrackRenderer.d.ts.map +1 -0
- package/dist/types/current/text/HtmlTextTrackRenderer.js +231 -0
- package/dist/types/current/text/SidecarTextTrackController.d.ts +103 -0
- package/dist/types/current/text/SidecarTextTrackController.d.ts.map +1 -0
- package/dist/types/current/text/SidecarTextTrackController.js +250 -0
- package/dist/types/current/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -0
- package/dist/types/current/text/SidecarTextTrackLoader.js +150 -0
- package/dist/types/current/text/TextTrack.d.ts +179 -0
- package/dist/types/current/text/TextTrack.d.ts.map +1 -0
- package/dist/types/current/text/TextTrack.js +29 -0
- package/dist/types/current/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/current/text/TextTrackRenderer.d.ts.map +1 -0
- package/dist/types/current/text/TextTrackRenderer.js +5 -0
- package/dist/types/current/text/VttCueStyle.d.ts +41 -0
- package/dist/types/current/text/VttCueStyle.d.ts.map +1 -0
- package/dist/types/current/text/VttCueStyle.js +45 -0
- package/dist/types/current/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/current/text/discoverDashTextTracks.d.ts.map +1 -0
- package/dist/types/current/text/discoverDashTextTracks.js +110 -0
- package/dist/types/current/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/current/text/discoverHlsTextTracks.d.ts.map +1 -0
- package/dist/types/current/text/discoverHlsTextTracks.js +49 -0
- package/dist/types/current/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/current/text/mediaTextTrackProvider.d.ts.map +1 -0
- package/dist/types/current/text/mediaTextTrackProvider.js +42 -0
- package/dist/types/current/text/parseWebVtt.d.ts +60 -0
- package/dist/types/current/text/parseWebVtt.d.ts.map +1 -0
- package/dist/types/current/text/parseWebVtt.js +249 -0
- package/dist/types/current/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/current/text/pickPreferredTextTrack.d.ts.map +1 -0
- package/dist/types/current/text/pickPreferredTextTrack.js +71 -0
- package/dist/types/current/track/SeekRange.d.ts +9 -0
- package/dist/types/current/track/SeekRange.d.ts.map +1 -0
- package/dist/types/current/track/SeekRange.js +5 -0
- package/dist/types/current/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/current/track/hls/HlsManifestData.d.ts.map +1 -0
- package/dist/types/current/track/hls/HlsManifestData.js +5 -0
- package/dist/types/current/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/current/track/hls/createHlsManifestProvider.d.ts.map +1 -0
- package/dist/types/current/track/hls/createHlsManifestProvider.js +9 -0
- package/dist/types/current/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/current/track/inferLoadOptionsFromUri.d.ts.map +1 -0
- package/dist/types/current/track/inferLoadOptionsFromUri.js +55 -0
- package/dist/types/current/track/mse/MseTrack.d.ts +0 -1
- package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
- package/dist/types/current/track/mse/MseTrack.js +4 -5
- package/dist/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/types/current/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/current/util/media/codecOverrides.d.ts.map +1 -0
- package/dist/types/current/util/media/codecOverrides.js +37 -0
- package/dist/types/current/util/media/codecSupport.d.ts +6 -0
- package/dist/types/current/util/media/codecSupport.d.ts.map +1 -0
- package/dist/types/current/util/media/codecSupport.js +17 -0
- package/dist/types/current/util/media/mimeType.d.ts +8 -0
- package/dist/types/current/util/media/mimeType.d.ts.map +1 -0
- package/dist/types/current/util/media/mimeType.js +13 -0
- package/dist/types/ts3.7/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/ts3.7/ad/AdController.d.ts +243 -0
- package/dist/types/ts3.7/ad/AdControllerImpl.d.ts +162 -0
- package/dist/types/ts3.7/ad/AdError.d.ts +6 -0
- package/dist/types/ts3.7/ad/AdsProvider.d.ts +28 -0
- package/dist/types/ts3.7/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/ts3.7/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/ts3.7/drm/DrmControllerImpl.d.ts +6 -0
- package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts3.7/playback/createStallDetector.d.ts +43 -0
- package/dist/types/ts3.7/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/ts3.7/streaming/AudioOptions.d.ts +66 -0
- package/dist/types/ts3.7/streaming/LoadMetric.d.ts +72 -0
- package/dist/types/ts3.7/streaming/ManifestControllerImpl.d.ts +40 -0
- package/dist/types/ts3.7/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/ts3.7/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/ts3.7/streaming/createTimelineContentTypesValue.d.ts +21 -0
- package/dist/types/ts3.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts3.7/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/ts3.7/text/SidecarTextTrackController.d.ts +103 -0
- package/dist/types/ts3.7/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/ts3.7/text/TextTrack.d.ts +183 -0
- package/dist/types/ts3.7/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/ts3.7/text/VttCueStyle.d.ts +41 -0
- package/dist/types/ts3.7/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/ts3.7/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/ts3.7/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/ts3.7/text/parseWebVtt.d.ts +60 -0
- package/dist/types/ts3.7/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/ts3.7/track/SeekRange.d.ts +9 -0
- package/dist/types/ts3.7/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/ts3.7/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts3.7/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts3.7/track/mse/MseTrack.d.ts +0 -1
- package/dist/types/ts3.7/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/ts3.7/util/media/codecSupport.d.ts +6 -0
- package/dist/types/ts3.7/util/media/mimeType.d.ts +8 -0
- package/dist/types/ts4.1/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/ts4.1/ad/AdController.d.ts +243 -0
- package/dist/types/ts4.1/ad/AdControllerImpl.d.ts +162 -0
- package/dist/types/ts4.1/ad/AdError.d.ts +6 -0
- package/dist/types/ts4.1/ad/AdsProvider.d.ts +28 -0
- package/dist/types/ts4.1/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/ts4.1/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/ts4.1/drm/DrmControllerImpl.d.ts +6 -0
- package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts4.1/playback/createStallDetector.d.ts +43 -0
- package/dist/types/ts4.1/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/ts4.1/streaming/AudioOptions.d.ts +66 -0
- package/dist/types/ts4.1/streaming/LoadMetric.d.ts +72 -0
- package/dist/types/ts4.1/streaming/ManifestControllerImpl.d.ts +40 -0
- package/dist/types/ts4.1/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/ts4.1/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/ts4.1/streaming/createTimelineContentTypesValue.d.ts +21 -0
- package/dist/types/ts4.1/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts4.1/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/ts4.1/text/SidecarTextTrackController.d.ts +104 -0
- package/dist/types/ts4.1/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/ts4.1/text/TextTrack.d.ts +183 -0
- package/dist/types/ts4.1/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/ts4.1/text/VttCueStyle.d.ts +41 -0
- package/dist/types/ts4.1/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/ts4.1/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/ts4.1/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/ts4.1/text/parseWebVtt.d.ts +60 -0
- package/dist/types/ts4.1/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/ts4.1/track/SeekRange.d.ts +9 -0
- package/dist/types/ts4.1/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/ts4.1/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts4.1/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts4.1/track/mse/MseTrack.d.ts +0 -1
- package/dist/types/ts4.1/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/ts4.1/util/media/codecSupport.d.ts +6 -0
- package/dist/types/ts4.1/util/media/mimeType.d.ts +8 -0
- package/dist/types/ts4.7/ad/AdBreakInfo.d.ts +160 -0
- package/dist/types/ts4.7/ad/AdController.d.ts +243 -0
- package/dist/types/ts4.7/ad/AdControllerImpl.d.ts +162 -0
- package/dist/types/ts4.7/ad/AdError.d.ts +6 -0
- package/dist/types/ts4.7/ad/AdsProvider.d.ts +28 -0
- package/dist/types/ts4.7/ad/defaultAdLoadOptionsResolver.d.ts +12 -0
- package/dist/types/ts4.7/ad/discoverHlsInterstitials.d.ts +22 -0
- package/dist/types/ts4.7/drm/DrmControllerImpl.d.ts +6 -0
- package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts4.7/playback/createStallDetector.d.ts +43 -0
- package/dist/types/ts4.7/playback/createStallMonitor.d.ts +45 -0
- package/dist/types/ts4.7/streaming/AudioOptions.d.ts +66 -0
- package/dist/types/ts4.7/streaming/LoadMetric.d.ts +72 -0
- package/dist/types/ts4.7/streaming/ManifestControllerImpl.d.ts +43 -0
- package/dist/types/ts4.7/streaming/buffering/codecDenylist.d.ts +23 -0
- package/dist/types/ts4.7/streaming/createAllowedContentTypesValue.d.ts +30 -0
- package/dist/types/ts4.7/streaming/createTimelineContentTypesValue.d.ts +21 -0
- package/dist/types/ts4.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts4.7/text/HtmlTextTrackRenderer.d.ts +60 -0
- package/dist/types/ts4.7/text/SidecarTextTrackController.d.ts +103 -0
- package/dist/types/ts4.7/text/SidecarTextTrackLoader.d.ts +65 -0
- package/dist/types/ts4.7/text/TextTrack.d.ts +183 -0
- package/dist/types/ts4.7/text/TextTrackRenderer.d.ts +24 -0
- package/dist/types/ts4.7/text/VttCueStyle.d.ts +41 -0
- package/dist/types/ts4.7/text/discoverDashTextTracks.d.ts +24 -0
- package/dist/types/ts4.7/text/discoverHlsTextTracks.d.ts +19 -0
- package/dist/types/ts4.7/text/mediaTextTrackProvider.d.ts +34 -0
- package/dist/types/ts4.7/text/parseWebVtt.d.ts +60 -0
- package/dist/types/ts4.7/text/pickPreferredTextTrack.d.ts +15 -0
- package/dist/types/ts4.7/track/SeekRange.d.ts +9 -0
- package/dist/types/ts4.7/track/hls/HlsManifestData.d.ts +19 -0
- package/dist/types/ts4.7/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts4.7/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts4.7/track/mse/MseTrack.d.ts +0 -1
- package/dist/types/ts4.7/util/media/codecOverrides.d.ts +33 -0
- package/dist/types/ts4.7/util/media/codecSupport.d.ts +6 -0
- package/dist/types/ts4.7/util/media/mimeType.d.ts +8 -0
- package/dist/unit/types/current/ad/AdController.test.d.ts +2 -0
- package/dist/unit/types/current/ad/AdController.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/AdController.test.js +10 -0
- package/dist/unit/types/current/ad/AdControllerImpl.test.d.ts +2 -0
- package/dist/unit/types/current/ad/AdControllerImpl.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/AdControllerImpl.test.js +1654 -0
- package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.d.ts +2 -0
- package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/defaultAdLoadOptionsResolver.test.js +56 -0
- package/dist/unit/types/current/ad/discoverHlsInterstitials.test.d.ts +2 -0
- package/dist/unit/types/current/ad/discoverHlsInterstitials.test.d.ts.map +1 -0
- package/dist/unit/types/current/ad/discoverHlsInterstitials.test.js +757 -0
- package/dist/unit/types/current/drm/DrmControllerImpl.test.js +96 -2
- package/dist/unit/types/current/playback/createStallDetector.test.d.ts +2 -0
- package/dist/unit/types/current/playback/createStallDetector.test.d.ts.map +1 -0
- package/dist/unit/types/current/playback/createStallDetector.test.js +163 -0
- package/dist/unit/types/current/playback/createStallMonitor.test.d.ts +2 -0
- package/dist/unit/types/current/playback/createStallMonitor.test.d.ts.map +1 -0
- package/dist/unit/types/current/playback/createStallMonitor.test.js +163 -0
- package/dist/unit/types/current/streaming/ManifestControllerImpl.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/ManifestControllerImpl.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/ManifestControllerImpl.test.js +197 -0
- package/dist/unit/types/current/streaming/MseTrack.test.js +15 -0
- package/dist/unit/types/current/streaming/buffering/codecDenylist.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/buffering/codecDenylist.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/buffering/codecDenylist.test.js +56 -0
- package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/createAllowedContentTypesValue.test.js +77 -0
- package/dist/unit/types/current/streaming/createTimelineContentTypesValue.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/createTimelineContentTypesValue.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/createTimelineContentTypesValue.test.js +57 -0
- package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.d.ts +2 -0
- package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.d.ts.map +1 -0
- package/dist/unit/types/current/streaming/mediaTimelineAccessibilityFilter.test.js +99 -0
- package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts +2 -0
- package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/HtmlTextTrackRenderer.test.js +231 -0
- package/dist/unit/types/current/text/SidecarTextTrackController.test.d.ts +2 -0
- package/dist/unit/types/current/text/SidecarTextTrackController.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/SidecarTextTrackController.test.js +686 -0
- package/dist/unit/types/current/text/SidecarTextTrackLoader.test.d.ts +2 -0
- package/dist/unit/types/current/text/SidecarTextTrackLoader.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/SidecarTextTrackLoader.test.js +365 -0
- package/dist/unit/types/current/text/TextTrack.test.d.ts +2 -0
- package/dist/unit/types/current/text/TextTrack.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/TextTrack.test.js +12 -0
- package/dist/unit/types/current/text/VttCueStyle.test.d.ts +2 -0
- package/dist/unit/types/current/text/VttCueStyle.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/VttCueStyle.test.js +76 -0
- package/dist/unit/types/current/text/discoverDashTextTracks.test.d.ts +2 -0
- package/dist/unit/types/current/text/discoverDashTextTracks.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/discoverDashTextTracks.test.js +216 -0
- package/dist/unit/types/current/text/discoverHlsTextTracks.test.d.ts +2 -0
- package/dist/unit/types/current/text/discoverHlsTextTracks.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/discoverHlsTextTracks.test.js +177 -0
- package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts +2 -0
- package/dist/unit/types/current/text/mediaTextTrackProvider.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/mediaTextTrackProvider.test.js +86 -0
- package/dist/unit/types/current/text/parseWebVtt.test.d.ts +2 -0
- package/dist/unit/types/current/text/parseWebVtt.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/parseWebVtt.test.js +419 -0
- package/dist/unit/types/current/text/pickPreferredTextTrack.test.d.ts +2 -0
- package/dist/unit/types/current/text/pickPreferredTextTrack.test.d.ts.map +1 -0
- package/dist/unit/types/current/text/pickPreferredTextTrack.test.js +78 -0
- package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.d.ts +2 -0
- package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.d.ts.map +1 -0
- package/dist/unit/types/current/track/inferLoadOptionsFromUri.test.js +165 -0
- package/dist/unit/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/unit/types/current/util/media/codecOverrides.test.d.ts +2 -0
- package/dist/unit/types/current/util/media/codecOverrides.test.d.ts.map +1 -0
- package/dist/unit/types/current/util/media/codecOverrides.test.js +42 -0
- package/dist/unit/types/current/util/media/codecSupport.test.d.ts +2 -0
- package/dist/unit/types/current/util/media/codecSupport.test.d.ts.map +1 -0
- package/dist/unit/types/current/util/media/codecSupport.test.js +26 -0
- package/dist/unit/types/current/util/media/mimeType.test.d.ts +2 -0
- package/dist/unit/types/current/util/media/mimeType.test.d.ts.map +1 -0
- package/dist/unit/types/current/util/media/mimeType.test.js +22 -0
- package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.d.ts +2 -0
- package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.d.ts.map +1 -0
- package/dist/unit/types/current/vinyl/VinylPlayerAdBreaks.test.js +142 -0
- package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.d.ts +2 -0
- package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.d.ts.map +1 -0
- package/dist/unit/types/current/vinyl/VinylPlayerTextTracks.test.js +188 -0
- package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.d.ts.map +1 -0
- package/dist/vinylTestUtil/types/current/mock/ad/MockAdController.js +26 -0
- package/dist/vinylTestUtil/types/current/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.d.ts.map +1 -0
- package/dist/vinylTestUtil/types/current/mock/text/MockTextTrackController.js +14 -0
- package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/vinylTestUtil/types/ts3.7/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts3.7/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/ts3.7/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/ts4.1/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/dash/mockDashManifest.d.ts +84 -84
- package/dist/vinylTestUtil/types/ts4.7/mock/text/MockTextTrackController.d.ts +10 -0
- package/package.json +10 -11
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type Timestamp } from '@amazon/vinyl-util';
|
|
2
|
+
import type { ReadonlyPlaybackController } from './ReadonlyPlaybackController';
|
|
3
|
+
import { StallEndedReason } from './ReadonlyPlaybackController';
|
|
4
|
+
export interface StallMonitorOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Seconds the play head must be frozen (no `timeUpdate`) while playing before a stall is
|
|
7
|
+
* reported. Default: 1
|
|
8
|
+
*/
|
|
9
|
+
readonly stallThreshold?: number;
|
|
10
|
+
/**
|
|
11
|
+
* How often (seconds) the play head freeze is checked. Default: 0.25
|
|
12
|
+
*/
|
|
13
|
+
readonly pollInterval?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface StallEndedInfo {
|
|
16
|
+
/** Time of the last `timeUpdate` observed before the play head froze. */
|
|
17
|
+
readonly started: Timestamp;
|
|
18
|
+
/** Time the stall ended. */
|
|
19
|
+
readonly ended: Timestamp;
|
|
20
|
+
/** Total seconds the play head was frozen. */
|
|
21
|
+
readonly duration: number;
|
|
22
|
+
/** Why the stall ended. */
|
|
23
|
+
readonly reason: StallEndedReason;
|
|
24
|
+
}
|
|
25
|
+
export interface StallMonitorCallbacks {
|
|
26
|
+
/** Called when a stall is first detected. */
|
|
27
|
+
readonly onStallEntered: () => void;
|
|
28
|
+
/** Called when a detected stall ends. */
|
|
29
|
+
readonly onStallEnded: (info: StallEndedInfo) => void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Watches a {@link ReadonlyPlaybackController} for stalls while playing: the play head freezing
|
|
33
|
+
* (no `timeUpdate`) for longer than {@link StallMonitorOptions.stallThreshold} seconds.
|
|
34
|
+
*
|
|
35
|
+
* Detection only runs once playback has actually been observed (a `playing` event) and is
|
|
36
|
+
* suspended on `pause`/`seeking`/`emptied` until playback is observed again — so a stall is never
|
|
37
|
+
* reported during initial loading or while awaiting a seek. A detected stall ends when the play
|
|
38
|
+
* head advances again (`playing`) or playback stops for another reason (`pause`/`seeking`/
|
|
39
|
+
* `emptied`); {@link StallEndedInfo.duration} is measured from the last `timeUpdate` before the
|
|
40
|
+
* freeze, so it reflects the full frozen time rather than only the time past the threshold.
|
|
41
|
+
*
|
|
42
|
+
* Returns a function that stops the monitor.
|
|
43
|
+
*/
|
|
44
|
+
export declare function createStallMonitor(controller: ReadonlyPlaybackController, callbacks: StallMonitorCallbacks, options?: StallMonitorOptions): () => void;
|
|
45
|
+
//# sourceMappingURL=createStallMonitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStallMonitor.d.ts","sourceRoot":"","sources":["../../../../src/playback/createStallMonitor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAE/D,MAAM,WAAW,mBAAmB;IAChC;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAEhC;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CACjC;AAED,MAAM,WAAW,cAAc;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,2BAA2B;IAC3B,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAA;CACpC;AAED,MAAM,WAAW,qBAAqB;IAClC,6CAA6C;IAC7C,QAAQ,CAAC,cAAc,EAAE,MAAM,IAAI,CAAA;IACnC,yCAAyC;IACzC,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;CACxD;AASD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAC9B,UAAU,EAAE,0BAA0B,EACtC,SAAS,EAAE,qBAAqB,EAChC,OAAO,GAAE,mBAAwB,GAClC,MAAM,IAAI,CA+EZ"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { createDisposer } from '@amazon/vinyl-util';
|
|
6
|
+
import { StallEndedReason } from './ReadonlyPlaybackController';
|
|
7
|
+
/**
|
|
8
|
+
* Minimum forward `currentTime` change (seconds) that counts as real progress. Guards the
|
|
9
|
+
* progress check against floating-point jitter so a negligible advance isn't mistaken for the
|
|
10
|
+
* play head moving.
|
|
11
|
+
*/
|
|
12
|
+
const PROGRESS_EPSILON = 1e-6;
|
|
13
|
+
/**
|
|
14
|
+
* Watches a {@link ReadonlyPlaybackController} for stalls while playing: the play head freezing
|
|
15
|
+
* (no `timeUpdate`) for longer than {@link StallMonitorOptions.stallThreshold} seconds.
|
|
16
|
+
*
|
|
17
|
+
* Detection only runs once playback has actually been observed (a `playing` event) and is
|
|
18
|
+
* suspended on `pause`/`seeking`/`emptied` until playback is observed again — so a stall is never
|
|
19
|
+
* reported during initial loading or while awaiting a seek. A detected stall ends when the play
|
|
20
|
+
* head advances again (`playing`) or playback stops for another reason (`pause`/`seeking`/
|
|
21
|
+
* `emptied`); {@link StallEndedInfo.duration} is measured from the last `timeUpdate` before the
|
|
22
|
+
* freeze, so it reflects the full frozen time rather than only the time past the threshold.
|
|
23
|
+
*
|
|
24
|
+
* Returns a function that stops the monitor.
|
|
25
|
+
*/
|
|
26
|
+
export function createStallMonitor(controller, callbacks, options = {}) {
|
|
27
|
+
const stallThresholdMs = (options.stallThreshold ?? 1) * 1000;
|
|
28
|
+
const pollIntervalMs = (options.pollInterval ?? 0.25) * 1000;
|
|
29
|
+
// Only detect once playback has been observed; gates out initial load and post-seek buffering.
|
|
30
|
+
let observedPlaying = false;
|
|
31
|
+
// Wall-clock time of the last `timeUpdate` — the reference start of any freeze.
|
|
32
|
+
let lastProgressAt = Date.now();
|
|
33
|
+
let inStall = false;
|
|
34
|
+
let pollId = null;
|
|
35
|
+
const { add, dispose } = createDisposer();
|
|
36
|
+
const endStall = (reason) => {
|
|
37
|
+
if (!inStall)
|
|
38
|
+
return;
|
|
39
|
+
inStall = false;
|
|
40
|
+
const ended = Date.now();
|
|
41
|
+
callbacks.onStallEnded({
|
|
42
|
+
started: lastProgressAt,
|
|
43
|
+
ended,
|
|
44
|
+
duration: (ended - lastProgressAt) / 1000,
|
|
45
|
+
reason,
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
const stopPoll = () => {
|
|
49
|
+
if (pollId == null)
|
|
50
|
+
return;
|
|
51
|
+
clearInterval(pollId);
|
|
52
|
+
pollId = null;
|
|
53
|
+
};
|
|
54
|
+
add(stopPoll);
|
|
55
|
+
const startPoll = () => {
|
|
56
|
+
if (pollId != null)
|
|
57
|
+
return;
|
|
58
|
+
pollId = setInterval(() => {
|
|
59
|
+
if (inStall || !observedPlaying)
|
|
60
|
+
return;
|
|
61
|
+
if (Date.now() - lastProgressAt >= stallThresholdMs) {
|
|
62
|
+
inStall = true;
|
|
63
|
+
callbacks.onStallEntered();
|
|
64
|
+
}
|
|
65
|
+
}, pollIntervalMs);
|
|
66
|
+
};
|
|
67
|
+
// Playback stopped for a non-resume reason: close any open stall and suspend detection until
|
|
68
|
+
// playback is observed again.
|
|
69
|
+
const suspend = (reason) => {
|
|
70
|
+
endStall(reason);
|
|
71
|
+
observedPlaying = false;
|
|
72
|
+
stopPoll();
|
|
73
|
+
};
|
|
74
|
+
add(controller.on('playing', () => {
|
|
75
|
+
// Resuming from a stall closes it (using the pre-resume freeze start for its duration).
|
|
76
|
+
if (inStall)
|
|
77
|
+
endStall(StallEndedReason.PLAYING);
|
|
78
|
+
// Whether resuming or freshly starting, the play head is advancing again, so restart the
|
|
79
|
+
// freeze clock. Without this the poll could immediately re-detect a stall from the stale
|
|
80
|
+
// pre-freeze timestamp before the first post-resume `timeUpdate` resets it.
|
|
81
|
+
lastProgressAt = Date.now();
|
|
82
|
+
observedPlaying = true;
|
|
83
|
+
startPoll();
|
|
84
|
+
}));
|
|
85
|
+
add(controller.on('timeUpdate', ({ previous, current }) => {
|
|
86
|
+
// Browsers emit `timeUpdate` while frozen (unchanged/backward `currentTime`); only a
|
|
87
|
+
// forward advance is progress, else a stall is ended and re-detected, doubling events.
|
|
88
|
+
if (previous != null && current - previous <= PROGRESS_EPSILON)
|
|
89
|
+
return;
|
|
90
|
+
// The play head advanced: close any open stall, then reset the freeze clock.
|
|
91
|
+
if (inStall)
|
|
92
|
+
endStall(StallEndedReason.PLAYING);
|
|
93
|
+
lastProgressAt = Date.now();
|
|
94
|
+
}));
|
|
95
|
+
add(controller.on('pause', () => suspend(StallEndedReason.PAUSE)));
|
|
96
|
+
add(controller.on('seeking', () => suspend(StallEndedReason.SEEKING)));
|
|
97
|
+
add(controller.on('emptied', () => suspend(StallEndedReason.EMPTIED)));
|
|
98
|
+
return dispose;
|
|
99
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { ObjectSchema } from '@amazon/vinyl-validation';
|
|
2
|
+
import type { Maybe } from '@amazon/vinyl-util';
|
|
3
|
+
/**
|
|
4
|
+
* Criteria used to pick which audio rendition to play.
|
|
5
|
+
*/
|
|
6
|
+
export interface AudioSelection {
|
|
7
|
+
/**
|
|
8
|
+
* Preferred language(s) for audio content, as RFC 5646 codes (e.g. `'en'`,
|
|
9
|
+
* `'ja'`, `'fr-CA'`). May be a single tag or an ordered list of tags —
|
|
10
|
+
* earlier entries are preferred, with the best relatedness match kept for
|
|
11
|
+
* each period (audio without a language tag is always kept). `null` (the
|
|
12
|
+
* default) is NOT "no preference": it orders by the platform's
|
|
13
|
+
* `navigator.languages`. To keep every language, this option is not the
|
|
14
|
+
* mechanism — omit language content or pass a tag matching all.
|
|
15
|
+
*/
|
|
16
|
+
readonly language?: string | readonly string[] | null;
|
|
17
|
+
/**
|
|
18
|
+
* Opt in to audio-description (a.k.a. described-video / DVS) audio: audio
|
|
19
|
+
* renditions carrying an accessibility "describes video" characteristic that
|
|
20
|
+
* narrate on-screen action. `false` (the default) keeps them out of the
|
|
21
|
+
* automatic default-audio selection — they are chosen only when this is set.
|
|
22
|
+
* When `true`, a description rendition is preferred where one exists for the
|
|
23
|
+
* selected language. Changing this reselects audio immediately.
|
|
24
|
+
*/
|
|
25
|
+
readonly descriptive?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Declarative audio configuration. Mirrors `VinylOptions.text`: the audio
|
|
29
|
+
* rendition is chosen from {@link selection}; changing it reselects audio
|
|
30
|
+
* immediately.
|
|
31
|
+
*/
|
|
32
|
+
export interface AudioOptions {
|
|
33
|
+
/**
|
|
34
|
+
* The audio selection criteria (language / descriptive).
|
|
35
|
+
*/
|
|
36
|
+
readonly selection?: AudioSelection;
|
|
37
|
+
/**
|
|
38
|
+
* When `true`, disables the audio sampling-rate support filter, so audio
|
|
39
|
+
* renditions whose sampling rate exceeds what the platform reports (via the
|
|
40
|
+
* `AudioContext` output rate) are kept and offered to playback anyway.
|
|
41
|
+
* `false` (the default) applies the filter. Changing this re-filters the
|
|
42
|
+
* timeline immediately.
|
|
43
|
+
*/
|
|
44
|
+
readonly disableSampleRateFilter?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* The maximum audio sampling rate (Hz) the sampling-rate filter treats as
|
|
47
|
+
* supported. When set, it takes precedence over the platform's
|
|
48
|
+
* `AudioContext`-reported output rate. Ignored when
|
|
49
|
+
* {@link disableSampleRateFilter} is `true`. Changing this re-filters the
|
|
50
|
+
* timeline immediately. `null`/`undefined` falls back to the reported rate.
|
|
51
|
+
*/
|
|
52
|
+
readonly maxSampleRate?: Maybe<number>;
|
|
53
|
+
/**
|
|
54
|
+
* The minimum audio sampling rate (Hz) the sampling-rate filter treats as
|
|
55
|
+
* supported. When set, renditions below it are filtered out as a soft floor
|
|
56
|
+
* (if every audio rendition is below it, the highest is kept so playback is
|
|
57
|
+
* never stranded). Applied alongside the max cap whenever the filter runs,
|
|
58
|
+
* regardless of how the max was determined; ignored when
|
|
59
|
+
* {@link disableSampleRateFilter} is `true`. Changing this re-filters the
|
|
60
|
+
* timeline immediately.
|
|
61
|
+
*/
|
|
62
|
+
readonly minSampleRate?: Maybe<number>;
|
|
63
|
+
}
|
|
64
|
+
export declare const defaultAudioOptions: AudioOptions;
|
|
65
|
+
export declare const audioOptionsValidator: ObjectSchema<AudioOptions>;
|
|
66
|
+
//# sourceMappingURL=AudioOptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioOptions.d.ts","sourceRoot":"","sources":["../../../../src/streaming/AudioOptions.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAQ5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE/C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B;;;;;;;;OAQG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IAErD;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CACjC;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAA;IAEnC;;;;;;OAMG;IACH,QAAQ,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAE1C;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAEtC;;;;;;;;OAQG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CACzC;AAED,eAAO,MAAM,mBAAmB,EAAE,YAGjC,CAAA;AAOD,eAAO,MAAM,qBAAqB,EAAE,YAAY,CAAC,YAAY,CAK3D,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { array, boolean, number, object, string, } from '@amazon/vinyl-validation';
|
|
6
|
+
export const defaultAudioOptions = {
|
|
7
|
+
selection: { language: null, descriptive: false },
|
|
8
|
+
disableSampleRateFilter: false,
|
|
9
|
+
};
|
|
10
|
+
const audioSelectionValidator = object({
|
|
11
|
+
language: string().or(array(string()).readonly()).orNull().optional(),
|
|
12
|
+
descriptive: boolean().optional(),
|
|
13
|
+
});
|
|
14
|
+
export const audioOptionsValidator = object({
|
|
15
|
+
selection: audioSelectionValidator.optional(),
|
|
16
|
+
disableSampleRateFilter: boolean().optional(),
|
|
17
|
+
maxSampleRate: number().maybe().optional(),
|
|
18
|
+
minSampleRate: number().maybe().optional(),
|
|
19
|
+
});
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Timestamp } from '@amazon/vinyl-util';
|
|
2
|
+
import type { TrackUri } from '../track/Track';
|
|
3
|
+
import type { ContentType } from './MediaQualityMetadata';
|
|
4
|
+
/**
|
|
5
|
+
* The stage of the track-load journey a {@link LoadSpanMeasurement} describes.
|
|
6
|
+
*
|
|
7
|
+
* - `manifest`: fetching and parsing the DASH/HLS manifest.
|
|
8
|
+
* - `keySetup`: the EME/CDM setup, from session creation to the CDM's first
|
|
9
|
+
* license message. Precedes and is contiguous with `license`.
|
|
10
|
+
* - `license`: the DRM license request/response exchange.
|
|
11
|
+
* - `initSegment`: fetching the initialization segment.
|
|
12
|
+
* - `firstSegment`: fetching the first media segment.
|
|
13
|
+
*/
|
|
14
|
+
export type LoadSpanKind = 'manifest' | 'keySetup' | 'license' | 'initSegment' | 'firstSegment';
|
|
15
|
+
/**
|
|
16
|
+
* A timed span for one stage of a track load.
|
|
17
|
+
*
|
|
18
|
+
* Dispatched by the controller that owns the stage. Emitters attribute the span
|
|
19
|
+
* to the track it was measured for at the source (see {@link trackUri}); the
|
|
20
|
+
* player republishes it as a {@link LoadSpanEvent}. When the emitter cannot know
|
|
21
|
+
* the owning track, `trackUri` is omitted and the span is dropped rather than
|
|
22
|
+
* misattributed.
|
|
23
|
+
*/
|
|
24
|
+
export interface LoadSpanMeasurement {
|
|
25
|
+
readonly kind: LoadSpanKind;
|
|
26
|
+
/**
|
|
27
|
+
* When the stage began, as a unix millisecond timestamp.
|
|
28
|
+
*/
|
|
29
|
+
readonly startTime: Timestamp;
|
|
30
|
+
/**
|
|
31
|
+
* When the stage completed, as a unix millisecond timestamp.
|
|
32
|
+
*/
|
|
33
|
+
readonly endTime: Timestamp;
|
|
34
|
+
/**
|
|
35
|
+
* The track this span was measured for, stamped at the source by the
|
|
36
|
+
* emitter that knows which track initiated the load. Omitted only when the
|
|
37
|
+
* initiating track is not yet known (e.g. an encrypted event handled before
|
|
38
|
+
* buffering DRM info is set).
|
|
39
|
+
*/
|
|
40
|
+
readonly trackUri?: TrackUri;
|
|
41
|
+
/**
|
|
42
|
+
* The MIME type of the content this span was measured for, when known. Set
|
|
43
|
+
* for DRM `license` spans so a certificate exchange and the per-content-type
|
|
44
|
+
* license exchanges are distinguishable.
|
|
45
|
+
*/
|
|
46
|
+
readonly mimeType?: string;
|
|
47
|
+
/**
|
|
48
|
+
* The content type this span was measured for, when known. Set alongside
|
|
49
|
+
* {@link mimeType} for DRM `license` spans.
|
|
50
|
+
*/
|
|
51
|
+
readonly contentType?: ContentType;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A {@link LoadSpanMeasurement} attributed to the track it was measured for.
|
|
55
|
+
*
|
|
56
|
+
* Emitted on the player as the `loadSpan` event.
|
|
57
|
+
*/
|
|
58
|
+
export interface LoadSpanEvent extends LoadSpanMeasurement {
|
|
59
|
+
readonly trackUri: TrackUri;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Player-level load metric events.
|
|
63
|
+
*/
|
|
64
|
+
export interface LoadMetricEventMap {
|
|
65
|
+
/**
|
|
66
|
+
* A stage of a track load completed. Reports the time span of the stage
|
|
67
|
+
* together with the track it belongs to. Consumers measuring end-to-end
|
|
68
|
+
* load latency key on the first event per `kind` and `trackUri`.
|
|
69
|
+
*/
|
|
70
|
+
readonly loadSpan: LoadSpanEvent;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=LoadMetric.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadMetric.d.ts","sourceRoot":"","sources":["../../../../src/streaming/LoadMetric.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GACpB,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,cAAc,CAAA;AAExE;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAChC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAE3B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAE7B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;IAE3B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAE1B;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAc,SAAQ,mBAAmB;IACtD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAA;CACnC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type MutableValue } from '@amazon/vinyl-observable';
|
|
2
|
+
import { type EventHandler, type SignalOptions, type Unsubscribe } from '@amazon/vinyl-util';
|
|
3
|
+
import type { ManifestController, ManifestControllerEventMap, ManifestProvider } from './ManifestController';
|
|
4
|
+
export interface ManifestControllerImplDeps<T> {
|
|
5
|
+
readonly manifestProvider: ManifestProvider<T>;
|
|
6
|
+
}
|
|
7
|
+
export declare class ManifestControllerImpl<T> implements ManifestController<Promise<T>> {
|
|
8
|
+
private readonly deps;
|
|
9
|
+
get [Symbol.toStringTag](): string;
|
|
10
|
+
get logPrefix(): string;
|
|
11
|
+
private readonly _data;
|
|
12
|
+
private _error;
|
|
13
|
+
private readonly abortSlot;
|
|
14
|
+
private readonly disposer;
|
|
15
|
+
private readonly events;
|
|
16
|
+
private manifestSpanArmed;
|
|
17
|
+
constructor(deps: ManifestControllerImplDeps<T>);
|
|
18
|
+
on<K extends keyof ManifestControllerEventMap>(type: K, handler: EventHandler<ManifestControllerEventMap[K]>, options?: SignalOptions): Unsubscribe;
|
|
19
|
+
hasAnyListeners(): boolean;
|
|
20
|
+
hasListeners(type: keyof ManifestControllerEventMap): boolean;
|
|
21
|
+
readonly __eventMapType: import("@amazon/vinyl-util").Covariant<ManifestControllerEventMap>;
|
|
22
|
+
/**
|
|
23
|
+
* The most recent error from the manifest provider, or null.
|
|
24
|
+
*/
|
|
25
|
+
get error(): Error | null;
|
|
26
|
+
refresh(): void;
|
|
27
|
+
private requestManifest;
|
|
28
|
+
/**
|
|
29
|
+
* Measures the initial manifest fetch as a load span, re-arming on failure
|
|
30
|
+
* so a recovered load is still measured.
|
|
31
|
+
*/
|
|
32
|
+
private measureLoadSpan;
|
|
33
|
+
reset(): void;
|
|
34
|
+
get value(): Promise<T>;
|
|
35
|
+
get changeId(): number;
|
|
36
|
+
getValue(): Promise<T>;
|
|
37
|
+
onData(callback: (value: Promise<T>, previous?: Promise<T>) => void): () => void;
|
|
38
|
+
map<U>(fn: (value: Promise<T>) => U): import("@amazon/vinyl-observable").ObservableValue<U>;
|
|
39
|
+
pick<K extends keyof NonNullable<Promise<T>>>(key: K): MutableValue<Promise<T>[K]>;
|
|
40
|
+
get disposed(): boolean;
|
|
41
|
+
dispose(): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=ManifestControllerImpl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManifestControllerImpl.d.ts","sourceRoot":"","sources":["../../../../src/streaming/ManifestControllerImpl.ts"],"names":[],"mappings":"AAKA,OAAO,EAAQ,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAGH,KAAK,YAAY,EAGjB,KAAK,aAAa,EAClB,KAAK,WAAW,EACnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EACR,kBAAkB,EAClB,0BAA0B,EAC1B,gBAAgB,EACnB,MAAM,sBAAsB,CAAA;AAE7B,MAAM,WAAW,0BAA0B,CAAC,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;CACjD;AAED,qBAAa,sBAAsB,CAAC,CAAC,CAAE,YAAW,kBAAkB,CAChE,OAAO,CAAC,CAAC,CAAC,CACb;IAgBe,OAAO,CAAC,QAAQ,CAAC,IAAI;IAfjC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;IAChD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkD;IACzE,OAAO,CAAC,iBAAiB,CAAO;gBAEH,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAMhE,EAAE,CAAC,CAAC,SAAS,MAAM,0BAA0B,EACzC,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,YAAY,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,EACpD,OAAO,CAAC,EAAE,aAAa,GACxB,WAAW;IAId,eAAe,IAAI,OAAO;IAI1B,YAAY,CAAC,IAAI,EAAE,MAAM,0BAA0B,GAAG,OAAO;IAI7D,QAAQ,CAAC,cAAc,qEAA6B;IAEpD;;OAEG;IACH,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI,CAExB;IAED,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,eAAe;IAWvB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAevB,KAAK,IAAI,IAAI;IAOb,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAEtB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC;IAItB,MAAM,CACF,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,GAC7D,MAAM,IAAI;IAIb,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAInC,IAAI,CAAC,CAAC,SAAS,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;IAIpD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,OAAO,IAAI,IAAI;CAKlB"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { data } from '@amazon/vinyl-observable';
|
|
6
|
+
import { createAbortSlot, createDisposer, EventHostImpl, logDebug, } from '@amazon/vinyl-util';
|
|
7
|
+
export class ManifestControllerImpl {
|
|
8
|
+
deps;
|
|
9
|
+
get [Symbol.toStringTag]() {
|
|
10
|
+
return 'ManifestControllerImpl';
|
|
11
|
+
}
|
|
12
|
+
get logPrefix() {
|
|
13
|
+
return 'ManifestControllerImpl';
|
|
14
|
+
}
|
|
15
|
+
_data;
|
|
16
|
+
_error = null;
|
|
17
|
+
abortSlot = createAbortSlot();
|
|
18
|
+
disposer = createDisposer();
|
|
19
|
+
events = new EventHostImpl();
|
|
20
|
+
manifestSpanArmed = true;
|
|
21
|
+
constructor(deps) {
|
|
22
|
+
this.deps = deps;
|
|
23
|
+
// Kick off the initial manifest request. requestManifest() attaches its
|
|
24
|
+
// own rejection handler, so the stored promise never rejects unhandled.
|
|
25
|
+
this._data = data(this.requestManifest());
|
|
26
|
+
}
|
|
27
|
+
on(type, handler, options) {
|
|
28
|
+
return this.events.on(type, handler, options);
|
|
29
|
+
}
|
|
30
|
+
hasAnyListeners() {
|
|
31
|
+
return this.events.hasAnyListeners();
|
|
32
|
+
}
|
|
33
|
+
hasListeners(type) {
|
|
34
|
+
return this.events.hasListeners(type);
|
|
35
|
+
}
|
|
36
|
+
__eventMapType = this.events.__eventMapType;
|
|
37
|
+
/**
|
|
38
|
+
* The most recent error from the manifest provider, or null.
|
|
39
|
+
*/
|
|
40
|
+
get error() {
|
|
41
|
+
return this._error;
|
|
42
|
+
}
|
|
43
|
+
refresh() {
|
|
44
|
+
logDebug(this, 'refresh');
|
|
45
|
+
this._data.value = this.requestManifest();
|
|
46
|
+
}
|
|
47
|
+
requestManifest() {
|
|
48
|
+
this.abortSlot.abort();
|
|
49
|
+
this._error = null;
|
|
50
|
+
const promise = this.deps.manifestProvider(this.abortSlot.value);
|
|
51
|
+
this.measureLoadSpan(promise);
|
|
52
|
+
promise.catch((error) => {
|
|
53
|
+
this._error = error;
|
|
54
|
+
});
|
|
55
|
+
return promise;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Measures the initial manifest fetch as a load span, re-arming on failure
|
|
59
|
+
* so a recovered load is still measured.
|
|
60
|
+
*/
|
|
61
|
+
measureLoadSpan(promise) {
|
|
62
|
+
if (!this.manifestSpanArmed)
|
|
63
|
+
return;
|
|
64
|
+
this.manifestSpanArmed = false;
|
|
65
|
+
const startTime = Date.now();
|
|
66
|
+
promise.then(() => this.events.dispatch('loadSpanMeasured', {
|
|
67
|
+
kind: 'manifest',
|
|
68
|
+
startTime,
|
|
69
|
+
endTime: Date.now(),
|
|
70
|
+
}), () => (this.manifestSpanArmed = true));
|
|
71
|
+
}
|
|
72
|
+
reset() {
|
|
73
|
+
logDebug(this, 'reset');
|
|
74
|
+
if (this._error) {
|
|
75
|
+
this.refresh();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
get value() {
|
|
79
|
+
return this._data.value;
|
|
80
|
+
}
|
|
81
|
+
get changeId() {
|
|
82
|
+
return this._data.changeId;
|
|
83
|
+
}
|
|
84
|
+
getValue() {
|
|
85
|
+
return this._data.getValue();
|
|
86
|
+
}
|
|
87
|
+
onData(callback) {
|
|
88
|
+
return this._data.onData(callback);
|
|
89
|
+
}
|
|
90
|
+
map(fn) {
|
|
91
|
+
return this._data.map(fn);
|
|
92
|
+
}
|
|
93
|
+
pick(key) {
|
|
94
|
+
return this._data.pick(key);
|
|
95
|
+
}
|
|
96
|
+
get disposed() {
|
|
97
|
+
return this.disposer.disposed;
|
|
98
|
+
}
|
|
99
|
+
dispose() {
|
|
100
|
+
this.abortSlot.abort();
|
|
101
|
+
this.disposer.dispose();
|
|
102
|
+
this.events.dispose();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Records every codec in the given mimeType as denylisted. Returns true if any
|
|
3
|
+
* codec was newly added (i.e. was not already denylisted), false if all codecs
|
|
4
|
+
* were already present. The return value lets callers bound retry loops: a
|
|
5
|
+
* repeat failure for an already-denylisted codec should not trigger another
|
|
6
|
+
* fallback attempt.
|
|
7
|
+
*/
|
|
8
|
+
export declare function denylistCodecsFromMimeType(mimeType: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Returns true when any codec in the given mimeType has been denylisted.
|
|
11
|
+
*/
|
|
12
|
+
export declare function isMimeTypeDenylisted(mimeType: string): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Returns the currently denylisted codec strings (lowercased). Primarily for
|
|
15
|
+
* diagnostics and testing.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getDenylistedCodecs(): readonly string[];
|
|
18
|
+
/**
|
|
19
|
+
* Clears the runtime codec denylist. Intended for tests and for re-detecting
|
|
20
|
+
* support (e.g. after an environment change).
|
|
21
|
+
*/
|
|
22
|
+
export declare function clearCodecDenylist(): void;
|
|
23
|
+
//# sourceMappingURL=codecDenylist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codecDenylist.d.ts","sourceRoot":"","sources":["../../../../../src/streaming/buffering/codecDenylist.ts"],"names":[],"mappings":"AAyBA;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAWpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAG9D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,MAAM,EAAE,CAEvD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { extractCodecs } from '../../util/media/codecSupport';
|
|
6
|
+
/**
|
|
7
|
+
* A runtime denylist of media codecs that failed to decode after a SourceBuffer
|
|
8
|
+
* append, despite the browser reporting them as supported.
|
|
9
|
+
*
|
|
10
|
+
* Some browsers report a codec as supported via `MediaSource.isTypeSupported`
|
|
11
|
+
* yet fail to decode it (e.g. HEVC on Chromium without a platform decoder),
|
|
12
|
+
* surfacing as an append/decode error only once media is fed to the
|
|
13
|
+
* SourceBuffer. When that happens, the failing codec is recorded here so that
|
|
14
|
+
* quality selection avoids it and playback can fall back to a codec that does
|
|
15
|
+
* decode.
|
|
16
|
+
*
|
|
17
|
+
* This mirrors the runtime {@link getSourceBufferQuota} learning: it is a
|
|
18
|
+
* process-wide singleton learned from real append failures, with a reset hook
|
|
19
|
+
* for tests and re-detection. Entries are the individual RFC 6381 codec
|
|
20
|
+
* strings (e.g. `hvc1.2.20000000.L123.B0`), stored lowercased.
|
|
21
|
+
*/
|
|
22
|
+
const denylistedCodecs = new Set();
|
|
23
|
+
/**
|
|
24
|
+
* Records every codec in the given mimeType as denylisted. Returns true if any
|
|
25
|
+
* codec was newly added (i.e. was not already denylisted), false if all codecs
|
|
26
|
+
* were already present. The return value lets callers bound retry loops: a
|
|
27
|
+
* repeat failure for an already-denylisted codec should not trigger another
|
|
28
|
+
* fallback attempt.
|
|
29
|
+
*/
|
|
30
|
+
export function denylistCodecsFromMimeType(mimeType) {
|
|
31
|
+
const codecs = extractCodecs(mimeType);
|
|
32
|
+
let added = false;
|
|
33
|
+
for (const codec of codecs) {
|
|
34
|
+
const lower = codec.toLowerCase();
|
|
35
|
+
if (!denylistedCodecs.has(lower)) {
|
|
36
|
+
denylistedCodecs.add(lower);
|
|
37
|
+
added = true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return added;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns true when any codec in the given mimeType has been denylisted.
|
|
44
|
+
*/
|
|
45
|
+
export function isMimeTypeDenylisted(mimeType) {
|
|
46
|
+
const codecs = extractCodecs(mimeType);
|
|
47
|
+
return codecs.some((c) => denylistedCodecs.has(c.toLowerCase()));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Returns the currently denylisted codec strings (lowercased). Primarily for
|
|
51
|
+
* diagnostics and testing.
|
|
52
|
+
*/
|
|
53
|
+
export function getDenylistedCodecs() {
|
|
54
|
+
return [...denylistedCodecs];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Clears the runtime codec denylist. Intended for tests and for re-detecting
|
|
58
|
+
* support (e.g. after an environment change).
|
|
59
|
+
*/
|
|
60
|
+
export function clearCodecDenylist() {
|
|
61
|
+
denylistedCodecs.clear();
|
|
62
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { RestrictableContentType } from './MediaQualityMetadata';
|
|
2
|
+
import type { ContentTypesValue } from './ContentTypesValue';
|
|
3
|
+
import type { ObservableValue } from '@amazon/vinyl-observable';
|
|
4
|
+
export interface AllowedContentTypesValueDeps {
|
|
5
|
+
/**
|
|
6
|
+
* The unfiltered content types present in the manifest.
|
|
7
|
+
*/
|
|
8
|
+
readonly baseContentTypesValue: ContentTypesValue;
|
|
9
|
+
/**
|
|
10
|
+
* The player options. The `allowedContentTypes` allow list restricts which
|
|
11
|
+
* media content types are streamed; `null` means no restriction.
|
|
12
|
+
*/
|
|
13
|
+
readonly options: ObservableValue<{
|
|
14
|
+
readonly allowedContentTypes: readonly RestrictableContentType[] | null;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Wraps a {@link ContentTypesValue} with the `allowedContentTypes` allow list
|
|
19
|
+
* from the player options. When the allow list is set, only media content
|
|
20
|
+
* types (`'audio'`, `'video'`) in the list are emitted; other media streams
|
|
21
|
+
* are ignored. When it is `null`, the underlying content types pass through
|
|
22
|
+
* unchanged. Text is never restricted by the allow list and always passes
|
|
23
|
+
* through (captions are governed by caption selection).
|
|
24
|
+
*
|
|
25
|
+
* Because the result is derived from the `allowedContentTypes` option via
|
|
26
|
+
* {@link combineData}, changing the option re-emits a newly filtered set, which
|
|
27
|
+
* reloads the track using only the allowed content types.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createAllowedContentTypesValue(deps: AllowedContentTypesValueDeps): ContentTypesValue;
|
|
30
|
+
//# sourceMappingURL=createAllowedContentTypesValue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAllowedContentTypesValue.d.ts","sourceRoot":"","sources":["../../../../src/streaming/createAllowedContentTypesValue.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAER,uBAAuB,EAC1B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAI/D,MAAM,WAAW,4BAA4B;IACzC;;OAEG;IACH,QAAQ,CAAC,qBAAqB,EAAE,iBAAiB,CAAA;IAEjD;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;QAC9B,QAAQ,CAAC,mBAAmB,EAAE,SAAS,uBAAuB,EAAE,GAAG,IAAI,CAAA;KAC1E,CAAC,CAAA;CACL;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,8BAA8B,CAC1C,IAAI,EAAE,4BAA4B,GACnC,iBAAiB,CAOnB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { combineData } from '@amazon/vinyl-observable';
|
|
6
|
+
/**
|
|
7
|
+
* Wraps a {@link ContentTypesValue} with the `allowedContentTypes` allow list
|
|
8
|
+
* from the player options. When the allow list is set, only media content
|
|
9
|
+
* types (`'audio'`, `'video'`) in the list are emitted; other media streams
|
|
10
|
+
* are ignored. When it is `null`, the underlying content types pass through
|
|
11
|
+
* unchanged. Text is never restricted by the allow list and always passes
|
|
12
|
+
* through (captions are governed by caption selection).
|
|
13
|
+
*
|
|
14
|
+
* Because the result is derived from the `allowedContentTypes` option via
|
|
15
|
+
* {@link combineData}, changing the option re-emits a newly filtered set, which
|
|
16
|
+
* reloads the track using only the allowed content types.
|
|
17
|
+
*/
|
|
18
|
+
export function createAllowedContentTypesValue(deps) {
|
|
19
|
+
return combineData({
|
|
20
|
+
contentTypes: deps.baseContentTypesValue,
|
|
21
|
+
allowedContentTypes: deps.options.pick('allowedContentTypes'),
|
|
22
|
+
}).map(async ({ contentTypes, allowedContentTypes }) => {
|
|
23
|
+
return filterContentTypes(await contentTypes, allowedContentTypes);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Returns the subset of `contentTypes` permitted by the `allowedContentTypes`
|
|
28
|
+
* allow list. A `null` allow list permits everything. Text always passes
|
|
29
|
+
* through regardless of the allow list.
|
|
30
|
+
*/
|
|
31
|
+
function filterContentTypes(contentTypes, allowedContentTypes) {
|
|
32
|
+
if (allowedContentTypes == null)
|
|
33
|
+
return contentTypes;
|
|
34
|
+
const allowed = new Set(allowedContentTypes);
|
|
35
|
+
const filtered = new Set();
|
|
36
|
+
for (const contentType of contentTypes) {
|
|
37
|
+
// Text is not subject to the allow list; keep it regardless.
|
|
38
|
+
if (contentType === 'text' || allowed.has(contentType)) {
|
|
39
|
+
filtered.add(contentType);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return filtered;
|
|
43
|
+
}
|