@amazon/vinyl 1.2.0 → 1.2.1
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 +11 -2
- package/dist/index.cjs.map +2 -2
- package/dist/index.js +15 -4
- package/dist/index.js.map +3 -3
- package/dist/test/integ.es5.js +43 -43
- package/dist/test/integ.js +70 -2
- 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 +146 -0
- package/dist/types/current/ad/AdControllerImpl.d.ts.map +1 -0
- package/dist/types/current/ad/AdControllerImpl.js +705 -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 +246 -0
- package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
- package/dist/types/current/drm/DrmControllerImpl.js +11 -1
- package/dist/types/current/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/current/streaming/AudioOptions.d.ts +39 -0
- package/dist/types/current/streaming/AudioOptions.d.ts.map +1 -0
- package/dist/types/current/streaming/AudioOptions.js +15 -0
- package/dist/types/current/streaming/LoadMetric.d.ts +58 -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/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 +109 -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 +248 -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/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 +146 -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/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts3.7/streaming/AudioOptions.d.ts +39 -0
- package/dist/types/ts3.7/streaming/LoadMetric.d.ts +58 -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/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/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 +146 -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/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts4.1/streaming/AudioOptions.d.ts +39 -0
- package/dist/types/ts4.1/streaming/LoadMetric.d.ts +58 -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/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/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 +146 -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/playback/PlaybackControllerImpl.d.ts +1 -1
- package/dist/types/ts4.7/streaming/AudioOptions.d.ts +39 -0
- package/dist/types/ts4.7/streaming/LoadMetric.d.ts +58 -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/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/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 +1456 -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 +756 -0
- package/dist/unit/types/current/drm/DrmControllerImpl.test.js +66 -1
- 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/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/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/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 +199 -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 +393 -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
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { createEmptyMediaQualityMetadata, DrmControllerImpl, DrmError, DrmKeySystem, DrmRobustness, LICENSE_TIMEOUT, ReportableMediaError, } from '@amazon/vinyl';
|
|
6
6
|
import { createEventSpy, useMockLogger } from '@amazon/vinyl-util/testUtil';
|
|
7
|
-
import { Abort, base64ToByteArray, bufferToBase64, Deferred, ErrorLevel, ErrorOrigin, never, nextEventAsPromise, ReportableError, utf16ToUint16Array, } from '@amazon/vinyl-util';
|
|
7
|
+
import { Abort, base64ToByteArray, bufferToBase64, Deferred, ErrorLevel, ErrorOrigin, never, nextEventAsPromise, ReportableError, setUserAgent, utf16ToUint16Array, } from '@amazon/vinyl-util';
|
|
8
8
|
import { flushPromises, implementEventFakes, MockHTMLAudioElement, MockMediaError, useMockTime, } from '@amazon/vinyl-util/browserTestUtil';
|
|
9
9
|
import { MockCommonEme, MockCommonMediaKeys, MockCommonMediaKeySession, MockCommonMediaKeySystemAccess, } from '@amazon/vinyl/vinylTestUtil';
|
|
10
10
|
var createSpy = jasmine.createSpy;
|
|
@@ -1275,6 +1275,71 @@ describe('DrmControllerImpl', () => {
|
|
|
1275
1275
|
]);
|
|
1276
1276
|
});
|
|
1277
1277
|
});
|
|
1278
|
+
describe('ChromeOS verified media path', () => {
|
|
1279
|
+
// ChromeOS only enables the verified media path (VMP) when a video
|
|
1280
|
+
// capability is present, so audio-only content must advertise a dummy
|
|
1281
|
+
// avc1 video capability alongside its audio capability.
|
|
1282
|
+
const chromeOsUserAgent = 'Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36';
|
|
1283
|
+
const chromeUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36';
|
|
1284
|
+
it('adds avc1 video capabilities for audio content on ChromeOS', async () => {
|
|
1285
|
+
setUserAgent(chromeOsUserAgent);
|
|
1286
|
+
drmController.setBufferingDrmInfo({
|
|
1287
|
+
...drmInfo,
|
|
1288
|
+
contentType: 'audio',
|
|
1289
|
+
mimeType: 'audio/mp4',
|
|
1290
|
+
});
|
|
1291
|
+
await emitEncrypted();
|
|
1292
|
+
expect(commonEme.requestMediaKeySystemAccess).toHaveBeenCalledOnceWith(DrmKeySystem.WIDEVINE, [
|
|
1293
|
+
{
|
|
1294
|
+
initDataTypes: ['cenc'],
|
|
1295
|
+
audioCapabilities: [
|
|
1296
|
+
{
|
|
1297
|
+
contentType: 'audio/mp4',
|
|
1298
|
+
encryptionScheme: 'cenc',
|
|
1299
|
+
robustness: DrmRobustness.SW_SECURE_CRYPTO,
|
|
1300
|
+
},
|
|
1301
|
+
],
|
|
1302
|
+
videoCapabilities: [
|
|
1303
|
+
{
|
|
1304
|
+
contentType: 'video/mp4; codecs="avc1.4d401f"',
|
|
1305
|
+
robustness: DrmRobustness.SW_SECURE_DECODE,
|
|
1306
|
+
},
|
|
1307
|
+
],
|
|
1308
|
+
},
|
|
1309
|
+
]);
|
|
1310
|
+
});
|
|
1311
|
+
it('does not add video capabilities for audio content off ChromeOS', async () => {
|
|
1312
|
+
setUserAgent(chromeUserAgent);
|
|
1313
|
+
drmController.setBufferingDrmInfo({
|
|
1314
|
+
...drmInfo,
|
|
1315
|
+
contentType: 'audio',
|
|
1316
|
+
mimeType: 'audio/mp4',
|
|
1317
|
+
});
|
|
1318
|
+
await emitEncrypted();
|
|
1319
|
+
const config = commonEme.requestMediaKeySystemAccess.calls.mostRecent()
|
|
1320
|
+
.args[1][0];
|
|
1321
|
+
expect(config.videoCapabilities).toBeUndefined();
|
|
1322
|
+
});
|
|
1323
|
+
it('does not alter video content capabilities on ChromeOS', async () => {
|
|
1324
|
+
setUserAgent(chromeOsUserAgent);
|
|
1325
|
+
drmController.setBufferingDrmInfo({
|
|
1326
|
+
...drmInfo,
|
|
1327
|
+
contentType: 'video',
|
|
1328
|
+
mimeType: 'video/mp4',
|
|
1329
|
+
});
|
|
1330
|
+
await emitEncrypted();
|
|
1331
|
+
const config = commonEme.requestMediaKeySystemAccess.calls.mostRecent()
|
|
1332
|
+
.args[1][0];
|
|
1333
|
+
expect(config.videoCapabilities).toEqual([
|
|
1334
|
+
{
|
|
1335
|
+
contentType: 'video/mp4',
|
|
1336
|
+
encryptionScheme: 'cenc',
|
|
1337
|
+
robustness: DrmRobustness.SW_SECURE_CRYPTO,
|
|
1338
|
+
},
|
|
1339
|
+
]);
|
|
1340
|
+
expect(config.audioCapabilities).toBeUndefined();
|
|
1341
|
+
});
|
|
1342
|
+
});
|
|
1278
1343
|
describe('when a session has been created', () => {
|
|
1279
1344
|
beforeEach(async () => {
|
|
1280
1345
|
drmController.setBufferingDrmInfo(drmInfo);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManifestControllerImpl.test.d.ts","sourceRoot":"","sources":["../../../../../test/unit/streaming/ManifestControllerImpl.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { Deferred } from '@amazon/vinyl-util';
|
|
6
|
+
import { ManifestControllerImpl } from '@amazon/vinyl';
|
|
7
|
+
import { mockHlsManifestData } from '@amazon/vinyl/vinylTestUtil';
|
|
8
|
+
import { expectNothing, flushPromises, } from '@amazon/vinyl-util/browserTestUtil';
|
|
9
|
+
var createSpy = jasmine.createSpy;
|
|
10
|
+
describe('ManifestControllerImpl', () => {
|
|
11
|
+
let manifestProvider;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
manifestProvider = createSpy('manifestProvider');
|
|
14
|
+
manifestProvider.and.resolveTo(mockHlsManifestData);
|
|
15
|
+
});
|
|
16
|
+
function createManifestController() {
|
|
17
|
+
return new ManifestControllerImpl({ manifestProvider });
|
|
18
|
+
}
|
|
19
|
+
it('has a toStringTag', () => {
|
|
20
|
+
const controller = createManifestController();
|
|
21
|
+
expect(String(controller)).toContain('ManifestControllerImpl');
|
|
22
|
+
});
|
|
23
|
+
it('has a logPrefix', () => {
|
|
24
|
+
const controller = createManifestController();
|
|
25
|
+
expect(controller.logPrefix).toBe('ManifestControllerImpl');
|
|
26
|
+
});
|
|
27
|
+
describe('refresh', () => {
|
|
28
|
+
it('reloads the manifest', () => {
|
|
29
|
+
const controller = createManifestController();
|
|
30
|
+
controller.refresh();
|
|
31
|
+
expect(manifestProvider).toHaveBeenCalledTimes(2);
|
|
32
|
+
});
|
|
33
|
+
it('notifies observers', () => {
|
|
34
|
+
const controller = createManifestController();
|
|
35
|
+
const observer = createSpy('observer');
|
|
36
|
+
controller.onData(observer);
|
|
37
|
+
observer.calls.reset();
|
|
38
|
+
controller.refresh();
|
|
39
|
+
expect(observer).toHaveBeenCalledTimes(1);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe('value', () => {
|
|
43
|
+
it('resolves to the manifest data', async () => {
|
|
44
|
+
const controller = createManifestController();
|
|
45
|
+
const result = await controller.value;
|
|
46
|
+
expect(result.mainPlaylist).toBe(mockHlsManifestData.mainPlaylist);
|
|
47
|
+
expect(result.baseUrl).toBe(mockHlsManifestData.baseUrl);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('getValue', () => {
|
|
51
|
+
it('returns the same as value', () => {
|
|
52
|
+
const controller = createManifestController();
|
|
53
|
+
expect(controller.getValue()).toBe(controller.value);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe('changeId', () => {
|
|
57
|
+
it('increments when manifest is refreshed', () => {
|
|
58
|
+
const controller = createManifestController();
|
|
59
|
+
const initial = controller.changeId;
|
|
60
|
+
controller.refresh();
|
|
61
|
+
expect(controller.changeId).toBe(initial + 1);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
describe('pick', () => {
|
|
65
|
+
it('returns a sub-observable', () => {
|
|
66
|
+
const controller = createManifestController();
|
|
67
|
+
const thenPick = controller.pick('then');
|
|
68
|
+
expect(thenPick.value).toEqual(jasmine.any(Function));
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('map', () => {
|
|
72
|
+
it('returns a mapped observable', async () => {
|
|
73
|
+
const controller = createManifestController();
|
|
74
|
+
const mapped = controller.map(async (promise) => {
|
|
75
|
+
const data = await promise;
|
|
76
|
+
return data.baseUrl;
|
|
77
|
+
});
|
|
78
|
+
expect(await mapped.value).toBe(mockHlsManifestData.baseUrl);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('disposed', () => {
|
|
82
|
+
it('returns false before dispose', () => {
|
|
83
|
+
const controller = createManifestController();
|
|
84
|
+
expect(controller.disposed).toBe(false);
|
|
85
|
+
});
|
|
86
|
+
it('returns true after dispose', () => {
|
|
87
|
+
const controller = createManifestController();
|
|
88
|
+
controller.dispose();
|
|
89
|
+
expect(controller.disposed).toBe(true);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe('value - pending', () => {
|
|
93
|
+
it('resolves pending manifest', async () => {
|
|
94
|
+
const deferred = new Deferred();
|
|
95
|
+
manifestProvider.and.returnValue(deferred);
|
|
96
|
+
const controller = createManifestController();
|
|
97
|
+
const valuePromise = controller.value;
|
|
98
|
+
deferred.resolve(mockHlsManifestData);
|
|
99
|
+
const result = await valuePromise;
|
|
100
|
+
expect(result.mainPlaylist).toBe(mockHlsManifestData.mainPlaylist);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe('when manifest provider rejects', () => {
|
|
104
|
+
it('does not cause an unhandled rejection', async () => {
|
|
105
|
+
manifestProvider.and.rejectWith(new Error('expected'));
|
|
106
|
+
createManifestController();
|
|
107
|
+
await flushPromises();
|
|
108
|
+
expectNothing();
|
|
109
|
+
});
|
|
110
|
+
it('rejects the value', async () => {
|
|
111
|
+
manifestProvider.and.rejectWith(new Error('expected'));
|
|
112
|
+
const controller = createManifestController();
|
|
113
|
+
await expectAsync(controller.value).toBeRejectedWithError('expected');
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
describe('error', () => {
|
|
117
|
+
it('is null when manifest loads successfully', async () => {
|
|
118
|
+
const controller = createManifestController();
|
|
119
|
+
await controller.value;
|
|
120
|
+
expect(controller.error).toBeNull();
|
|
121
|
+
});
|
|
122
|
+
it('is set when manifest provider rejects', async () => {
|
|
123
|
+
manifestProvider.and.rejectWith(new Error('test error'));
|
|
124
|
+
const controller = createManifestController();
|
|
125
|
+
await expectAsync(controller.value).toBeRejected();
|
|
126
|
+
expect(controller.error).toEqual(jasmine.objectContaining({ message: 'test error' }));
|
|
127
|
+
});
|
|
128
|
+
it('is cleared after refresh', async () => {
|
|
129
|
+
manifestProvider.and.rejectWith(new Error('test error'));
|
|
130
|
+
const controller = createManifestController();
|
|
131
|
+
await expectAsync(controller.value).toBeRejected();
|
|
132
|
+
expect(controller.error).not.toBeNull();
|
|
133
|
+
manifestProvider.and.resolveTo(mockHlsManifestData);
|
|
134
|
+
controller.refresh();
|
|
135
|
+
expect(controller.error).toBeNull();
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe('reset', () => {
|
|
139
|
+
it('refreshes manifest when there was an error', async () => {
|
|
140
|
+
manifestProvider.and.rejectWith(new Error('test error'));
|
|
141
|
+
const controller = createManifestController();
|
|
142
|
+
await expectAsync(controller.value).toBeRejected();
|
|
143
|
+
manifestProvider.and.resolveTo(mockHlsManifestData);
|
|
144
|
+
controller.reset();
|
|
145
|
+
expect(manifestProvider.calls.count()).toBe(2);
|
|
146
|
+
});
|
|
147
|
+
it('does nothing when no error occurred', () => {
|
|
148
|
+
const controller = createManifestController();
|
|
149
|
+
const initialCallCount = manifestProvider.calls.count();
|
|
150
|
+
controller.reset();
|
|
151
|
+
expect(manifestProvider.calls.count()).toBe(initialCallCount);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe('load span metrics', () => {
|
|
155
|
+
it('dispatches loadSpanMeasured on the initial manifest fetch', async () => {
|
|
156
|
+
const controller = createManifestController();
|
|
157
|
+
const spy = createSpy('loadSpanMeasured');
|
|
158
|
+
controller.on('loadSpanMeasured', spy);
|
|
159
|
+
await controller.value;
|
|
160
|
+
await flushPromises();
|
|
161
|
+
expect(spy).toHaveBeenCalledWith(jasmine.objectContaining({
|
|
162
|
+
kind: 'manifest',
|
|
163
|
+
startTime: jasmine.any(Number),
|
|
164
|
+
endTime: jasmine.any(Number),
|
|
165
|
+
}));
|
|
166
|
+
});
|
|
167
|
+
it('does not re-measure on refresh', async () => {
|
|
168
|
+
const controller = createManifestController();
|
|
169
|
+
await controller.value;
|
|
170
|
+
const spy = createSpy('loadSpanMeasured');
|
|
171
|
+
controller.on('loadSpanMeasured', spy);
|
|
172
|
+
controller.refresh();
|
|
173
|
+
await controller.value;
|
|
174
|
+
await flushPromises();
|
|
175
|
+
expect(spy).not.toHaveBeenCalled();
|
|
176
|
+
});
|
|
177
|
+
it('reports listeners', () => {
|
|
178
|
+
const controller = createManifestController();
|
|
179
|
+
expect(controller.hasAnyListeners()).toBeFalse();
|
|
180
|
+
expect(controller.hasListeners('loadSpanMeasured')).toBeFalse();
|
|
181
|
+
controller.on('loadSpanMeasured', createSpy('loadSpanMeasured'));
|
|
182
|
+
expect(controller.hasAnyListeners()).toBeTrue();
|
|
183
|
+
expect(controller.hasListeners('loadSpanMeasured')).toBeTrue();
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
describe('dispose', () => {
|
|
187
|
+
it('aborts current request', () => {
|
|
188
|
+
const deferred = new Deferred();
|
|
189
|
+
manifestProvider.and.returnValue(deferred);
|
|
190
|
+
const controller = createManifestController();
|
|
191
|
+
const abort = manifestProvider.calls.first()
|
|
192
|
+
.args[0];
|
|
193
|
+
controller.dispose();
|
|
194
|
+
expect(abort.aborted()).toBeTrue();
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codecDenylist.test.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/streaming/buffering/codecDenylist.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { clearCodecDenylist, denylistCodecsFromMimeType, getDenylistedCodecs, isMimeTypeDenylisted, } from '@amazon/vinyl';
|
|
6
|
+
describe('codecDenylist', () => {
|
|
7
|
+
afterEach(() => {
|
|
8
|
+
clearCodecDenylist();
|
|
9
|
+
});
|
|
10
|
+
describe('denylistCodecsFromMimeType', () => {
|
|
11
|
+
it('adds codecs and returns true on first denylist', () => {
|
|
12
|
+
expect(denylistCodecsFromMimeType('video/mp4; codecs="hvc1.1"')).toBeTrue();
|
|
13
|
+
expect(getDenylistedCodecs()).toContain('hvc1.1');
|
|
14
|
+
});
|
|
15
|
+
it('returns false when all codecs are already denylisted', () => {
|
|
16
|
+
denylistCodecsFromMimeType('video/mp4; codecs="hvc1.1"');
|
|
17
|
+
expect(denylistCodecsFromMimeType('video/mp4; codecs="hvc1.1"')).toBeFalse();
|
|
18
|
+
});
|
|
19
|
+
it('returns true when at least one codec is newly added', () => {
|
|
20
|
+
denylistCodecsFromMimeType('video/mp4; codecs="hvc1.1"');
|
|
21
|
+
expect(denylistCodecsFromMimeType('video/mp4; codecs="hvc1.1,ec-3"')).toBeTrue();
|
|
22
|
+
});
|
|
23
|
+
it('returns false for a mimeType with no codecs', () => {
|
|
24
|
+
expect(denylistCodecsFromMimeType('video/mp4')).toBeFalse();
|
|
25
|
+
});
|
|
26
|
+
it('stores codecs lowercased', () => {
|
|
27
|
+
denylistCodecsFromMimeType('video/mp4; codecs="HVC1.1"');
|
|
28
|
+
expect(getDenylistedCodecs()).toContain('hvc1.1');
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
describe('isMimeTypeDenylisted', () => {
|
|
32
|
+
it('returns true when a codec is denylisted', () => {
|
|
33
|
+
denylistCodecsFromMimeType('video/mp4; codecs="hvc1.1"');
|
|
34
|
+
expect(isMimeTypeDenylisted('video/mp4; codecs="hvc1.1"')).toBeTrue();
|
|
35
|
+
});
|
|
36
|
+
it('is case-insensitive', () => {
|
|
37
|
+
denylistCodecsFromMimeType('video/mp4; codecs="hvc1.1"');
|
|
38
|
+
expect(isMimeTypeDenylisted('video/mp4; codecs="HVC1.1"')).toBeTrue();
|
|
39
|
+
});
|
|
40
|
+
it('returns false when no codec is denylisted', () => {
|
|
41
|
+
denylistCodecsFromMimeType('video/mp4; codecs="hvc1.1"');
|
|
42
|
+
expect(isMimeTypeDenylisted('video/mp4; codecs="avc1.64001f"')).toBeFalse();
|
|
43
|
+
});
|
|
44
|
+
it('returns false for a mimeType with no codecs', () => {
|
|
45
|
+
denylistCodecsFromMimeType('video/mp4; codecs="hvc1.1"');
|
|
46
|
+
expect(isMimeTypeDenylisted('video/mp4')).toBeFalse();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('clearCodecDenylist', () => {
|
|
50
|
+
it('empties the denylist', () => {
|
|
51
|
+
denylistCodecsFromMimeType('video/mp4; codecs="hvc1.1"');
|
|
52
|
+
clearCodecDenylist();
|
|
53
|
+
expect(getDenylistedCodecs()).toEqual([]);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAllowedContentTypesValue.test.d.ts","sourceRoot":"","sources":["../../../../../test/unit/streaming/createAllowedContentTypesValue.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { createAllowedContentTypesValue, } from '@amazon/vinyl';
|
|
6
|
+
import { data } from '@amazon/vinyl-observable';
|
|
7
|
+
describe('createAllowedContentTypesValue', () => {
|
|
8
|
+
let baseContentTypesValue;
|
|
9
|
+
let options;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
baseContentTypesValue = data(Promise.resolve(new Set(['audio', 'video', 'text'])));
|
|
12
|
+
options = data({ allowedContentTypes: null });
|
|
13
|
+
});
|
|
14
|
+
it('passes all content types through when the allow list is null', async () => {
|
|
15
|
+
const result = await createAllowedContentTypesValue({
|
|
16
|
+
baseContentTypesValue,
|
|
17
|
+
options,
|
|
18
|
+
}).value;
|
|
19
|
+
expect(result).toEqual(new Set(['audio', 'video', 'text']));
|
|
20
|
+
});
|
|
21
|
+
it('keeps only the allowed media content types', async () => {
|
|
22
|
+
options.value = { allowedContentTypes: ['audio'] };
|
|
23
|
+
const result = await createAllowedContentTypesValue({
|
|
24
|
+
baseContentTypesValue,
|
|
25
|
+
options,
|
|
26
|
+
}).value;
|
|
27
|
+
// Text always passes through; video is dropped.
|
|
28
|
+
expect(result).toEqual(new Set(['audio', 'text']));
|
|
29
|
+
});
|
|
30
|
+
it('always keeps text even when only video is allowed', async () => {
|
|
31
|
+
options.value = { allowedContentTypes: ['video'] };
|
|
32
|
+
const result = await createAllowedContentTypesValue({
|
|
33
|
+
baseContentTypesValue,
|
|
34
|
+
options,
|
|
35
|
+
}).value;
|
|
36
|
+
expect(result).toEqual(new Set(['video', 'text']));
|
|
37
|
+
});
|
|
38
|
+
it('keeps text even when the allow list is empty', async () => {
|
|
39
|
+
options.value = { allowedContentTypes: [] };
|
|
40
|
+
const result = await createAllowedContentTypesValue({
|
|
41
|
+
baseContentTypesValue,
|
|
42
|
+
options,
|
|
43
|
+
}).value;
|
|
44
|
+
expect(result).toEqual(new Set(['text']));
|
|
45
|
+
});
|
|
46
|
+
it('ignores allowed types not present in the manifest', async () => {
|
|
47
|
+
baseContentTypesValue.value = Promise.resolve(new Set(['audio']));
|
|
48
|
+
options.value = { allowedContentTypes: ['audio', 'video'] };
|
|
49
|
+
const result = await createAllowedContentTypesValue({
|
|
50
|
+
baseContentTypesValue,
|
|
51
|
+
options,
|
|
52
|
+
}).value;
|
|
53
|
+
expect(result).toEqual(new Set(['audio']));
|
|
54
|
+
});
|
|
55
|
+
it('re-emits a newly filtered set when the allow list changes', async () => {
|
|
56
|
+
const value = createAllowedContentTypesValue({
|
|
57
|
+
baseContentTypesValue,
|
|
58
|
+
options,
|
|
59
|
+
});
|
|
60
|
+
const emissions = [];
|
|
61
|
+
const unsub = value.onData((promise) => {
|
|
62
|
+
void promise.then((set) => emissions.push(set));
|
|
63
|
+
});
|
|
64
|
+
// Changing the allow list should produce a new, filtered emission,
|
|
65
|
+
// which is what drives the track to reload with only these types.
|
|
66
|
+
options.value = { allowedContentTypes: ['audio'] };
|
|
67
|
+
expect(await value.value).toEqual(new Set(['audio', 'text']));
|
|
68
|
+
unsub();
|
|
69
|
+
// Wait for all pending promise callbacks to resolve.
|
|
70
|
+
await Promise.resolve();
|
|
71
|
+
await Promise.resolve();
|
|
72
|
+
expect(emissions).toEqual([
|
|
73
|
+
new Set(['audio', 'video', 'text']),
|
|
74
|
+
new Set(['audio', 'text']),
|
|
75
|
+
]);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaTimelineAccessibilityFilter.test.d.ts","sourceRoot":"","sources":["../../../../../test/unit/streaming/mediaTimelineAccessibilityFilter.test.ts"],"names":[],"mappings":""}
|
|
@@ -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 { createAudioDescriptionFilter, createEmptyMediaQualityMetadata, filterTimelineQualities, isAudioDescription, throwNoPlayableAudio, } from '@amazon/vinyl';
|
|
6
|
+
function audioQuality(id, characteristics) {
|
|
7
|
+
return {
|
|
8
|
+
metadata: {
|
|
9
|
+
...createEmptyMediaQualityMetadata(),
|
|
10
|
+
qualityId: id,
|
|
11
|
+
contentType: 'audio',
|
|
12
|
+
lang: 'en',
|
|
13
|
+
characteristics,
|
|
14
|
+
},
|
|
15
|
+
getSegment: () => Promise.resolve(null),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function videoQuality() {
|
|
19
|
+
return {
|
|
20
|
+
metadata: {
|
|
21
|
+
...createEmptyMediaQualityMetadata(),
|
|
22
|
+
qualityId: 'video',
|
|
23
|
+
contentType: 'video',
|
|
24
|
+
},
|
|
25
|
+
getSegment: () => Promise.resolve(null),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function timelineOf(qualities) {
|
|
29
|
+
return {
|
|
30
|
+
periods: [{ startTime: 0, endTime: 10, qualities: [...qualities] }],
|
|
31
|
+
minBufferTime: 2,
|
|
32
|
+
getAdBreaks: () => Promise.resolve([]),
|
|
33
|
+
getDuration: () => Promise.resolve(Infinity),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/** The audio qualityIds kept after applying the filter. */
|
|
37
|
+
function keptAudio(qualities, preferDescription) {
|
|
38
|
+
const filtered = filterTimelineQualities(createAudioDescriptionFilter(preferDescription), throwNoPlayableAudio, timelineOf(qualities));
|
|
39
|
+
return filtered.periods[0].qualities
|
|
40
|
+
.filter((q) => q.metadata.contentType === 'audio')
|
|
41
|
+
.map((q) => q.metadata.qualityId);
|
|
42
|
+
}
|
|
43
|
+
const DVS = 'public.accessibility.describes-video';
|
|
44
|
+
describe('throwNoPlayableAudio', () => {
|
|
45
|
+
it('throws (defensive guard — the filter never strands audio)', () => {
|
|
46
|
+
expect(() => throwNoPlayableAudio()).toThrowError(/No playable audio rendition/);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe('isAudioDescription', () => {
|
|
50
|
+
it('detects the HLS describes-video characteristic', () => {
|
|
51
|
+
expect(isAudioDescription({
|
|
52
|
+
...createEmptyMediaQualityMetadata(),
|
|
53
|
+
characteristics: [DVS],
|
|
54
|
+
})).toBeTrue();
|
|
55
|
+
});
|
|
56
|
+
it('detects the DASH description role', () => {
|
|
57
|
+
expect(isAudioDescription({
|
|
58
|
+
...createEmptyMediaQualityMetadata(),
|
|
59
|
+
characteristics: ['description'],
|
|
60
|
+
})).toBeTrue();
|
|
61
|
+
});
|
|
62
|
+
it('is false for a plain rendition', () => {
|
|
63
|
+
expect(isAudioDescription(createEmptyMediaQualityMetadata())).toBeFalse();
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe('createAudioDescriptionFilter', () => {
|
|
67
|
+
it('drops the description track when a main alternative exists (default)', () => {
|
|
68
|
+
const kept = keptAudio([
|
|
69
|
+
audioQuality('dvs', [DVS]),
|
|
70
|
+
audioQuality('main', []),
|
|
71
|
+
videoQuality(),
|
|
72
|
+
], false);
|
|
73
|
+
expect(kept).toEqual(['main']);
|
|
74
|
+
});
|
|
75
|
+
it('keeps the description track when it is the only audio (never strands)', () => {
|
|
76
|
+
const kept = keptAudio([audioQuality('dvs', [DVS]), videoQuality()], false);
|
|
77
|
+
expect(kept).toEqual(['dvs']);
|
|
78
|
+
});
|
|
79
|
+
it('keeps only the description track when opted in', () => {
|
|
80
|
+
const kept = keptAudio([
|
|
81
|
+
audioQuality('dvs', [DVS]),
|
|
82
|
+
audioQuality('main', []),
|
|
83
|
+
videoQuality(),
|
|
84
|
+
], true);
|
|
85
|
+
expect(kept).toEqual(['dvs']);
|
|
86
|
+
});
|
|
87
|
+
it('keeps all audio when opted in but no description exists', () => {
|
|
88
|
+
const kept = keptAudio([audioQuality('a', []), audioQuality('b', []), videoQuality()], true);
|
|
89
|
+
expect(kept).toEqual(['a', 'b']);
|
|
90
|
+
});
|
|
91
|
+
it('leaves non-audio qualities untouched', () => {
|
|
92
|
+
const filtered = filterTimelineQualities(createAudioDescriptionFilter(false), throwNoPlayableAudio, timelineOf([
|
|
93
|
+
audioQuality('dvs', [DVS]),
|
|
94
|
+
audioQuality('main', []),
|
|
95
|
+
videoQuality(),
|
|
96
|
+
]));
|
|
97
|
+
expect(filtered.periods[0].qualities.some((q) => q.metadata.contentType === 'video')).toBeTrue();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HtmlTextTrackRenderer.test.d.ts","sourceRoot":"","sources":["../../../../../test/unit/text/HtmlTextTrackRenderer.test.ts"],"names":[],"mappings":""}
|