@amazon/vinyl 1.2.0 → 2.0.0
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 +16 -16
- 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
|
@@ -0,0 +1,705 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { createDisposer, createLogPrefix, EventHostImpl, getElementOrDefault, lerp, logDebug, logError, logVerbose, memoize, noop, resolveValueProvider, roundToNearest, sleep, sortedInsertionIndex, } from '@amazon/vinyl-util';
|
|
6
|
+
import { AdError } from './AdError';
|
|
7
|
+
/**
|
|
8
|
+
* The % playhead start tolerance for playback progress when emitting ad progress events.
|
|
9
|
+
*/
|
|
10
|
+
export const AD_START_TOLERANCE = 0.05;
|
|
11
|
+
export const defaultAdControllerImplOptions = {
|
|
12
|
+
adLoadTimeout: 15,
|
|
13
|
+
preloadAheadTime: 10,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Provider-agnostic {@link AdController}. Holds the discovered ad breaks and
|
|
17
|
+
* derives enter/exit region events from playhead time updates.
|
|
18
|
+
*
|
|
19
|
+
* This controller is the *model* for ad playback: it knows which breaks exist,
|
|
20
|
+
* which break contains the playhead, and which ad within that break is current.
|
|
21
|
+
* It does NOT create, preload, or activate any tracks — that is the
|
|
22
|
+
* responsibility of the {@link TrackController}.
|
|
23
|
+
*
|
|
24
|
+
* A break is considered active while `startTime <= currentTime < endTime`,
|
|
25
|
+
* where `endTime` is `startTime + duration`. Breaks whose duration is unknown
|
|
26
|
+
* (null) or breaks which restrict `jump` will become active at
|
|
27
|
+
* `currentTime > startTime`
|
|
28
|
+
*
|
|
29
|
+
* This class contains no HLS- or DASH-specific logic; discovery code maps its
|
|
30
|
+
* protocol's signals to {@link AdBreakInfo} exposed by an
|
|
31
|
+
* {@link AdsProvider.getAds}, which this controller reads once the provider is
|
|
32
|
+
* set via {@link AdController.setAdsProvider} (and re-reads on `adsChange`).
|
|
33
|
+
*/
|
|
34
|
+
export class AdControllerImpl extends EventHostImpl {
|
|
35
|
+
deps;
|
|
36
|
+
get [Symbol.toStringTag]() {
|
|
37
|
+
return 'AdControllerImpl';
|
|
38
|
+
}
|
|
39
|
+
options;
|
|
40
|
+
_trackAds = null;
|
|
41
|
+
adsProviderSub = null;
|
|
42
|
+
adsProvider = null;
|
|
43
|
+
// The start times of the midroll ads, used for fast midroll break find
|
|
44
|
+
midrollAds = [];
|
|
45
|
+
// Midroll and postroll breaks, sorted by start time — the breaks eligible
|
|
46
|
+
// for the ahead-of-time `adPreload` signal (prerolls are preloaded up front).
|
|
47
|
+
preloadableBreaks = [];
|
|
48
|
+
// Breaks for which `adPreload` has already been emitted on the current
|
|
49
|
+
// approach; cleared on content change and when a break is re-armed by a
|
|
50
|
+
// seek back, so a re-approached break preloads again.
|
|
51
|
+
preloadedBreakIds = new Set();
|
|
52
|
+
lastPlaybackTime = 0;
|
|
53
|
+
pendingAdBreaks = [];
|
|
54
|
+
// Breaks permanently suppressed for this presentation (play-once breaks and
|
|
55
|
+
// prerolls). Cleared only on a content change (clearCompletedAds).
|
|
56
|
+
completeAdBreakIds = new Set();
|
|
57
|
+
// Replayable (non-play-once) midroll breaks that have played and are "spent"
|
|
58
|
+
// until the playhead moves back before their start, at which point they are
|
|
59
|
+
// re-armed and replay on the next forward crossing.
|
|
60
|
+
spentBreakIds = new Set();
|
|
61
|
+
disposer = createDisposer();
|
|
62
|
+
adBreakState = null;
|
|
63
|
+
loadingNext = false;
|
|
64
|
+
constructor(deps, options) {
|
|
65
|
+
super();
|
|
66
|
+
this.deps = deps;
|
|
67
|
+
this.options = { ...defaultAdControllerImplOptions, ...options };
|
|
68
|
+
const { add } = this.disposer;
|
|
69
|
+
const { playbackController } = this.deps;
|
|
70
|
+
add(playbackController.on('playing', () => {
|
|
71
|
+
if (this.adState) {
|
|
72
|
+
const adState = this.adState;
|
|
73
|
+
if (!adState.started) {
|
|
74
|
+
// The ad has started playing, initialize the state.
|
|
75
|
+
adState.started = true;
|
|
76
|
+
adState.timeStart = playbackController.currentTime;
|
|
77
|
+
adState.playbackRateAvg =
|
|
78
|
+
playbackController.playbackRate;
|
|
79
|
+
adState.dataPoints = 1;
|
|
80
|
+
}
|
|
81
|
+
this.dispatch('adPlaying', {
|
|
82
|
+
adBreak: adState.parentBreak.adBreak,
|
|
83
|
+
ad: adState.ad,
|
|
84
|
+
index: adState.index,
|
|
85
|
+
totalAds: adState.totalAds,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}));
|
|
89
|
+
add(playbackController.on('seeked', (event) => {
|
|
90
|
+
if (this.adState) {
|
|
91
|
+
this.adState.timeStart = playbackController.currentTime;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// A genuine seek back before a break re-arms it: a spent
|
|
95
|
+
// (replayable) break fires again on the next forward crossing,
|
|
96
|
+
// and its preload signal re-arms so it warms again on approach.
|
|
97
|
+
if (event.reason !== 'seeked')
|
|
98
|
+
return;
|
|
99
|
+
const time = playbackController.currentTime;
|
|
100
|
+
for (const adBreak of this.preloadableBreaks) {
|
|
101
|
+
if (time < adBreak.startTime) {
|
|
102
|
+
const key = adBreakKey(adBreak);
|
|
103
|
+
this.spentBreakIds.delete(key);
|
|
104
|
+
this.preloadedBreakIds.delete(key);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}));
|
|
108
|
+
add(playbackController.on('timeUpdate', this.onTimeUpdate));
|
|
109
|
+
add(playbackController.on('ended', () => {
|
|
110
|
+
if (this.adState)
|
|
111
|
+
this.endAd(this.adState);
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
clearCompletedAds() {
|
|
115
|
+
this.completeAdBreakIds.clear();
|
|
116
|
+
this.spentBreakIds.clear();
|
|
117
|
+
this.preloadedBreakIds.clear();
|
|
118
|
+
}
|
|
119
|
+
isBreakSuppressed(adBreak) {
|
|
120
|
+
const key = adBreakKey(adBreak);
|
|
121
|
+
return this.completeAdBreakIds.has(key) || this.spentBreakIds.has(key);
|
|
122
|
+
}
|
|
123
|
+
/** The media-time the current ad has actually played, or 0 if not playing. */
|
|
124
|
+
adElapsed() {
|
|
125
|
+
const adState = this.adState;
|
|
126
|
+
return adState?.started
|
|
127
|
+
? Math.max(0, this.deps.playbackController.currentTime - adState.timeStart)
|
|
128
|
+
: 0;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Computes whether the current ad may be skipped and, when not yet, how many
|
|
132
|
+
* seconds remain until it can. A `skip` restriction blocks it outright;
|
|
133
|
+
* otherwise a resolved skip window gates it by the elapsed break playout, and
|
|
134
|
+
* with no window the ad is freely skippable.
|
|
135
|
+
*/
|
|
136
|
+
async resolveSkipState(adBreakState, breakPlayed) {
|
|
137
|
+
const { adBreak } = adBreakState;
|
|
138
|
+
if (adBreak.restrict.skip === true) {
|
|
139
|
+
return { canSkip: false, skipIn: null };
|
|
140
|
+
}
|
|
141
|
+
const skipControl = await resolveValueProvider(adBreak.skipControl).catch((_v) => null);
|
|
142
|
+
if (!skipControl) {
|
|
143
|
+
return { canSkip: true, skipIn: null };
|
|
144
|
+
}
|
|
145
|
+
if (breakPlayed < skipControl.offset) {
|
|
146
|
+
return { canSkip: false, skipIn: skipControl.offset - breakPlayed };
|
|
147
|
+
}
|
|
148
|
+
const end = skipControl.duration != null
|
|
149
|
+
? skipControl.offset + skipControl.duration
|
|
150
|
+
: Infinity;
|
|
151
|
+
return { canSkip: breakPlayed < end, skipIn: null };
|
|
152
|
+
}
|
|
153
|
+
get currentTrackAds() {
|
|
154
|
+
return this._trackAds;
|
|
155
|
+
}
|
|
156
|
+
setTrackAds(value) {
|
|
157
|
+
const previous = this._trackAds;
|
|
158
|
+
const current = value ?? null;
|
|
159
|
+
this._trackAds = current;
|
|
160
|
+
this.midrollAds = (value?.adBreaks ?? []).filter((adBreak) => adBreak.placement === 'midroll');
|
|
161
|
+
// Midroll + postroll breaks are eligible for the ahead-of-time preload
|
|
162
|
+
// signal. adBreaks are already sorted by start time, so this stays sorted.
|
|
163
|
+
this.preloadableBreaks = (value?.adBreaks ?? []).filter((adBreak) => adBreak.placement !== 'preroll');
|
|
164
|
+
logDebug(this, 'setTrackAds', value);
|
|
165
|
+
this.dispatch('currentTrackAdsChange', {
|
|
166
|
+
previous,
|
|
167
|
+
current,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Returns a function that returns true if the ads provider has changed
|
|
172
|
+
* since the callback was created.
|
|
173
|
+
*/
|
|
174
|
+
providerInterrupted() {
|
|
175
|
+
const provider = this.adsProvider;
|
|
176
|
+
return () => provider !== this.adsProvider;
|
|
177
|
+
}
|
|
178
|
+
setAdsProvider(provider) {
|
|
179
|
+
if (this.adsProvider === provider)
|
|
180
|
+
return;
|
|
181
|
+
this.pendingAdBreaks = [];
|
|
182
|
+
this.completeAdBreak(this.adBreakState, 'contentChange');
|
|
183
|
+
this.adsProviderSub?.();
|
|
184
|
+
const { add, dispose } = createDisposer();
|
|
185
|
+
this.adsProviderSub = dispose;
|
|
186
|
+
this.adsProvider = provider;
|
|
187
|
+
const interrupted = this.providerInterrupted();
|
|
188
|
+
this.clearCompletedAds();
|
|
189
|
+
this.setTrackAds(null);
|
|
190
|
+
if (!provider)
|
|
191
|
+
return;
|
|
192
|
+
const refreshAds = () => {
|
|
193
|
+
provider
|
|
194
|
+
.getAds()
|
|
195
|
+
.then((ads) => {
|
|
196
|
+
if (interrupted())
|
|
197
|
+
return;
|
|
198
|
+
this.setTrackAds(ads);
|
|
199
|
+
})
|
|
200
|
+
.catch((error) => {
|
|
201
|
+
// Ad discovery failed for the provider. There is no active
|
|
202
|
+
// break to surface an adError against, so log it rather
|
|
203
|
+
// than routing through failAd (which would no-op with no
|
|
204
|
+
// active ad and swallow the failure silently).
|
|
205
|
+
if (interrupted())
|
|
206
|
+
return;
|
|
207
|
+
logError(this, 'ad discovery failed', error);
|
|
208
|
+
});
|
|
209
|
+
};
|
|
210
|
+
add(provider.on('adsChange', refreshAds));
|
|
211
|
+
refreshAds();
|
|
212
|
+
}
|
|
213
|
+
async enterPreroll() {
|
|
214
|
+
return this.enterRoll('preroll');
|
|
215
|
+
}
|
|
216
|
+
async enterPostroll() {
|
|
217
|
+
return this.enterRoll('postroll');
|
|
218
|
+
}
|
|
219
|
+
async enterRoll(placement) {
|
|
220
|
+
if (!this.adsProvider)
|
|
221
|
+
return null;
|
|
222
|
+
logVerbose(this, `checking for ${placement} ads`);
|
|
223
|
+
this.lastPlaybackTime = this.deps.playbackController.currentTime;
|
|
224
|
+
const interrupted = this.providerInterrupted();
|
|
225
|
+
return this.adsProvider
|
|
226
|
+
.getAds()
|
|
227
|
+
.then((ads) => {
|
|
228
|
+
if (interrupted()) {
|
|
229
|
+
logVerbose(this, `interrupted, no pending breaks set for ${placement}`);
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
this.setPendingBreaks(ads.adBreaks.filter((adBreak) => adBreak.placement === placement));
|
|
233
|
+
return this.currentAdBreak;
|
|
234
|
+
})
|
|
235
|
+
.catch(() => {
|
|
236
|
+
return null;
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
// True when we have an ads provider set. Callers gate off this AND their
|
|
240
|
+
// own "no ad break in progress" checks (currentAdBreak / pendingAdBreaks),
|
|
241
|
+
// so this is only about "a provider has committed", not track activation.
|
|
242
|
+
get hasProvider() {
|
|
243
|
+
return this.adsProvider != null;
|
|
244
|
+
}
|
|
245
|
+
skipAdBreak() {
|
|
246
|
+
const adBreakState = this.adBreakState;
|
|
247
|
+
if (!adBreakState) {
|
|
248
|
+
logDebug(this, 'skipAdBreak, no-op');
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
logDebug(this, 'skipAdBreak, active break id:', adBreakState.adBreak.id);
|
|
252
|
+
this.completeAdBreak(adBreakState, 'skipped');
|
|
253
|
+
this.nextAdOrBreak();
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Marks an ad break as completed (or 'spent' and replayable), emits an `adBreakCompleted` event.
|
|
257
|
+
*/
|
|
258
|
+
completeAdBreak(adBreakState, reason) {
|
|
259
|
+
if (!adBreakState || adBreakState.completedReason) {
|
|
260
|
+
logDebug(this, 'completeAdBreak, no-op');
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
const { adBreak } = adBreakState;
|
|
264
|
+
adBreakState.completedReason = reason;
|
|
265
|
+
const key = adBreakKey(adBreak);
|
|
266
|
+
// A non-once midroll ad may be replayed if the region is re-entered
|
|
267
|
+
// due to a back-seek.
|
|
268
|
+
if (adBreak.once ||
|
|
269
|
+
adBreak.placement === 'preroll' ||
|
|
270
|
+
adBreak.placement === 'postroll') {
|
|
271
|
+
this.completeAdBreakIds.add(key);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
// Non-once midroll
|
|
275
|
+
this.spentBreakIds.add(key);
|
|
276
|
+
}
|
|
277
|
+
// Interstitials play on a separate track, so the content timeline never
|
|
278
|
+
// advances during the break: content resumes at the cue point plus any
|
|
279
|
+
// explicit offset (default 0). max() keeps a forward seek from being
|
|
280
|
+
// rewound.
|
|
281
|
+
const resumePosition = Math.max(this.lastPlaybackTime, adBreak.startTime + (adBreak.resumeOffset ?? 0));
|
|
282
|
+
this.completeAd(adBreakState.adState, reason); // does nothing if no current ad
|
|
283
|
+
logDebug(this, `adBreakCompleted, active break id:${adBreak.id} reason:${reason} resumePosition:${resumePosition}`);
|
|
284
|
+
if (adBreakState === this.adBreakState) {
|
|
285
|
+
this.adBreakState = null;
|
|
286
|
+
}
|
|
287
|
+
this.dispatch('adBreakCompleted', { adBreak, resumePosition, reason });
|
|
288
|
+
}
|
|
289
|
+
get currentAdBreak() {
|
|
290
|
+
return this.adBreakState?.adBreak ?? null;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Marks an ad as completed and emits an `adCompleted` event.
|
|
294
|
+
*/
|
|
295
|
+
completeAd(adState, reason) {
|
|
296
|
+
if (!adState || adState.completedReason)
|
|
297
|
+
return; // no-op
|
|
298
|
+
logDebug(this, `adCompleted id=${adState.ad.id} reason=${reason} index=${adState.index} totalAds=${adState.totalAds}`);
|
|
299
|
+
// Fold this ad's actual playout into the break total before clearing it.
|
|
300
|
+
adState.parentBreak.playoutElapsed += this.adElapsed();
|
|
301
|
+
adState.completedReason = reason;
|
|
302
|
+
this.dispatch('adCompleted', {
|
|
303
|
+
adBreak: adState.parentBreak.adBreak,
|
|
304
|
+
ad: adState.ad,
|
|
305
|
+
reason,
|
|
306
|
+
index: adState.index,
|
|
307
|
+
totalAds: adState.totalAds,
|
|
308
|
+
});
|
|
309
|
+
if (adState.index >= adState.totalAds - 1) {
|
|
310
|
+
this.completeAdBreak(adState.parentBreak, reason);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Polls the next pending ad and activates it.
|
|
315
|
+
* When there are no remaining ads, activates the next ad break (if any).
|
|
316
|
+
*/
|
|
317
|
+
nextAdOrBreak() {
|
|
318
|
+
if (this.disposed || this.loadingNext)
|
|
319
|
+
return;
|
|
320
|
+
const adBreakState = this.adBreakState;
|
|
321
|
+
if (!adBreakState && !this.pendingAdBreaks.length) {
|
|
322
|
+
logDebug(this, 'nextAdOrBreak no-op');
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
logDebug(this, 'nextAdOrBreak');
|
|
326
|
+
this.loadingNext = true;
|
|
327
|
+
const nextAd = async (adBreakState) => {
|
|
328
|
+
logVerbose(this, 'nextAd');
|
|
329
|
+
try {
|
|
330
|
+
const ad = await adBreakState.nextAd();
|
|
331
|
+
// The break may have been completed or swapped out (a content
|
|
332
|
+
// change, skip, or playout-limit) while its ads were resolving;
|
|
333
|
+
// don't start an ad for an abandoned break.
|
|
334
|
+
if (this.disposed || adBreakState.completedReason)
|
|
335
|
+
return;
|
|
336
|
+
if (ad) {
|
|
337
|
+
this.startAd(ad);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
// No remaining ads in this break
|
|
341
|
+
logVerbose(this, 'no remaining ads');
|
|
342
|
+
this.completeAdBreak(adBreakState, 'ended');
|
|
343
|
+
await nextBreak();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
if (this.disposed)
|
|
348
|
+
return;
|
|
349
|
+
// The ad list failed to resolve: surface the error, complete
|
|
350
|
+
// this break so content can resume, then advance to any pending
|
|
351
|
+
// break. Re-calling nextAdOrBreak() here would no-op (loadingNext
|
|
352
|
+
// is still held by this in-flight call) AND would leave the break
|
|
353
|
+
// stuck non-null, permanently blocking midroll ingress.
|
|
354
|
+
this.dispatch('adError', {
|
|
355
|
+
adBreak: adBreakState.adBreak,
|
|
356
|
+
currentAd: null,
|
|
357
|
+
error,
|
|
358
|
+
});
|
|
359
|
+
this.completeAdBreak(adBreakState, 'error');
|
|
360
|
+
await nextBreak();
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
const nextBreak = async () => {
|
|
364
|
+
logVerbose(this, 'nextBreak');
|
|
365
|
+
if (this.pendingAdBreaks.length) {
|
|
366
|
+
// There are pending breaks, take the next one and start its first ad.
|
|
367
|
+
const adBreak = this.pendingAdBreaks.shift();
|
|
368
|
+
this.adBreakState = createAdBreakState(adBreak);
|
|
369
|
+
logDebug(this, 'adBreakEntered', adBreak);
|
|
370
|
+
this.dispatch('adBreakEntered', { adBreak });
|
|
371
|
+
await nextAd(this.adBreakState);
|
|
372
|
+
}
|
|
373
|
+
else {
|
|
374
|
+
logDebug(this, 'no remaining breaks');
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
(async () => {
|
|
378
|
+
if (adBreakState) {
|
|
379
|
+
await nextAd(adBreakState);
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
await nextBreak().catch(noop);
|
|
383
|
+
}
|
|
384
|
+
})()
|
|
385
|
+
.catch(noop)
|
|
386
|
+
.finally(() => {
|
|
387
|
+
this.loadingNext = false;
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
get currentAd() {
|
|
391
|
+
return this.adState?.ad ?? null;
|
|
392
|
+
}
|
|
393
|
+
get adState() {
|
|
394
|
+
return this.adBreakState?.adState ?? null;
|
|
395
|
+
}
|
|
396
|
+
startAd(adState) {
|
|
397
|
+
const { ad, index, totalAds } = adState;
|
|
398
|
+
logDebug(this, 'adEntered', adState.ad);
|
|
399
|
+
this.dispatch('adEntered', {
|
|
400
|
+
adBreak: adState.parentBreak.adBreak,
|
|
401
|
+
ad,
|
|
402
|
+
index,
|
|
403
|
+
totalAds,
|
|
404
|
+
});
|
|
405
|
+
this.emitTimeUpdate(adState).catch(noop);
|
|
406
|
+
sleep(this.options.adLoadTimeout)
|
|
407
|
+
.then(() => {
|
|
408
|
+
if (this.disposed)
|
|
409
|
+
return;
|
|
410
|
+
if (this.adState === adState && !adState.started) {
|
|
411
|
+
this.failAd(new AdError(`Ad failed to start after ${this.options.adLoadTimeout} seconds`));
|
|
412
|
+
}
|
|
413
|
+
})
|
|
414
|
+
.catch(noop);
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Checks if the playhead has entered a time to activate a midroll ad.
|
|
418
|
+
*/
|
|
419
|
+
onTimeUpdate = () => {
|
|
420
|
+
const adBreak = this.currentAdBreak;
|
|
421
|
+
const adState = this.adState;
|
|
422
|
+
if (adBreak) {
|
|
423
|
+
// Ad progress events
|
|
424
|
+
if (adState && adState.completedReason == null) {
|
|
425
|
+
this.emitAdProgressEvents(adState).catch(noop);
|
|
426
|
+
this.enforcePlayoutLimits(adState);
|
|
427
|
+
}
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
const pC = this.deps.playbackController;
|
|
431
|
+
if (this.hasProvider && pC.playing && !this.pendingAdBreaks.length) {
|
|
432
|
+
// Not an ad playing, main content.
|
|
433
|
+
this.lastPlaybackTime = pC.currentTime;
|
|
434
|
+
this.checkAdPreload(pC.currentTime);
|
|
435
|
+
this.checkMidrollIngress();
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
/**
|
|
439
|
+
* Emits `adPreload` once for each midroll/postroll break the playhead is
|
|
440
|
+
* approaching — within (the break's {@link AdBreakInfo.resolutionTimeOffset}
|
|
441
|
+
* or, when absent, the `preloadAheadTime` option) seconds before its start —
|
|
442
|
+
* so a consumer can resolve and warm the break's assets before entry.
|
|
443
|
+
* Suppressed (played-once/spent) breaks are skipped.
|
|
444
|
+
*/
|
|
445
|
+
checkAdPreload(time) {
|
|
446
|
+
for (const adBreak of this.preloadableBreaks) {
|
|
447
|
+
const key = adBreakKey(adBreak);
|
|
448
|
+
if (this.preloadedBreakIds.has(key))
|
|
449
|
+
continue;
|
|
450
|
+
if (this.isBreakSuppressed(adBreak))
|
|
451
|
+
continue;
|
|
452
|
+
const offset = adBreak.resolutionTimeOffset ?? this.options.preloadAheadTime;
|
|
453
|
+
// Only ahead of the break; at/after its start, ingress takes over.
|
|
454
|
+
if (time >= adBreak.startTime - offset &&
|
|
455
|
+
time < adBreak.startTime) {
|
|
456
|
+
this.preloadedBreakIds.add(key);
|
|
457
|
+
logDebug(this, 'adPreload', adBreak.id);
|
|
458
|
+
this.dispatch('adPreload', { adBreak });
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Main content with ad breaks is playing, check if we have entered a midroll region.
|
|
464
|
+
*/
|
|
465
|
+
checkMidrollIngress() {
|
|
466
|
+
const time = this.deps.playbackController.currentTime;
|
|
467
|
+
const midrolls = this.midrollAds;
|
|
468
|
+
// Upper bound: the first midroll whose startTime is strictly after the
|
|
469
|
+
// playhead. Every candidate break is at an index before it.
|
|
470
|
+
const upper = sortedInsertionIndex(midrolls, time, (time, ad) => time - ad.startTime);
|
|
471
|
+
const newPending = [];
|
|
472
|
+
// Scan every break at or before the playhead, ascending (timeline
|
|
473
|
+
// order), so tied start times and an earlier still-open break that
|
|
474
|
+
// contains the playhead (e.g. after a seek into or over it) are all
|
|
475
|
+
// considered — not just the single nearest preceding break.
|
|
476
|
+
for (let i = 0; i < upper; i++) {
|
|
477
|
+
const midroll = midrolls[i];
|
|
478
|
+
if (this.isBreakSuppressed(midroll))
|
|
479
|
+
continue;
|
|
480
|
+
const duration = midroll.duration == null || midroll.restrict.jump
|
|
481
|
+
? Number.MAX_VALUE
|
|
482
|
+
: midroll.duration;
|
|
483
|
+
if (time < midroll.startTime + duration) {
|
|
484
|
+
newPending.push(midroll);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
if (newPending.length) {
|
|
488
|
+
logVerbose(this, 'setting midrolls');
|
|
489
|
+
this.setPendingBreaks(newPending);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Emits events for `adTimeUpdate`, `adFirstQuartile`, `adMidpoint`, and
|
|
494
|
+
* `adThirdQuartile`.
|
|
495
|
+
* (Does not emit `adCompleted`)
|
|
496
|
+
*/
|
|
497
|
+
async emitAdProgressEvents(adState) {
|
|
498
|
+
const pC = this.deps.playbackController;
|
|
499
|
+
await this.emitTimeUpdate(adState);
|
|
500
|
+
if (isFinite(pC.duration) && pC.duration > 0) {
|
|
501
|
+
// Take a running average of the playback rate. Applications can
|
|
502
|
+
// use this to detect tampering when emitting metrics.
|
|
503
|
+
adState.dataPoints++;
|
|
504
|
+
adState.playbackRateAvg = lerp(adState.playbackRateAvg, pC.playbackRate, 1 / adState.dataPoints);
|
|
505
|
+
// If the ad's duration is set, take the shorter of the ad duration
|
|
506
|
+
const currProgress = pC.currentTimePercent;
|
|
507
|
+
const progressStart = adState.timeStart / pC.duration;
|
|
508
|
+
if (!adState.quartile.first &&
|
|
509
|
+
currProgress > 0.25 &&
|
|
510
|
+
progressStart < AD_START_TOLERANCE) {
|
|
511
|
+
this.dispatch('adFirstQuartile', createAdProgressEvent(adState));
|
|
512
|
+
}
|
|
513
|
+
if (!adState.quartile.midpoint &&
|
|
514
|
+
currProgress > 0.5 &&
|
|
515
|
+
progressStart < 0.25 + AD_START_TOLERANCE) {
|
|
516
|
+
this.dispatch('adMidpoint', createAdProgressEvent(adState));
|
|
517
|
+
}
|
|
518
|
+
if (!adState.quartile.third &&
|
|
519
|
+
currProgress > 0.75 &&
|
|
520
|
+
progressStart < 0.5 + AD_START_TOLERANCE) {
|
|
521
|
+
this.dispatch('adThirdQuartile', createAdProgressEvent(adState));
|
|
522
|
+
}
|
|
523
|
+
// adEnded is not on progress but on a call to `endAd()`.
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
async emitTimeUpdate(adState) {
|
|
527
|
+
const pC = this.deps.playbackController;
|
|
528
|
+
const { ad, parentBreak } = adState;
|
|
529
|
+
// Surface elapsed/remaining time for the ad and the break as a
|
|
530
|
+
// whole so applications don't derive it from the media duration.
|
|
531
|
+
const adPlayed = this.adElapsed();
|
|
532
|
+
const adBreak = parentBreak.adBreak;
|
|
533
|
+
const naturalAdTotal = ad.duration ?? (isFinite(pC.duration) ? pC.duration : null);
|
|
534
|
+
// The break's playout limit is a budget shared across all its ads, so
|
|
535
|
+
// the current ad can run no longer than the budget left after the ads
|
|
536
|
+
// that already played. Cap its reported total by that remainder —
|
|
537
|
+
// matching enforcePlayoutLimits, which cuts the ad (and break) off at
|
|
538
|
+
// exactly this point. Without the cap adTimeRemaining over-reports (the
|
|
539
|
+
// full asset duration) while the ad is actually stopped at the limit.
|
|
540
|
+
const limit = adBreak.playoutLimit;
|
|
541
|
+
const adTotal = limit != null
|
|
542
|
+
? Math.min(naturalAdTotal ?? Infinity, Math.max(0, limit - parentBreak.playoutElapsed))
|
|
543
|
+
: naturalAdTotal;
|
|
544
|
+
const breakPlayed = parentBreak.playoutElapsed + adPlayed;
|
|
545
|
+
const breakTotal = limit ?? adBreak.duration;
|
|
546
|
+
const { canSkip, skipIn } = await this.resolveSkipState(parentBreak, breakPlayed);
|
|
547
|
+
this.dispatch('adTimeUpdate', {
|
|
548
|
+
adBreak: adState.parentBreak.adBreak,
|
|
549
|
+
ad,
|
|
550
|
+
index: adState.index,
|
|
551
|
+
totalAds: adState.totalAds,
|
|
552
|
+
adCurrentTime: adPlayed,
|
|
553
|
+
adTimeRemaining: adTotal != null ? Math.max(0, adTotal - adPlayed) : null,
|
|
554
|
+
breakCurrentTime: breakPlayed,
|
|
555
|
+
breakTimeRemaining: breakTotal != null
|
|
556
|
+
? Math.max(0, breakTotal - breakPlayed)
|
|
557
|
+
: null,
|
|
558
|
+
canSkip,
|
|
559
|
+
skipIn,
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Ads breaks can have a playout limit that may cut off ad playback.
|
|
564
|
+
* End the ad if that limit is reached.
|
|
565
|
+
*/
|
|
566
|
+
enforcePlayoutLimits(adState) {
|
|
567
|
+
const pC = this.deps.playbackController;
|
|
568
|
+
const { ad, parentBreak } = adState;
|
|
569
|
+
// Enforce playout limits independent of a finite content duration so
|
|
570
|
+
// live ads with a declared playout limit are still bounded.
|
|
571
|
+
if (adState.started) {
|
|
572
|
+
const elapsed = Math.max(0, pC.currentTime - adState.timeStart);
|
|
573
|
+
const adBreak = parentBreak.adBreak;
|
|
574
|
+
const limit = adBreak.playoutLimit;
|
|
575
|
+
if (limit != null &&
|
|
576
|
+
parentBreak.playoutElapsed + elapsed >= limit) {
|
|
577
|
+
// The break's total playout limit is reached: end the whole
|
|
578
|
+
// break, dropping any ads that have not started.
|
|
579
|
+
parentBreak.clear();
|
|
580
|
+
this.endAd(adState);
|
|
581
|
+
}
|
|
582
|
+
else if (ad.duration != null && elapsed >= ad.duration) {
|
|
583
|
+
// This ad reached its declared duration: advance to the next.
|
|
584
|
+
this.endAd(adState);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
setPendingBreaks(newPending) {
|
|
589
|
+
this.pendingAdBreaks = newPending.filter((adBreak) => !this.isBreakSuppressed(adBreak));
|
|
590
|
+
const n = this.pendingAdBreaks.length;
|
|
591
|
+
logDebug(this, `setPendingBreaks len=${n}, suppressed=${newPending.length - n}`);
|
|
592
|
+
this.nextAdOrBreak();
|
|
593
|
+
}
|
|
594
|
+
skipAd() {
|
|
595
|
+
this.completeAd(this.adState, 'skipped');
|
|
596
|
+
this.nextAdOrBreak();
|
|
597
|
+
}
|
|
598
|
+
failAd(error) {
|
|
599
|
+
const adState = this.adState;
|
|
600
|
+
if (adState) {
|
|
601
|
+
// Capture the failing ad before completeAd() clears it, so the
|
|
602
|
+
// adError event can distinguish an individual-ad failure from an
|
|
603
|
+
// ad-list load failure (currentAd == null).
|
|
604
|
+
this.completeAd(adState, 'error');
|
|
605
|
+
this.dispatch('adError', {
|
|
606
|
+
error,
|
|
607
|
+
adBreak: adState.parentBreak.adBreak,
|
|
608
|
+
currentAd: adState.ad,
|
|
609
|
+
});
|
|
610
|
+
}
|
|
611
|
+
this.nextAdOrBreak();
|
|
612
|
+
}
|
|
613
|
+
endAd(adState) {
|
|
614
|
+
this.completeAd(adState, 'ended');
|
|
615
|
+
this.dispatch('adEnded', createAdProgressEvent(adState));
|
|
616
|
+
this.nextAdOrBreak();
|
|
617
|
+
}
|
|
618
|
+
get disposed() {
|
|
619
|
+
return this.disposer.disposed;
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* Disposes this controller, removes all listeners.
|
|
623
|
+
*/
|
|
624
|
+
dispose() {
|
|
625
|
+
super.dispose();
|
|
626
|
+
this.disposer.dispose();
|
|
627
|
+
// Detach any active break so currentAd/currentAdBreak read null after
|
|
628
|
+
// dispose, even if a break's ad list resolves late (startAd is already
|
|
629
|
+
// guarded by the disposed check, so no adEntered/adPlaying fires).
|
|
630
|
+
this.adBreakState = null;
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
function createAdProgressEvent(adState) {
|
|
634
|
+
return {
|
|
635
|
+
adBreak: adState.parentBreak.adBreak,
|
|
636
|
+
ad: adState.ad,
|
|
637
|
+
// Snapped to nearest 0.1 to avoid ~1.0
|
|
638
|
+
playbackRateAvg: roundToNearest(adState.playbackRateAvg, 0.1),
|
|
639
|
+
index: adState.index,
|
|
640
|
+
totalAds: adState.totalAds,
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
function createAdBreakState(adBreak) {
|
|
644
|
+
let _currentIndex = -1;
|
|
645
|
+
let _adState = null;
|
|
646
|
+
const logTarget = {
|
|
647
|
+
logPrefix: createLogPrefix('AdBreakState'),
|
|
648
|
+
};
|
|
649
|
+
const adBreakState = {
|
|
650
|
+
adBreak,
|
|
651
|
+
playoutElapsed: 0,
|
|
652
|
+
completedReason: null,
|
|
653
|
+
get adState() {
|
|
654
|
+
return _adState;
|
|
655
|
+
},
|
|
656
|
+
async nextAd() {
|
|
657
|
+
const ads = await getAds();
|
|
658
|
+
if (_currentIndex >= ads.length)
|
|
659
|
+
return null;
|
|
660
|
+
_adState = getElementOrDefault(ads, ++_currentIndex, null);
|
|
661
|
+
return _adState;
|
|
662
|
+
},
|
|
663
|
+
clear() {
|
|
664
|
+
_adState = null;
|
|
665
|
+
_currentIndex = Number.MAX_VALUE;
|
|
666
|
+
},
|
|
667
|
+
};
|
|
668
|
+
const getAds = memoize(() => {
|
|
669
|
+
logVerbose(logTarget, `requesting ads for break ${adBreak.placement} ${adBreak.id}`);
|
|
670
|
+
return resolveValueProvider(adBreak.ads).then((ads) => {
|
|
671
|
+
logVerbose(logTarget, 'ads resolved', ads);
|
|
672
|
+
return ads.map((adInfo, index) => {
|
|
673
|
+
return createAdState({
|
|
674
|
+
adBreakState: adBreakState,
|
|
675
|
+
ad: adInfo,
|
|
676
|
+
totalAds: ads.length,
|
|
677
|
+
index: index,
|
|
678
|
+
});
|
|
679
|
+
});
|
|
680
|
+
});
|
|
681
|
+
});
|
|
682
|
+
return adBreakState;
|
|
683
|
+
}
|
|
684
|
+
function createAdState({ adBreakState, ad, totalAds, index, }) {
|
|
685
|
+
return {
|
|
686
|
+
parentBreak: adBreakState,
|
|
687
|
+
ad,
|
|
688
|
+
index,
|
|
689
|
+
totalAds,
|
|
690
|
+
started: false,
|
|
691
|
+
timeStart: 0,
|
|
692
|
+
playbackRateAvg: 0,
|
|
693
|
+
dataPoints: 0,
|
|
694
|
+
quartile: {
|
|
695
|
+
first: false,
|
|
696
|
+
midpoint: false,
|
|
697
|
+
third: false,
|
|
698
|
+
},
|
|
699
|
+
completedReason: null,
|
|
700
|
+
};
|
|
701
|
+
}
|
|
702
|
+
/** Combines the placement and id of the break for unique reference by placement */
|
|
703
|
+
function adBreakKey(adBreak) {
|
|
704
|
+
return `${adBreak.placement}_${adBreak.id}`;
|
|
705
|
+
}
|