@amazon/vinyl 1.2.0 → 2.0.4
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 +9225 -6633
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +9080 -6435
- package/dist/index.js.map +4 -4
- package/dist/test/benchmark.es5.js +266 -253
- package/dist/test/benchmark.js +3256 -3190
- package/dist/test/benchmark.js.map +4 -4
- package/dist/test/integ.es5.js +1404 -1093
- package/dist/test/integ.js +45924 -33873
- package/dist/test/integ.js.map +4 -4
- 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/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/DrmController.d.ts +29 -4
- package/dist/types/current/drm/DrmController.d.ts.map +1 -1
- package/dist/types/current/drm/DrmControllerImpl.d.ts +13 -4
- package/dist/types/current/drm/DrmControllerImpl.d.ts.map +1 -1
- package/dist/types/current/drm/DrmControllerImpl.js +85 -14
- package/dist/types/current/drm/util/unpackPlayReadyChallenge.d.ts +5 -0
- package/dist/types/current/drm/util/unpackPlayReadyChallenge.d.ts.map +1 -1
- package/dist/types/current/drm/util/unpackPlayReadyChallenge.js +5 -0
- package/dist/types/current/index.d.ts +151 -126
- package/dist/types/current/index.d.ts.map +1 -1
- package/dist/types/current/index.js +151 -126
- package/dist/types/current/playback/PlaybackControllerImpl.d.ts +1 -0
- package/dist/types/current/playback/PlaybackControllerImpl.d.ts.map +1 -1
- package/dist/types/current/playback/PlaybackControllerImpl.js +44 -5
- package/dist/types/current/playback/PlaybackSource.d.ts +1 -1
- package/dist/types/current/playback/ReadonlyPlaybackController.d.ts +6 -1
- package/dist/types/current/playback/ReadonlyPlaybackController.d.ts.map +1 -1
- package/dist/types/current/playback/ReadonlyPlaybackController.js +1 -0
- package/dist/types/current/streaming/ContentStream.d.ts +8 -1
- package/dist/types/current/streaming/ContentStream.d.ts.map +1 -1
- package/dist/types/current/streaming/ContentStream.js +19 -2
- 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/ManifestController.d.ts +16 -1
- package/dist/types/current/streaming/ManifestController.d.ts.map +1 -1
- 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/MediaQualityMetadata.d.ts +16 -0
- package/dist/types/current/streaming/MediaQualityMetadata.d.ts.map +1 -1
- package/dist/types/current/streaming/MediaQualityMetadata.js +6 -0
- package/dist/types/current/streaming/MediaTimeline.d.ts +6 -0
- package/dist/types/current/streaming/MediaTimeline.d.ts.map +1 -1
- package/dist/types/current/streaming/SegmentController.d.ts +5 -0
- package/dist/types/current/streaming/SegmentController.d.ts.map +1 -1
- package/dist/types/current/streaming/SegmentControllerImpl.d.ts +12 -0
- package/dist/types/current/streaming/SegmentControllerImpl.d.ts.map +1 -1
- package/dist/types/current/streaming/SegmentControllerImpl.js +67 -10
- package/dist/types/current/streaming/StreamingEventMap.d.ts +38 -1
- package/dist/types/current/streaming/StreamingEventMap.d.ts.map +1 -1
- package/dist/types/current/streaming/StreamingEventMap.js +4 -0
- package/dist/types/current/streaming/abr/QualitySelectorImpl.d.ts +28 -0
- package/dist/types/current/streaming/abr/QualitySelectorImpl.d.ts.map +1 -1
- package/dist/types/current/streaming/abr/QualitySelectorImpl.js +39 -4
- package/dist/types/current/streaming/buffering/BufferingController.d.ts +37 -0
- package/dist/types/current/streaming/buffering/BufferingController.d.ts.map +1 -1
- package/dist/types/current/streaming/buffering/BufferingController.js +79 -3
- package/dist/types/current/streaming/buffering/MediaSourceController.d.ts +16 -11
- package/dist/types/current/streaming/buffering/MediaSourceController.d.ts.map +1 -1
- package/dist/types/current/streaming/buffering/MediaSourceController.js +76 -51
- package/dist/types/current/streaming/buffering/SourceBufferController.d.ts.map +1 -1
- package/dist/types/current/streaming/buffering/SourceBufferController.js +5 -2
- 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/createDefaultMediaTimelineTransformer.d.ts +4 -1
- package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.d.ts.map +1 -1
- package/dist/types/current/streaming/createDefaultMediaTimelineTransformer.js +32 -1
- 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/streaming/mediaTimelineLanguageFilter.d.ts +24 -6
- package/dist/types/current/streaming/mediaTimelineLanguageFilter.d.ts.map +1 -1
- package/dist/types/current/streaming/mediaTimelineLanguageFilter.js +61 -16
- package/dist/types/current/text/SidecarTextTrackController.d.ts +91 -0
- package/dist/types/current/text/SidecarTextTrackController.d.ts.map +1 -0
- package/dist/types/current/text/SidecarTextTrackController.js +237 -0
- package/dist/types/current/text/SidecarTextTrackLoader.d.ts +60 -0
- package/dist/types/current/text/SidecarTextTrackLoader.d.ts.map +1 -0
- package/dist/types/current/text/SidecarTextTrackLoader.js +144 -0
- package/dist/types/current/text/TextTrack.d.ts +125 -0
- package/dist/types/current/text/TextTrack.d.ts.map +1 -0
- package/dist/types/current/text/TextTrack.js +9 -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/parseWebVtt.d.ts +46 -0
- package/dist/types/current/text/parseWebVtt.d.ts.map +1 -0
- package/dist/types/current/text/parseWebVtt.js +120 -0
- package/dist/types/current/text/pickPreferredTextTrack.d.ts +14 -0
- package/dist/types/current/text/pickPreferredTextTrack.d.ts.map +1 -0
- package/dist/types/current/text/pickPreferredTextTrack.js +68 -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/Track.d.ts +50 -7
- package/dist/types/current/track/Track.d.ts.map +1 -1
- package/dist/types/current/track/TrackBase.d.ts +30 -29
- package/dist/types/current/track/TrackBase.d.ts.map +1 -1
- package/dist/types/current/track/TrackBase.js +68 -16
- package/dist/types/current/track/TrackController.d.ts +100 -36
- package/dist/types/current/track/TrackController.d.ts.map +1 -1
- package/dist/types/current/track/TrackController.js +368 -115
- package/dist/types/current/track/TrackFactory.d.ts +23 -3
- package/dist/types/current/track/TrackFactory.d.ts.map +1 -1
- package/dist/types/current/track/TrackFactory.js +9 -3
- package/dist/types/current/track/dash/DashManifestController.d.ts +1 -40
- package/dist/types/current/track/dash/DashManifestController.d.ts.map +1 -1
- package/dist/types/current/track/dash/DashManifestController.js +1 -79
- package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.d.ts.map +1 -1
- package/dist/types/current/track/dash/DashMediaQualityMetadataResolver.js +13 -0
- package/dist/types/current/track/dash/DashTrack.d.ts +4 -5
- package/dist/types/current/track/dash/DashTrack.d.ts.map +1 -1
- package/dist/types/current/track/dash/DashTrack.js +3 -5
- package/dist/types/current/track/dash/buildDashMediaTimeline.d.ts.map +1 -1
- package/dist/types/current/track/dash/buildDashMediaTimeline.js +3 -2
- package/dist/types/current/track/dash/createDashContentTypesValue.js +2 -2
- package/dist/types/current/track/dash/createDashFactories.d.ts +39 -12
- package/dist/types/current/track/dash/createDashFactories.d.ts.map +1 -1
- package/dist/types/current/track/dash/createDashFactories.js +33 -5
- package/dist/types/current/track/dash/createSegmentControllerFactory.d.ts +0 -5
- package/dist/types/current/track/dash/createSegmentControllerFactory.d.ts.map +1 -1
- package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.d.ts.map +1 -1
- package/dist/types/current/track/dash/timeline/DashRepresentationSegmentProvider.js +2 -1
- package/dist/types/current/track/dash/util/mpd.d.ts +10 -0
- package/dist/types/current/track/dash/util/mpd.d.ts.map +1 -1
- package/dist/types/current/track/dash/util/mpd.js +16 -0
- package/dist/types/current/track/hls/HlsManifestController.d.ts +1 -25
- package/dist/types/current/track/hls/HlsManifestController.d.ts.map +1 -1
- package/dist/types/current/track/hls/HlsManifestController.js +1 -68
- package/dist/types/{ts3.7/track/hls/HlsManifestProvider.d.ts → current/track/hls/HlsManifestData.d.ts} +4 -6
- 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/HlsMediaQualityMetadataResolver.js +9 -6
- package/dist/types/current/track/hls/HlsTrack.d.ts +5 -6
- package/dist/types/current/track/hls/HlsTrack.d.ts.map +1 -1
- package/dist/types/current/track/hls/HlsTrack.js +3 -5
- package/dist/types/current/track/hls/buildHlsMediaTimeline.d.ts +8 -1
- package/dist/types/current/track/hls/buildHlsMediaTimeline.d.ts.map +1 -1
- package/dist/types/current/track/hls/buildHlsMediaTimeline.js +134 -67
- package/dist/types/current/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
- package/dist/types/current/track/hls/createDefaultHlsManifestTransformer.d.ts.map +1 -1
- package/dist/types/current/track/hls/createHlsContentTypesValue.d.ts +1 -1
- package/dist/types/current/track/hls/createHlsContentTypesValue.d.ts.map +1 -1
- package/dist/types/current/track/hls/createHlsFactories.d.ts +40 -13
- package/dist/types/current/track/hls/createHlsFactories.d.ts.map +1 -1
- package/dist/types/current/track/hls/createHlsFactories.js +35 -6
- 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/hls/createUrlHlsManifestProvider.d.ts +4 -4
- package/dist/types/current/track/hls/createUrlHlsManifestProvider.d.ts.map +1 -1
- package/dist/types/current/track/hls/createUrlHlsManifestProvider.js +22 -3
- package/dist/types/current/track/hls/index.d.ts +1 -1
- package/dist/types/current/track/hls/index.d.ts.map +1 -1
- package/dist/types/current/track/hls/index.js +1 -1
- 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 +66 -8
- package/dist/types/current/track/mse/MseTrack.d.ts.map +1 -1
- package/dist/types/current/track/mse/MseTrack.js +216 -52
- package/dist/types/current/track/source/SourceObjectTrack.d.ts +2 -2
- package/dist/types/current/track/source/SourceObjectTrack.d.ts.map +1 -1
- package/dist/types/current/track/source/SourceTrack.d.ts +2 -2
- package/dist/types/current/track/source/SourceTrack.d.ts.map +1 -1
- package/dist/types/current/track/source/SourceTrack.js +1 -2
- package/dist/types/current/track/source/SourceTrackBase.d.ts +7 -5
- package/dist/types/current/track/source/SourceTrackBase.d.ts.map +1 -1
- package/dist/types/current/track/source/SourceTrackBase.js +26 -9
- 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/mediaSource.d.ts +5 -0
- package/dist/types/current/util/media/mediaSource.d.ts.map +1 -1
- package/dist/types/current/util/media/mediaSource.js +6 -1
- package/dist/types/current/vinyl/ReadonlyPlaybackStreamingState.d.ts +9 -2
- package/dist/types/current/vinyl/ReadonlyPlaybackStreamingState.d.ts.map +1 -1
- package/dist/types/current/vinyl/VinylDeps.d.ts +5 -0
- package/dist/types/current/vinyl/VinylDeps.d.ts.map +1 -1
- package/dist/types/current/vinyl/VinylOptions.d.ts +68 -4
- package/dist/types/current/vinyl/VinylOptions.d.ts.map +1 -1
- package/dist/types/current/vinyl/VinylOptions.js +17 -2
- package/dist/types/current/vinyl/VinylPlayer.d.ts +63 -4
- package/dist/types/current/vinyl/VinylPlayer.d.ts.map +1 -1
- package/dist/types/current/vinyl/VinylPlayer.js +216 -36
- package/dist/types/current/vinyl/createVinylFactories.d.ts +55 -12
- package/dist/types/current/vinyl/createVinylFactories.d.ts.map +1 -1
- package/dist/types/current/vinyl/createVinylFactories.js +4 -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/drm/DrmController.d.ts +29 -4
- package/dist/types/ts3.7/drm/DrmControllerImpl.d.ts +13 -4
- package/dist/types/ts3.7/drm/util/unpackPlayReadyChallenge.d.ts +5 -0
- package/dist/types/ts3.7/index.d.ts +151 -126
- package/dist/types/ts3.7/playback/PlaybackControllerImpl.d.ts +1 -0
- package/dist/types/ts3.7/playback/PlaybackSource.d.ts +1 -1
- package/dist/types/ts3.7/playback/ReadonlyPlaybackController.d.ts +6 -0
- package/dist/types/ts3.7/streaming/ContentStream.d.ts +8 -1
- package/dist/types/ts3.7/streaming/LoadMetric.d.ts +58 -0
- package/dist/types/ts3.7/streaming/ManifestController.d.ts +16 -1
- package/dist/types/ts3.7/streaming/ManifestControllerImpl.d.ts +40 -0
- package/dist/types/ts3.7/streaming/MediaQualityMetadata.d.ts +19 -0
- package/dist/types/ts3.7/streaming/MediaTimeline.d.ts +6 -0
- package/dist/types/ts3.7/streaming/SegmentController.d.ts +5 -0
- package/dist/types/ts3.7/streaming/SegmentControllerImpl.d.ts +12 -0
- package/dist/types/ts3.7/streaming/StreamingEventMap.d.ts +42 -1
- package/dist/types/ts3.7/streaming/abr/QualitySelectorImpl.d.ts +28 -0
- package/dist/types/ts3.7/streaming/buffering/BufferingController.d.ts +37 -0
- package/dist/types/ts3.7/streaming/buffering/MediaSourceController.d.ts +16 -11
- 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/createDefaultMediaTimelineTransformer.d.ts +4 -1
- package/dist/types/ts3.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts3.7/streaming/mediaTimelineLanguageFilter.d.ts +24 -6
- package/dist/types/ts3.7/text/SidecarTextTrackController.d.ts +91 -0
- package/dist/types/ts3.7/text/SidecarTextTrackLoader.d.ts +60 -0
- package/dist/types/ts3.7/text/TextTrack.d.ts +129 -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/parseWebVtt.d.ts +46 -0
- package/dist/types/ts3.7/text/pickPreferredTextTrack.d.ts +14 -0
- package/dist/types/ts3.7/track/SeekRange.d.ts +9 -0
- package/dist/types/ts3.7/track/Track.d.ts +50 -7
- package/dist/types/ts3.7/track/TrackBase.d.ts +21 -29
- package/dist/types/ts3.7/track/TrackController.d.ts +102 -37
- package/dist/types/ts3.7/track/TrackFactory.d.ts +22 -2
- package/dist/types/ts3.7/track/dash/DashManifestController.d.ts +1 -36
- package/dist/types/ts3.7/track/dash/DashTrack.d.ts +4 -5
- package/dist/types/ts3.7/track/dash/createDashFactories.d.ts +39 -12
- package/dist/types/ts3.7/track/dash/createSegmentControllerFactory.d.ts +0 -5
- package/dist/types/ts3.7/track/dash/util/mpd.d.ts +10 -0
- package/dist/types/ts3.7/track/hls/HlsManifestController.d.ts +1 -22
- package/dist/types/{current/track/hls/HlsManifestProvider.d.ts → ts3.7/track/hls/HlsManifestData.d.ts} +4 -6
- package/dist/types/ts3.7/track/hls/HlsTrack.d.ts +5 -6
- package/dist/types/ts3.7/track/hls/buildHlsMediaTimeline.d.ts +8 -1
- package/dist/types/ts3.7/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
- package/dist/types/ts3.7/track/hls/createHlsContentTypesValue.d.ts +1 -1
- package/dist/types/ts3.7/track/hls/createHlsFactories.d.ts +40 -13
- package/dist/types/ts3.7/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts3.7/track/hls/createUrlHlsManifestProvider.d.ts +4 -4
- package/dist/types/ts3.7/track/hls/index.d.ts +1 -1
- package/dist/types/ts3.7/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts3.7/track/mse/MseTrack.d.ts +65 -7
- package/dist/types/ts3.7/track/source/SourceObjectTrack.d.ts +2 -2
- package/dist/types/ts3.7/track/source/SourceTrack.d.ts +2 -2
- package/dist/types/ts3.7/track/source/SourceTrackBase.d.ts +7 -5
- 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/mediaSource.d.ts +5 -0
- package/dist/types/ts3.7/vinyl/ReadonlyPlaybackStreamingState.d.ts +9 -2
- package/dist/types/ts3.7/vinyl/VinylDeps.d.ts +5 -0
- package/dist/types/ts3.7/vinyl/VinylOptions.d.ts +68 -4
- package/dist/types/ts3.7/vinyl/VinylPlayer.d.ts +33 -4
- package/dist/types/ts3.7/vinyl/createVinylFactories.d.ts +55 -12
- 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/drm/DrmController.d.ts +29 -4
- package/dist/types/ts4.1/drm/DrmControllerImpl.d.ts +13 -4
- package/dist/types/ts4.1/drm/util/unpackPlayReadyChallenge.d.ts +5 -0
- package/dist/types/ts4.1/index.d.ts +151 -126
- package/dist/types/ts4.1/playback/PlaybackControllerImpl.d.ts +1 -0
- package/dist/types/ts4.1/playback/PlaybackSource.d.ts +1 -1
- package/dist/types/ts4.1/playback/ReadonlyPlaybackController.d.ts +6 -0
- package/dist/types/ts4.1/streaming/ContentStream.d.ts +8 -1
- package/dist/types/ts4.1/streaming/LoadMetric.d.ts +58 -0
- package/dist/types/ts4.1/streaming/ManifestController.d.ts +16 -1
- package/dist/types/ts4.1/streaming/ManifestControllerImpl.d.ts +40 -0
- package/dist/types/ts4.1/streaming/MediaQualityMetadata.d.ts +19 -0
- package/dist/types/ts4.1/streaming/MediaTimeline.d.ts +6 -0
- package/dist/types/ts4.1/streaming/SegmentController.d.ts +5 -0
- package/dist/types/ts4.1/streaming/SegmentControllerImpl.d.ts +12 -0
- package/dist/types/ts4.1/streaming/StreamingEventMap.d.ts +42 -1
- package/dist/types/ts4.1/streaming/abr/QualitySelectorImpl.d.ts +28 -0
- package/dist/types/ts4.1/streaming/buffering/BufferingController.d.ts +37 -0
- package/dist/types/ts4.1/streaming/buffering/MediaSourceController.d.ts +16 -11
- 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/createDefaultMediaTimelineTransformer.d.ts +4 -1
- package/dist/types/ts4.1/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts4.1/streaming/mediaTimelineLanguageFilter.d.ts +24 -6
- package/dist/types/ts4.1/text/SidecarTextTrackController.d.ts +92 -0
- package/dist/types/ts4.1/text/SidecarTextTrackLoader.d.ts +60 -0
- package/dist/types/ts4.1/text/TextTrack.d.ts +129 -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/parseWebVtt.d.ts +46 -0
- package/dist/types/ts4.1/text/pickPreferredTextTrack.d.ts +14 -0
- package/dist/types/ts4.1/track/SeekRange.d.ts +9 -0
- package/dist/types/ts4.1/track/Track.d.ts +50 -7
- package/dist/types/ts4.1/track/TrackBase.d.ts +21 -29
- package/dist/types/ts4.1/track/TrackController.d.ts +102 -37
- package/dist/types/ts4.1/track/TrackFactory.d.ts +22 -2
- package/dist/types/ts4.1/track/dash/DashManifestController.d.ts +1 -36
- package/dist/types/ts4.1/track/dash/DashTrack.d.ts +4 -5
- package/dist/types/ts4.1/track/dash/createDashFactories.d.ts +39 -12
- package/dist/types/ts4.1/track/dash/createSegmentControllerFactory.d.ts +0 -5
- package/dist/types/ts4.1/track/dash/util/mpd.d.ts +10 -0
- package/dist/types/ts4.1/track/hls/HlsManifestController.d.ts +1 -22
- package/dist/types/ts4.1/track/hls/{HlsManifestProvider.d.ts → HlsManifestData.d.ts} +4 -6
- package/dist/types/ts4.1/track/hls/HlsTrack.d.ts +5 -6
- package/dist/types/ts4.1/track/hls/buildHlsMediaTimeline.d.ts +8 -1
- package/dist/types/ts4.1/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
- package/dist/types/ts4.1/track/hls/createHlsContentTypesValue.d.ts +1 -1
- package/dist/types/ts4.1/track/hls/createHlsFactories.d.ts +41 -13
- package/dist/types/ts4.1/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts4.1/track/hls/createUrlHlsManifestProvider.d.ts +4 -4
- package/dist/types/ts4.1/track/hls/index.d.ts +1 -1
- package/dist/types/ts4.1/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts4.1/track/mse/MseTrack.d.ts +65 -7
- package/dist/types/ts4.1/track/source/SourceObjectTrack.d.ts +2 -2
- package/dist/types/ts4.1/track/source/SourceTrack.d.ts +2 -2
- package/dist/types/ts4.1/track/source/SourceTrackBase.d.ts +7 -5
- 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/mediaSource.d.ts +5 -0
- package/dist/types/ts4.1/vinyl/ReadonlyPlaybackStreamingState.d.ts +9 -2
- package/dist/types/ts4.1/vinyl/VinylDeps.d.ts +5 -0
- package/dist/types/ts4.1/vinyl/VinylOptions.d.ts +68 -4
- package/dist/types/ts4.1/vinyl/VinylPlayer.d.ts +33 -4
- package/dist/types/ts4.1/vinyl/createVinylFactories.d.ts +56 -12
- 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/drm/DrmController.d.ts +29 -4
- package/dist/types/ts4.7/drm/DrmControllerImpl.d.ts +13 -4
- package/dist/types/ts4.7/drm/util/unpackPlayReadyChallenge.d.ts +5 -0
- package/dist/types/ts4.7/index.d.ts +151 -126
- package/dist/types/ts4.7/playback/PlaybackControllerImpl.d.ts +1 -0
- package/dist/types/ts4.7/playback/PlaybackSource.d.ts +1 -1
- package/dist/types/ts4.7/playback/ReadonlyPlaybackController.d.ts +6 -0
- package/dist/types/ts4.7/streaming/ContentStream.d.ts +8 -1
- package/dist/types/ts4.7/streaming/LoadMetric.d.ts +58 -0
- package/dist/types/ts4.7/streaming/ManifestController.d.ts +16 -1
- package/dist/types/ts4.7/streaming/ManifestControllerImpl.d.ts +43 -0
- package/dist/types/ts4.7/streaming/MediaQualityMetadata.d.ts +19 -0
- package/dist/types/ts4.7/streaming/MediaTimeline.d.ts +6 -0
- package/dist/types/ts4.7/streaming/SegmentController.d.ts +5 -0
- package/dist/types/ts4.7/streaming/SegmentControllerImpl.d.ts +12 -0
- package/dist/types/ts4.7/streaming/StreamingEventMap.d.ts +42 -1
- package/dist/types/ts4.7/streaming/abr/QualitySelectorImpl.d.ts +28 -0
- package/dist/types/ts4.7/streaming/buffering/BufferingController.d.ts +37 -0
- package/dist/types/ts4.7/streaming/buffering/MediaSourceController.d.ts +16 -11
- 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/createDefaultMediaTimelineTransformer.d.ts +4 -1
- package/dist/types/ts4.7/streaming/mediaTimelineAccessibilityFilter.d.ts +35 -0
- package/dist/types/ts4.7/streaming/mediaTimelineLanguageFilter.d.ts +24 -6
- package/dist/types/ts4.7/text/SidecarTextTrackController.d.ts +91 -0
- package/dist/types/ts4.7/text/SidecarTextTrackLoader.d.ts +60 -0
- package/dist/types/ts4.7/text/TextTrack.d.ts +129 -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/parseWebVtt.d.ts +46 -0
- package/dist/types/ts4.7/text/pickPreferredTextTrack.d.ts +14 -0
- package/dist/types/ts4.7/track/SeekRange.d.ts +9 -0
- package/dist/types/ts4.7/track/Track.d.ts +50 -7
- package/dist/types/ts4.7/track/TrackBase.d.ts +30 -29
- package/dist/types/ts4.7/track/TrackController.d.ts +102 -37
- package/dist/types/ts4.7/track/TrackFactory.d.ts +23 -3
- package/dist/types/ts4.7/track/dash/DashManifestController.d.ts +1 -40
- package/dist/types/ts4.7/track/dash/DashTrack.d.ts +4 -5
- package/dist/types/ts4.7/track/dash/createDashFactories.d.ts +39 -12
- package/dist/types/ts4.7/track/dash/createSegmentControllerFactory.d.ts +0 -5
- package/dist/types/ts4.7/track/dash/util/mpd.d.ts +10 -0
- package/dist/types/ts4.7/track/hls/HlsManifestController.d.ts +1 -25
- package/dist/types/ts4.7/track/hls/{HlsManifestProvider.d.ts → HlsManifestData.d.ts} +4 -6
- package/dist/types/ts4.7/track/hls/HlsTrack.d.ts +5 -6
- package/dist/types/ts4.7/track/hls/buildHlsMediaTimeline.d.ts +8 -1
- package/dist/types/ts4.7/track/hls/createDefaultHlsManifestTransformer.d.ts +1 -1
- package/dist/types/ts4.7/track/hls/createHlsContentTypesValue.d.ts +1 -1
- package/dist/types/ts4.7/track/hls/createHlsFactories.d.ts +40 -13
- package/dist/types/ts4.7/track/hls/createHlsManifestProvider.d.ts +6 -0
- package/dist/types/ts4.7/track/hls/createUrlHlsManifestProvider.d.ts +4 -4
- package/dist/types/ts4.7/track/hls/index.d.ts +1 -1
- package/dist/types/ts4.7/track/inferLoadOptionsFromUri.d.ts +15 -0
- package/dist/types/ts4.7/track/mse/MseTrack.d.ts +66 -8
- package/dist/types/ts4.7/track/source/SourceObjectTrack.d.ts +2 -2
- package/dist/types/ts4.7/track/source/SourceTrack.d.ts +2 -2
- package/dist/types/ts4.7/track/source/SourceTrackBase.d.ts +7 -5
- 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/mediaSource.d.ts +5 -0
- package/dist/types/ts4.7/vinyl/ReadonlyPlaybackStreamingState.d.ts +9 -2
- package/dist/types/ts4.7/vinyl/VinylDeps.d.ts +5 -0
- package/dist/types/ts4.7/vinyl/VinylOptions.d.ts +68 -4
- package/dist/types/ts4.7/vinyl/VinylPlayer.d.ts +63 -4
- package/dist/types/ts4.7/vinyl/createVinylFactories.d.ts +55 -12
- 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 +205 -4
- package/dist/unit/types/current/index.d.ts +117 -98
- package/dist/unit/types/current/index.d.ts.map +1 -1
- package/dist/unit/types/current/index.js +117 -98
- package/dist/unit/types/current/playback/PlaybackControllerImpl.test.js +92 -3
- package/dist/unit/types/current/streaming/ContentStream.test.js +11 -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/MediaTimeline.test.js +2 -0
- package/dist/unit/types/current/streaming/MseTrack.test.js +478 -14
- package/dist/unit/types/current/streaming/SegmentControllerImpl.test.js +66 -0
- package/dist/unit/types/current/streaming/StreamingEventMap.test.js +2 -2
- package/dist/unit/types/current/streaming/abr/QualitySelectorImpl.test.js +110 -0
- package/dist/unit/types/current/streaming/buffering/BufferingController.test.js +123 -21
- package/dist/unit/types/current/streaming/buffering/MediaSourceController.test.js +37 -10
- package/dist/unit/types/current/streaming/buffering/SourceBufferController.test.js +4 -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/createDefaultMediaTimelineTransformer.test.js +144 -2
- 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/streaming/mediaTimelineFilter.test.js +9 -0
- package/dist/unit/types/current/streaming/mediaTimelineLanguageFilter.test.js +92 -3
- 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 +587 -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 +336 -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/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 +212 -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 +67 -0
- package/dist/unit/types/current/track/TrackBase.test.js +50 -5
- package/dist/unit/types/current/track/TrackController.test.js +712 -109
- package/dist/unit/types/current/track/TrackFactory.test.js +13 -25
- package/dist/unit/types/current/track/dash/createDashContentStreamFactories.test.js +1 -0
- package/dist/unit/types/current/track/dash/createDashFactories.test.js +63 -2
- package/dist/unit/types/current/track/dash/createSegmentControllerFactory.test.js +1 -0
- package/dist/unit/types/current/track/dash/util/mpd.test.js +24 -1
- package/dist/unit/types/current/track/hls/HlsManifestController.test.js +4 -4
- package/dist/unit/types/current/track/hls/HlsMediaQualityMetadataResolver.test.js +4 -2
- package/dist/unit/types/current/track/hls/buildHlsMediaTimeline.test.js +260 -14
- package/dist/unit/types/current/track/hls/createHlsContentStreamFactories.test.js +1 -0
- package/dist/unit/types/current/track/hls/createHlsFactories.test.js +182 -4
- package/dist/unit/types/current/track/hls/createUrlHlsManifestProvider.test.js +19 -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/track/source/SourceTrack.test.js +5 -0
- package/dist/unit/types/current/track/source/SourceTrackBase.test.js +24 -3
- 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/mediaSource.test.js +6 -0
- package/dist/unit/types/current/vinyl/VinylPlayer.test.js +177 -75
- 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 +263 -0
- package/dist/vinylTestUtil/index.js +2393 -2232
- package/dist/vinylTestUtil/index.js.map +4 -4
- package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts +14 -0
- package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/assets/vinylTestAssets.js +49 -30
- package/dist/vinylTestUtil/types/current/index.d.ts +53 -51
- package/dist/vinylTestUtil/types/current/index.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/index.js +53 -51
- 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/MockDashManifestController.d.ts +8 -1
- package/dist/vinylTestUtil/types/current/mock/dash/MockDashManifestController.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/dash/MockDashManifestController.js +15 -0
- package/dist/vinylTestUtil/types/current/mock/dash/mockDashManifest.d.ts +12 -12
- package/dist/vinylTestUtil/types/current/mock/drm/MockDrmController.d.ts +2 -2
- package/dist/vinylTestUtil/types/current/mock/drm/MockDrmController.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/hls/MockHlsManifestController.d.ts +7 -1
- package/dist/vinylTestUtil/types/current/mock/hls/MockHlsManifestController.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/hls/MockHlsManifestController.js +12 -0
- package/dist/vinylTestUtil/types/current/mock/hls/mockHlsManifest.d.ts +3 -3
- package/dist/vinylTestUtil/types/current/mock/hls/mockHlsManifest.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/hls/mockHlsManifest.js +1 -0
- package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts +8 -0
- package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/player/MockVinylPlayerDependencies.js +17 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts +2 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/MockContentStream.js +1 -0
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts +1 -0
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockBufferingController.js +1 -0
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.d.ts +2 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/streaming/buffering/MockMediaSourceController.js +2 -1
- 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/mock/track/MockTrack.d.ts +13 -4
- package/dist/vinylTestUtil/types/current/mock/track/MockTrack.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/track/MockTrack.js +11 -0
- package/dist/vinylTestUtil/types/current/mock/track/MockTrackController.d.ts +3 -2
- package/dist/vinylTestUtil/types/current/mock/track/MockTrackController.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/track/MockTrackController.js +2 -1
- package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts +6 -0
- package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/track/dash/createMockDashDependencies.js +8 -1
- package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts +4 -0
- package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/mock/track/hls/createMockHlsDependencies.js +6 -1
- package/dist/vinylTestUtil/types/current/player/createVinylSuite.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/player/createVinylSuite.js +18 -7
- package/dist/vinylTestUtil/types/current/tsconfig.tsbuildinfo +1 -1
- package/dist/vinylTestUtil/types/current/util/playback/eventPromises.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/util/playback/eventPromises.js +1 -1
- package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/util/playback/expectTrackCanSeek.js +5 -2
- package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlays.js +3 -3
- package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlaysUntil.d.ts.map +1 -1
- package/dist/vinylTestUtil/types/current/util/playback/expectTrackPlaysUntil.js +11 -7
- package/dist/vinylTestUtil/types/ts3.7/assets/vinylTestAssets.d.ts +14 -0
- package/dist/vinylTestUtil/types/ts3.7/index.d.ts +53 -51
- package/dist/vinylTestUtil/types/ts3.7/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts3.7/mock/dash/MockDashManifestController.d.ts +8 -1
- package/dist/vinylTestUtil/types/ts3.7/mock/dash/mockDashManifest.d.ts +12 -12
- package/dist/vinylTestUtil/types/ts3.7/mock/drm/MockDrmController.d.ts +2 -2
- package/dist/vinylTestUtil/types/ts3.7/mock/hls/MockHlsManifestController.d.ts +7 -1
- package/dist/vinylTestUtil/types/ts3.7/mock/hls/mockHlsManifest.d.ts +3 -3
- package/dist/vinylTestUtil/types/ts3.7/mock/player/MockVinylPlayerDependencies.d.ts +8 -0
- package/dist/vinylTestUtil/types/ts3.7/mock/streaming/MockContentStream.d.ts +2 -1
- package/dist/vinylTestUtil/types/ts3.7/mock/streaming/buffering/MockBufferingController.d.ts +1 -0
- package/dist/vinylTestUtil/types/ts3.7/mock/streaming/buffering/MockMediaSourceController.d.ts +2 -1
- package/dist/vinylTestUtil/types/ts3.7/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/ts3.7/mock/track/MockTrack.d.ts +13 -4
- package/dist/vinylTestUtil/types/ts3.7/mock/track/MockTrackController.d.ts +3 -2
- package/dist/vinylTestUtil/types/ts3.7/mock/track/dash/createMockDashDependencies.d.ts +6 -0
- package/dist/vinylTestUtil/types/ts3.7/mock/track/hls/createMockHlsDependencies.d.ts +4 -0
- package/dist/vinylTestUtil/types/ts4.1/assets/vinylTestAssets.d.ts +14 -0
- package/dist/vinylTestUtil/types/ts4.1/index.d.ts +53 -51
- package/dist/vinylTestUtil/types/ts4.1/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/dash/MockDashManifestController.d.ts +8 -1
- package/dist/vinylTestUtil/types/ts4.1/mock/dash/mockDashManifest.d.ts +12 -12
- package/dist/vinylTestUtil/types/ts4.1/mock/drm/MockDrmController.d.ts +2 -2
- package/dist/vinylTestUtil/types/ts4.1/mock/hls/MockHlsManifestController.d.ts +7 -1
- package/dist/vinylTestUtil/types/ts4.1/mock/hls/mockHlsManifest.d.ts +3 -3
- package/dist/vinylTestUtil/types/ts4.1/mock/player/MockVinylPlayerDependencies.d.ts +8 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/streaming/MockContentStream.d.ts +2 -1
- package/dist/vinylTestUtil/types/ts4.1/mock/streaming/buffering/MockBufferingController.d.ts +1 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/streaming/buffering/MockMediaSourceController.d.ts +2 -1
- package/dist/vinylTestUtil/types/ts4.1/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/track/MockTrack.d.ts +13 -4
- package/dist/vinylTestUtil/types/ts4.1/mock/track/MockTrackController.d.ts +3 -2
- package/dist/vinylTestUtil/types/ts4.1/mock/track/dash/createMockDashDependencies.d.ts +6 -0
- package/dist/vinylTestUtil/types/ts4.1/mock/track/hls/createMockHlsDependencies.d.ts +4 -0
- package/dist/vinylTestUtil/types/ts4.7/assets/vinylTestAssets.d.ts +14 -0
- package/dist/vinylTestUtil/types/ts4.7/index.d.ts +53 -51
- package/dist/vinylTestUtil/types/ts4.7/mock/ad/MockAdController.d.ts +15 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/dash/MockDashManifestController.d.ts +8 -1
- package/dist/vinylTestUtil/types/ts4.7/mock/dash/mockDashManifest.d.ts +12 -12
- package/dist/vinylTestUtil/types/ts4.7/mock/drm/MockDrmController.d.ts +2 -2
- package/dist/vinylTestUtil/types/ts4.7/mock/hls/MockHlsManifestController.d.ts +7 -1
- package/dist/vinylTestUtil/types/ts4.7/mock/hls/mockHlsManifest.d.ts +3 -3
- package/dist/vinylTestUtil/types/ts4.7/mock/player/MockVinylPlayerDependencies.d.ts +8 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/streaming/MockContentStream.d.ts +2 -1
- package/dist/vinylTestUtil/types/ts4.7/mock/streaming/buffering/MockBufferingController.d.ts +1 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/streaming/buffering/MockMediaSourceController.d.ts +2 -1
- package/dist/vinylTestUtil/types/ts4.7/mock/text/MockTextTrackController.d.ts +10 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/track/MockTrack.d.ts +13 -4
- package/dist/vinylTestUtil/types/ts4.7/mock/track/MockTrackController.d.ts +3 -2
- package/dist/vinylTestUtil/types/ts4.7/mock/track/dash/createMockDashDependencies.d.ts +6 -0
- package/dist/vinylTestUtil/types/ts4.7/mock/track/hls/createMockHlsDependencies.d.ts +4 -0
- package/docs/ADS.md +264 -0
- package/docs/USAGE.md +142 -9
- package/package.json +18 -18
- package/dist/types/current/track/hls/HlsManifestProvider.d.ts.map +0 -1
- package/dist/unit/types/current/track/dash/DashManifestController.test.d.ts +0 -2
- package/dist/unit/types/current/track/dash/DashManifestController.test.d.ts.map +0 -1
- package/dist/unit/types/current/track/dash/DashManifestController.test.js +0 -186
- /package/dist/types/current/{track/hls/HlsManifestProvider.js → ad/AdBreakInfo.js} +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import { closeTo, createDisposer, DomEventHost, ErrorLevel, ErrorOrigin, EventHostImpl, isSilentError, logDebug, ReportableError, toJson, toLowerCase, } from '@amazon/vinyl-util';
|
|
5
|
+
import { closeTo, createDisposer, DomEventHost, ErrorLevel, ErrorOrigin, EventHostImpl, IllegalStateError, isSilentError, logDebug, logWarn, ReportableError, toJson, toLowerCase, } from '@amazon/vinyl-util';
|
|
6
6
|
import { LIVE_DURATION } from '../../playback/PlaybackController';
|
|
7
7
|
import { nextSourceBufferIdle } from '../../util/media/sourceBuffer';
|
|
8
8
|
/**
|
|
@@ -17,8 +17,9 @@ export class MediaSourceControllerImpl extends EventHostImpl {
|
|
|
17
17
|
return 'MediaSourceControllerImpl';
|
|
18
18
|
}
|
|
19
19
|
sourceBuffers = new Set();
|
|
20
|
-
mediaSource;
|
|
21
|
-
|
|
20
|
+
mediaSource = null;
|
|
21
|
+
objectUrl = null;
|
|
22
|
+
activateDisposer = null;
|
|
22
23
|
contentTypes = null;
|
|
23
24
|
durationSet = false;
|
|
24
25
|
/**
|
|
@@ -29,17 +30,68 @@ export class MediaSourceControllerImpl extends EventHostImpl {
|
|
|
29
30
|
constructor(deps) {
|
|
30
31
|
super();
|
|
31
32
|
this.deps = deps;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
this.
|
|
33
|
+
}
|
|
34
|
+
get active() {
|
|
35
|
+
return this.activateDisposer != null;
|
|
36
|
+
}
|
|
37
|
+
activate() {
|
|
38
|
+
this.activateDisposer = createDisposer();
|
|
39
|
+
const add = this.activateDisposer.add;
|
|
40
|
+
const mediaSource = this.deps.mediaSourceFactory();
|
|
41
|
+
this.mediaSource = mediaSource;
|
|
42
|
+
const domEvents = add(new DomEventHost(mediaSource));
|
|
43
|
+
domEvents.on('sourceopen', () => {
|
|
44
|
+
this.refreshDuration().catch(this.errorHandler);
|
|
45
|
+
});
|
|
46
|
+
domEvents.on('sourceclose', () => {
|
|
47
|
+
this.durationSet = false;
|
|
48
|
+
++this.durationToken;
|
|
49
|
+
});
|
|
50
|
+
// Redispatch events from the media source:
|
|
51
|
+
for (const key of [
|
|
52
|
+
'sourceClose',
|
|
53
|
+
'sourceOpen',
|
|
54
|
+
'sourceEnded',
|
|
55
|
+
]) {
|
|
56
|
+
domEvents.on(toLowerCase(key), () => this.dispatch(key, {}));
|
|
57
|
+
}
|
|
58
|
+
add(this.deps.mediaTimelineTransformed.onData(() => {
|
|
59
|
+
this.refreshDuration().catch(this.errorHandler);
|
|
60
|
+
}));
|
|
61
|
+
// React to content type changes (fires immediately with the current
|
|
62
|
+
// value and again whenever the timeline reveals new content types).
|
|
63
|
+
add(this.deps.contentTypesValue.onData((contentTypesPromise) => {
|
|
64
|
+
// The pending content types are unknown until the new promise
|
|
65
|
+
// resolves, so the controller is not ready to append until then.
|
|
35
66
|
this.contentTypes = null;
|
|
36
|
-
|
|
67
|
+
contentTypesPromise
|
|
37
68
|
.then((contentTypes) => {
|
|
69
|
+
if (this.deps.contentTypesValue.value !==
|
|
70
|
+
contentTypesPromise)
|
|
71
|
+
return; // Stale
|
|
38
72
|
this.contentTypes = contentTypes;
|
|
39
73
|
this.checkReady();
|
|
40
74
|
})
|
|
41
75
|
.catch(this.errorHandler);
|
|
42
76
|
}));
|
|
77
|
+
this.objectUrl = URL.createObjectURL(mediaSource);
|
|
78
|
+
return this.objectUrl;
|
|
79
|
+
}
|
|
80
|
+
deactivate() {
|
|
81
|
+
if (!this.active)
|
|
82
|
+
return;
|
|
83
|
+
this.activateDisposer.dispose();
|
|
84
|
+
this.activateDisposer = null;
|
|
85
|
+
// Invalidate any in-flight refreshDuration so its continuation returns
|
|
86
|
+
// at the token check rather than setting duration (and logging) after
|
|
87
|
+
// deactivation.
|
|
88
|
+
++this.durationToken;
|
|
89
|
+
try {
|
|
90
|
+
URL.revokeObjectURL(this.objectUrl);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
logWarn(this, 'error revoking object url', error);
|
|
94
|
+
}
|
|
43
95
|
}
|
|
44
96
|
get sourceBufferCount() {
|
|
45
97
|
return this.sourceBuffers.size;
|
|
@@ -52,31 +104,6 @@ export class MediaSourceControllerImpl extends EventHostImpl {
|
|
|
52
104
|
error,
|
|
53
105
|
});
|
|
54
106
|
};
|
|
55
|
-
/**
|
|
56
|
-
* Subscription to mediaTimelineTransformed; only attached while the media source is open
|
|
57
|
-
* so the timeline pipeline isn't forced to evaluate before the source has opened.
|
|
58
|
-
*/
|
|
59
|
-
timelineSub = null;
|
|
60
|
-
initializeEvents() {
|
|
61
|
-
const domEvents = new DomEventHost(this.mediaSource);
|
|
62
|
-
for (const key of [
|
|
63
|
-
'sourceClose',
|
|
64
|
-
'sourceOpen',
|
|
65
|
-
'sourceEnded',
|
|
66
|
-
]) {
|
|
67
|
-
domEvents.on(toLowerCase(key), () => this.dispatch(key, {}));
|
|
68
|
-
}
|
|
69
|
-
this.timelineSub = this.deps.mediaTimelineTransformed.onData(() => {
|
|
70
|
-
this.refreshDuration().catch(this.errorHandler);
|
|
71
|
-
});
|
|
72
|
-
this.on('sourceOpen', () => {
|
|
73
|
-
this.refreshDuration().catch(this.errorHandler);
|
|
74
|
-
});
|
|
75
|
-
this.on('sourceClose', () => {
|
|
76
|
-
this.durationSet = false;
|
|
77
|
-
++this.durationToken;
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
107
|
/**
|
|
81
108
|
* Sets the duration on the media source from the current media timeline.
|
|
82
109
|
* Live streams use LIVE_DURATION since not all browsers support +Infinity duration.
|
|
@@ -85,6 +112,7 @@ export class MediaSourceControllerImpl extends EventHostImpl {
|
|
|
85
112
|
* so we wait for all tracked source buffers to be idle first.
|
|
86
113
|
*/
|
|
87
114
|
async refreshDuration() {
|
|
115
|
+
const mediaSource = this.mediaSource;
|
|
88
116
|
const timelinePromise = this.deps.mediaTimelineTransformed.value;
|
|
89
117
|
const token = ++this.durationToken;
|
|
90
118
|
const timeline = await timelinePromise;
|
|
@@ -92,18 +120,21 @@ export class MediaSourceControllerImpl extends EventHostImpl {
|
|
|
92
120
|
const value = duration === Infinity ? LIVE_DURATION : duration + DURATION_PADDING;
|
|
93
121
|
await Promise.all(Array.from(this.sourceBuffers, nextSourceBufferIdle));
|
|
94
122
|
if (token !== this.durationToken ||
|
|
95
|
-
|
|
96
|
-
closeTo(
|
|
123
|
+
mediaSource.readyState !== 'open' ||
|
|
124
|
+
closeTo(mediaSource.duration, value, 0.1))
|
|
97
125
|
return;
|
|
98
126
|
logDebug(this, `setting duration: ${value}`);
|
|
99
|
-
|
|
127
|
+
mediaSource.duration = value;
|
|
100
128
|
this.durationSet = true;
|
|
101
129
|
this.checkReady();
|
|
102
130
|
}
|
|
103
131
|
get readyState() {
|
|
104
|
-
return this.mediaSource
|
|
132
|
+
return this.mediaSource?.readyState ?? 'closed';
|
|
105
133
|
}
|
|
106
134
|
createSourceBuffer(contentType, mimeType) {
|
|
135
|
+
if (!this.active) {
|
|
136
|
+
throw new IllegalStateError('cannot create a source buffer when not active');
|
|
137
|
+
}
|
|
107
138
|
const mediaSource = this.mediaSource;
|
|
108
139
|
logDebug(this, 'create source buffer', contentType, mimeType, mediaSource.readyState, 'sourceBufferCount:', this.sourceBufferCount);
|
|
109
140
|
let sourceBuffer;
|
|
@@ -116,16 +147,15 @@ export class MediaSourceControllerImpl extends EventHostImpl {
|
|
|
116
147
|
sourceBuffer.mode = 'sequence';
|
|
117
148
|
this.sourceBuffers.add(sourceBuffer);
|
|
118
149
|
this.checkReady();
|
|
119
|
-
const dispose = () => {
|
|
120
|
-
logDebug(this, 'removing source buffer from media source', mediaSource.readyState);
|
|
121
|
-
if (mediaSource.readyState !== 'closed') {
|
|
122
|
-
mediaSource.removeSourceBuffer(sourceBuffer);
|
|
123
|
-
}
|
|
124
|
-
this.sourceBuffers.delete(sourceBuffer);
|
|
125
|
-
};
|
|
126
150
|
return {
|
|
127
151
|
value: sourceBuffer,
|
|
128
|
-
dispose
|
|
152
|
+
dispose: () => {
|
|
153
|
+
logDebug(this, 'removing source buffer from media source', mediaSource.readyState);
|
|
154
|
+
if (mediaSource.readyState !== 'closed') {
|
|
155
|
+
mediaSource.removeSourceBuffer(sourceBuffer);
|
|
156
|
+
}
|
|
157
|
+
this.sourceBuffers.delete(sourceBuffer);
|
|
158
|
+
},
|
|
129
159
|
};
|
|
130
160
|
}
|
|
131
161
|
/**
|
|
@@ -138,10 +168,7 @@ export class MediaSourceControllerImpl extends EventHostImpl {
|
|
|
138
168
|
};
|
|
139
169
|
endOfStream(error) {
|
|
140
170
|
logDebug(this, 'endOfStream, error:', error);
|
|
141
|
-
this.mediaSource
|
|
142
|
-
}
|
|
143
|
-
createUrl() {
|
|
144
|
-
return URL.createObjectURL(this.mediaSource);
|
|
171
|
+
this.mediaSource?.endOfStream(error);
|
|
145
172
|
}
|
|
146
173
|
get readyToAppend() {
|
|
147
174
|
return (this.durationSet &&
|
|
@@ -149,9 +176,7 @@ export class MediaSourceControllerImpl extends EventHostImpl {
|
|
|
149
176
|
}
|
|
150
177
|
dispose() {
|
|
151
178
|
super.dispose();
|
|
152
|
-
this.
|
|
153
|
-
this.timelineSub = null;
|
|
154
|
-
this.disposer.dispose();
|
|
179
|
+
this.deactivate();
|
|
155
180
|
}
|
|
156
181
|
}
|
|
157
182
|
export class MediaSourceError extends ReportableError {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SourceBufferController.d.ts","sourceRoot":"","sources":["../../../../../src/streaming/buffering/SourceBufferController.ts"],"names":[],"mappings":"AAKA,OAAO,EAIH,KAAK,UAAU,EAKf,KAAK,SAAS,EAEd,KAAK,cAAc,EACnB,KAAK,IAAI,EACZ,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EACR,qBAAqB,EAExB,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAG1D,eAAO,MAAM,0BAA0B,OAAO,CAAA;AAC9C,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAG5C,eAAO,MAAM,uBAAuB,KAAK,CAAA;AAEzC,MAAM,MAAM,6BAA6B,GAAG,MAAM,sBAAsB,CAAA;AAExE,MAAM,WAAW,sBAAuB,SAAQ,UAAU;IACtD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IAEjC;;OAEG;IACH,MAAM,IAAI,OAAO,CAAA;IAEjB;;;OAGG;IACH,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAE5C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9D;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAExC;;OAEG;IACH,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE1D;;;OAGG;IACH,eAAe,CACX,iBAAiB,CAAC,EAAE,MAAM,EAC1B,eAAe,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhB;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzD;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED,MAAM,WAAW,8BAA8B;IAC3C;;OAEG;IACH,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAA;CACxD;AAED;;;GAGG;AACH,qBAAa,0BACT,YAAW,SAAS,EAAE,sBAAsB,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"SourceBufferController.d.ts","sourceRoot":"","sources":["../../../../../src/streaming/buffering/SourceBufferController.ts"],"names":[],"mappings":"AAKA,OAAO,EAIH,KAAK,UAAU,EAKf,KAAK,SAAS,EAEd,KAAK,cAAc,EACnB,KAAK,IAAI,EACZ,MAAM,oBAAoB,CAAA;AAG3B,OAAO,KAAK,EACR,qBAAqB,EAExB,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAG1D,eAAO,MAAM,0BAA0B,OAAO,CAAA;AAC9C,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAG5C,eAAO,MAAM,uBAAuB,KAAK,CAAA;AAEzC,MAAM,MAAM,6BAA6B,GAAG,MAAM,sBAAsB,CAAA;AAExE,MAAM,WAAW,sBAAuB,SAAQ,UAAU;IACtD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IAEjC;;OAEG;IACH,MAAM,IAAI,OAAO,CAAA;IAEjB;;;OAGG;IACH,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAE5C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9D;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAExC;;OAEG;IACH,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE1D;;;OAGG;IACH,eAAe,CACX,iBAAiB,CAAC,EAAE,MAAM,EAC1B,eAAe,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhB;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEzD;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED,MAAM,WAAW,8BAA8B;IAC3C;;OAEG;IACH,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAA;CACxD;AAED;;;GAGG;AACH,qBAAa,0BACT,YAAW,SAAS,EAAE,sBAAsB,EAAE,UAAU;IAkBpD,QAAQ,CAAC,WAAW,EAAE,WAAW;IAhBrC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IAED,OAAO,CAAC,eAAe,CAA+B;IAEtD,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,KAAK,CAAoB;IAIjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAuB;gBAGzD,IAAI,EAAE,8BAA8B,EAC3B,WAAW,EAAE,WAAW;IAOrC,OAAO,KAAK,YAAY,GAEvB;IAED,OAAO,CAAC,SAAS,CAA8B;IAC/C,IAAI,QAAQ,IAAI,cAAc,CAS7B;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB,CAEzB;IAED,MAAM,IAAI,OAAO;IAIjB,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAItC,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC9D,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAe9C,kBAAkB,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1D,eAAe,CACX,iBAAiB,GAAE,MAAU,EAC7B,eAAe,GAAE,MAAiC,GACnD,OAAO,CAAC,IAAI,CAAC;IA4BhB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAC4D;IAEtE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,OAAO;CAMV"}
|
|
@@ -17,15 +17,18 @@ export const READY_TO_APPEND_TIMEOUT = 30;
|
|
|
17
17
|
export class SourceBufferControllerImpl {
|
|
18
18
|
contentType;
|
|
19
19
|
get [Symbol.toStringTag]() {
|
|
20
|
-
return
|
|
20
|
+
return `SourceBuffer_${this.contentType}`;
|
|
21
21
|
}
|
|
22
22
|
sourceBufferRef = null;
|
|
23
23
|
mimeType = null;
|
|
24
24
|
queue = createTaskQueue();
|
|
25
|
-
|
|
25
|
+
// Assigned in the constructor body: a field initializer runs before the
|
|
26
|
+
// contentType param-property, so it would capture `undefined`.
|
|
27
|
+
logPrefix;
|
|
26
28
|
mediaSourceController;
|
|
27
29
|
constructor(deps, contentType) {
|
|
28
30
|
this.contentType = contentType;
|
|
31
|
+
this.logPrefix = createLogPrefix(`SourceBuffer_${contentType}`);
|
|
29
32
|
logDebug(this, 'constructed, contentType:', contentType);
|
|
30
33
|
this.mediaSourceController = deps.mediaSourceController;
|
|
31
34
|
}
|
|
@@ -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
|
+
}
|
|
@@ -2,12 +2,15 @@ import type { ObservableValue } from '@amazon/vinyl-observable';
|
|
|
2
2
|
import type { Capabilities } from '../client/Capabilities';
|
|
3
3
|
import type { DrmController } from '../drm/DrmController';
|
|
4
4
|
import type { MediaTimeline } from './MediaTimeline';
|
|
5
|
+
import type { CodecOverrides } from '../util/media/codecOverrides';
|
|
5
6
|
export interface DefaultMediaTimelineTransformerDeps {
|
|
6
7
|
readonly capabilities: Capabilities;
|
|
7
8
|
readonly drmController: DrmController;
|
|
8
9
|
readonly mediaTimeline: ObservableValue<Promise<MediaTimeline>>;
|
|
9
10
|
readonly options: ObservableValue<{
|
|
10
|
-
readonly preferredAudioLanguage: string | null;
|
|
11
|
+
readonly preferredAudioLanguage: string | readonly string[] | null;
|
|
12
|
+
readonly preferDescriptiveAudio?: boolean;
|
|
13
|
+
readonly codecOverrides?: CodecOverrides;
|
|
11
14
|
}>;
|
|
12
15
|
}
|
|
13
16
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createDefaultMediaTimelineTransformer.d.ts","sourceRoot":"","sources":["../../../../src/streaming/createDefaultMediaTimelineTransformer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"createDefaultMediaTimelineTransformer.d.ts","sourceRoot":"","sources":["../../../../src/streaming/createDefaultMediaTimelineTransformer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAuBpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAGlE,MAAM,WAAW,mCAAmC;IAChD,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAA;IACrC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAA;IAC/D,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;QAC9B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;QAClE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;QACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAA;KAC3C,CAAC,CAAA;CACL;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CACjD,IAAI,EAAE,mCAAmC,GAC1C,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CA6EzC"}
|
|
@@ -5,25 +5,56 @@
|
|
|
5
5
|
import { combineData } from '@amazon/vinyl-observable';
|
|
6
6
|
import { filterTimelineQualities, filterTimelineQualitiesAsync, } from './mediaTimelineFilter';
|
|
7
7
|
import { createLanguageFilter } from './mediaTimelineLanguageFilter';
|
|
8
|
+
import { createAudioDescriptionFilter, throwNoPlayableAudio, } from './mediaTimelineAccessibilityFilter';
|
|
8
9
|
import { canPlayMimeType, throwMimeTypesUnsupported, } from '../track/filters/resourceTypeFilter';
|
|
9
10
|
import { canPlayKeySystem, throwKeySystemsUnsupported, } from '../track/filters/keySystemFilter';
|
|
10
11
|
import { supportsAudioSamplingRate, throwSamplingRatesUnsupported, } from '../track/filters/sampleRateFilter';
|
|
11
12
|
import { throwLanguagesUnsupported } from '../track/filters/languageFilter';
|
|
13
|
+
import { resolveCodecOverride } from '../util/media/codecOverrides';
|
|
12
14
|
/**
|
|
13
15
|
* The default media timeline transformer filters out unplayable qualities
|
|
14
16
|
* and applies language preferences. Shared by Dash and HLS.
|
|
15
17
|
*/
|
|
16
18
|
export function createDefaultMediaTimelineTransformer(deps) {
|
|
19
|
+
/**
|
|
20
|
+
* Applies explicit codec overrides on top of browser support detection.
|
|
21
|
+
* An `'allow'`/`'deny'` override for a quality's codec supersedes
|
|
22
|
+
* {@link canPlayMimeType}; otherwise the browser's support check is used.
|
|
23
|
+
*/
|
|
24
|
+
function canPlayWithOverrides(quality, codecOverrides) {
|
|
25
|
+
if (quality.mimeType) {
|
|
26
|
+
const override = resolveCodecOverride(quality.mimeType, codecOverrides);
|
|
27
|
+
if (override === 'allow')
|
|
28
|
+
return true;
|
|
29
|
+
if (override === 'deny')
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return canPlayMimeType(deps, quality);
|
|
33
|
+
}
|
|
17
34
|
async function transformTimeline(timeline) {
|
|
18
|
-
|
|
35
|
+
const codecOverrides = deps.options.value.codecOverrides;
|
|
36
|
+
let t = filterTimelineQualities((quality) => canPlayWithOverrides(quality, codecOverrides), throwMimeTypesUnsupported, timeline);
|
|
19
37
|
t = await filterTimelineQualitiesAsync((quality) => canPlayKeySystem(deps, quality), throwKeySystemsUnsupported, t);
|
|
20
38
|
t = filterTimelineQualities((quality, index, array) => supportsAudioSamplingRate(deps, quality, index, array), throwSamplingRatesUnsupported, t);
|
|
39
|
+
// Resolve audio-description eligibility BEFORE the language filter.
|
|
40
|
+
// Description renditions are an accessibility opt-in, not general audio,
|
|
41
|
+
// so they must be gated out (unless opted in via preferDescriptiveAudio)
|
|
42
|
+
// before language selection runs. Otherwise a description rendition
|
|
43
|
+
// whose language tag happens to score higher than the main audio's
|
|
44
|
+
// (e.g. a described 'en' beating a main 'en-US') could win language
|
|
45
|
+
// selection and evict the main audio, stranding the listener on
|
|
46
|
+
// described audio they never opted into. With this gate first, the
|
|
47
|
+
// language filter only ever picks among eligible (main, or opted-in
|
|
48
|
+
// description) renditions.
|
|
49
|
+
t = filterTimelineQualities(createAudioDescriptionFilter(deps.options.value.preferDescriptiveAudio ?? false), throwNoPlayableAudio, t);
|
|
21
50
|
t = filterTimelineQualities(createLanguageFilter(deps.options.value.preferredAudioLanguage, 'audio'), throwLanguagesUnsupported, t);
|
|
22
51
|
return t;
|
|
23
52
|
}
|
|
24
53
|
return combineData({
|
|
25
54
|
timeline: deps.mediaTimeline,
|
|
26
55
|
preferredAudioLanguage: deps.options.pick('preferredAudioLanguage'),
|
|
56
|
+
preferDescriptiveAudio: deps.options.pick('preferDescriptiveAudio'),
|
|
57
|
+
codecOverrides: deps.options.pick('codecOverrides'),
|
|
27
58
|
}).map(async ({ timeline }) => {
|
|
28
59
|
return transformTimeline(await timeline);
|
|
29
60
|
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { MediaQualityMetadata } from './MediaQualityMetadata';
|
|
2
|
+
import type { FilterPredicate } from '@amazon/vinyl-util';
|
|
3
|
+
/**
|
|
4
|
+
* Thrown if the audio-description filter ever emptied a period's audio. The
|
|
5
|
+
* filter keeps at least one audio rendition per period by design, so this is a
|
|
6
|
+
* defensive guard rather than an expected path.
|
|
7
|
+
*/
|
|
8
|
+
export declare function throwNoPlayableAudio(): never;
|
|
9
|
+
/**
|
|
10
|
+
* Characteristics that mark an audio rendition as an audio description (a.k.a.
|
|
11
|
+
* described video / DVS) — narration of on-screen action for viewers who cannot
|
|
12
|
+
* see it. HLS signals this with the `public.accessibility.describes-video`
|
|
13
|
+
* CHARACTERISTIC; DASH with a `description` Role. Such renditions must not be
|
|
14
|
+
* chosen as the default audio; they are an accessibility opt-in.
|
|
15
|
+
*/
|
|
16
|
+
export declare const AUDIO_DESCRIPTION_CHARACTERISTICS: readonly string[];
|
|
17
|
+
/**
|
|
18
|
+
* Whether an audio quality is an audio-description rendition.
|
|
19
|
+
*/
|
|
20
|
+
export declare function isAudioDescription(quality: MediaQualityMetadata): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Creates a filter that keeps audio-description renditions out of (or, when
|
|
23
|
+
* opted in, restricts audio to) the audio selection.
|
|
24
|
+
*
|
|
25
|
+
* - `preferDescription: false` (default): drop audio-description renditions
|
|
26
|
+
* from each period *when a non-description audio alternative exists*, so the
|
|
27
|
+
* main audio is chosen by default instead of the description track. If a
|
|
28
|
+
* period has only description audio, it is kept (playback is never stranded).
|
|
29
|
+
* - `preferDescription: true`: keep only description renditions when the period
|
|
30
|
+
* has any; otherwise keep all (again, never strand playback).
|
|
31
|
+
*
|
|
32
|
+
* Non-audio qualities are always kept.
|
|
33
|
+
*/
|
|
34
|
+
export declare function createAudioDescriptionFilter(preferDescription: boolean): FilterPredicate<MediaQualityMetadata>;
|
|
35
|
+
//# sourceMappingURL=mediaTimelineAccessibilityFilter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaTimelineAccessibilityFilter.d.ts","sourceRoot":"","sources":["../../../../src/streaming/mediaTimelineAccessibilityFilter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGzD;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,KAAK,CAE5C;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iCAAiC,EAAE,SAAS,MAAM,EAG9D,CAAA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAIzE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CACxC,iBAAiB,EAAE,OAAO,GAC3B,eAAe,CAAC,oBAAoB,CAAC,CA8BvC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { MediaUnsupportedError, memoize } from '@amazon/vinyl-util';
|
|
6
|
+
/**
|
|
7
|
+
* Thrown if the audio-description filter ever emptied a period's audio. The
|
|
8
|
+
* filter keeps at least one audio rendition per period by design, so this is a
|
|
9
|
+
* defensive guard rather than an expected path.
|
|
10
|
+
*/
|
|
11
|
+
export function throwNoPlayableAudio() {
|
|
12
|
+
throw new MediaUnsupportedError('No playable audio rendition', 'audio');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Characteristics that mark an audio rendition as an audio description (a.k.a.
|
|
16
|
+
* described video / DVS) — narration of on-screen action for viewers who cannot
|
|
17
|
+
* see it. HLS signals this with the `public.accessibility.describes-video`
|
|
18
|
+
* CHARACTERISTIC; DASH with a `description` Role. Such renditions must not be
|
|
19
|
+
* chosen as the default audio; they are an accessibility opt-in.
|
|
20
|
+
*/
|
|
21
|
+
export const AUDIO_DESCRIPTION_CHARACTERISTICS = [
|
|
22
|
+
'public.accessibility.describes-video',
|
|
23
|
+
'description',
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Whether an audio quality is an audio-description rendition.
|
|
27
|
+
*/
|
|
28
|
+
export function isAudioDescription(quality) {
|
|
29
|
+
return quality.characteristics.some((c) => AUDIO_DESCRIPTION_CHARACTERISTICS.includes(c));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Creates a filter that keeps audio-description renditions out of (or, when
|
|
33
|
+
* opted in, restricts audio to) the audio selection.
|
|
34
|
+
*
|
|
35
|
+
* - `preferDescription: false` (default): drop audio-description renditions
|
|
36
|
+
* from each period *when a non-description audio alternative exists*, so the
|
|
37
|
+
* main audio is chosen by default instead of the description track. If a
|
|
38
|
+
* period has only description audio, it is kept (playback is never stranded).
|
|
39
|
+
* - `preferDescription: true`: keep only description renditions when the period
|
|
40
|
+
* has any; otherwise keep all (again, never strand playback).
|
|
41
|
+
*
|
|
42
|
+
* Non-audio qualities are always kept.
|
|
43
|
+
*/
|
|
44
|
+
export function createAudioDescriptionFilter(preferDescription) {
|
|
45
|
+
// Per period (per unique array reference): does it have description audio,
|
|
46
|
+
// and does it have non-description ("main") audio?
|
|
47
|
+
const periodFlags = memoize((array) => {
|
|
48
|
+
let hasDescription = false;
|
|
49
|
+
let hasMain = false;
|
|
50
|
+
for (const quality of Array.from(array)) {
|
|
51
|
+
if (quality.contentType !== 'audio')
|
|
52
|
+
continue;
|
|
53
|
+
if (isAudioDescription(quality))
|
|
54
|
+
hasDescription = true;
|
|
55
|
+
else
|
|
56
|
+
hasMain = true;
|
|
57
|
+
}
|
|
58
|
+
return { hasDescription, hasMain };
|
|
59
|
+
}, (array) => array, 1);
|
|
60
|
+
return (quality, _index, array) => {
|
|
61
|
+
if (quality.contentType !== 'audio')
|
|
62
|
+
return true;
|
|
63
|
+
const { hasDescription, hasMain } = periodFlags(array);
|
|
64
|
+
if (preferDescription) {
|
|
65
|
+
// Nothing to prefer; keep all rather than strand playback.
|
|
66
|
+
if (!hasDescription)
|
|
67
|
+
return true;
|
|
68
|
+
return isAudioDescription(quality);
|
|
69
|
+
}
|
|
70
|
+
// No main alternative; keep all rather than strand playback.
|
|
71
|
+
if (!hasMain)
|
|
72
|
+
return true;
|
|
73
|
+
return !isAudioDescription(quality);
|
|
74
|
+
};
|
|
75
|
+
}
|
|
@@ -1,14 +1,32 @@
|
|
|
1
1
|
import type { MediaQualityMetadata } from './MediaQualityMetadata';
|
|
2
2
|
import type { FilterPredicate } from '@amazon/vinyl-util';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* so periods with different available languages are handled independently.
|
|
4
|
+
* Resolves the preferred-language option to an ordered list of BCP 47 tags,
|
|
5
|
+
* most-preferred first.
|
|
7
6
|
*
|
|
8
|
-
*
|
|
7
|
+
* - a string becomes a single-element list
|
|
8
|
+
* - an array is used as-is (already ordered)
|
|
9
|
+
* - `null` falls back to the platform's `navigator.languages` order — `null`
|
|
10
|
+
* means "use the platform preference", not "no preference"
|
|
11
|
+
* - an empty list (empty array, or `navigator.languages` unavailable) means no
|
|
12
|
+
* preference: keep all languages
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolvePreferredLanguages(preferred: string | readonly string[] | null): readonly string[];
|
|
15
|
+
/**
|
|
16
|
+
* Creates a filter predicate that keeps the qualities best matching the
|
|
17
|
+
* preferred language(s). The preference is an ordered list (see
|
|
18
|
+
* {@link resolvePreferredLanguages}): earlier entries win, and relatedness
|
|
19
|
+
* (exact > parent > sibling > child) breaks ties within a single preference.
|
|
20
|
+
*
|
|
21
|
+
* The best match is computed per period (per unique array reference), so
|
|
22
|
+
* periods with different available languages are handled independently. When no
|
|
23
|
+
* available language relates to any preference, all are kept (playback is never
|
|
24
|
+
* stranded). Qualities not matching the content type, or without a language
|
|
25
|
+
* tag, are always kept.
|
|
9
26
|
*
|
|
10
|
-
* @param preferredLanguage BCP 47
|
|
27
|
+
* @param preferredLanguage BCP 47 tag, ordered list of tags, or null (which
|
|
28
|
+
* falls back to `navigator.languages`).
|
|
11
29
|
* @param contentType Only filter qualities matching this content type (e.g. 'audio').
|
|
12
30
|
*/
|
|
13
|
-
export declare function createLanguageFilter(preferredLanguage: string | null, contentType: string): FilterPredicate<MediaQualityMetadata> | null;
|
|
31
|
+
export declare function createLanguageFilter(preferredLanguage: string | readonly string[] | null, contentType: string): FilterPredicate<MediaQualityMetadata> | null;
|
|
14
32
|
//# sourceMappingURL=mediaTimelineLanguageFilter.d.ts.map
|