@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaTimelineLanguageFilter.d.ts","sourceRoot":"","sources":["../../../../src/streaming/mediaTimelineLanguageFilter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"mediaTimelineLanguageFilter.d.ts","sourceRoot":"","sources":["../../../../src/streaming/mediaTimelineLanguageFilter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAIzD;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACrC,SAAS,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,GAC7C,SAAS,MAAM,EAAE,CAKnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAChC,iBAAiB,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,EACpD,WAAW,EAAE,MAAM,GACpB,eAAe,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAyC9C"}
|
|
@@ -3,34 +3,79 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { memoize } from '@amazon/vinyl-util';
|
|
6
|
-
import {
|
|
6
|
+
import { languageRelatedness } from '../track/filters/languageFilter';
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* so periods with different available languages are handled independently.
|
|
8
|
+
* Resolves the preferred-language option to an ordered list of BCP 47 tags,
|
|
9
|
+
* most-preferred first.
|
|
11
10
|
*
|
|
12
|
-
*
|
|
11
|
+
* - a string becomes a single-element list
|
|
12
|
+
* - an array is used as-is (already ordered)
|
|
13
|
+
* - `null` falls back to the platform's `navigator.languages` order — `null`
|
|
14
|
+
* means "use the platform preference", not "no preference"
|
|
15
|
+
* - an empty list (empty array, or `navigator.languages` unavailable) means no
|
|
16
|
+
* preference: keep all languages
|
|
17
|
+
*/
|
|
18
|
+
export function resolvePreferredLanguages(preferred) {
|
|
19
|
+
if (typeof preferred === 'string')
|
|
20
|
+
return [preferred];
|
|
21
|
+
if (preferred)
|
|
22
|
+
return preferred;
|
|
23
|
+
if (typeof navigator !== 'undefined')
|
|
24
|
+
return [...navigator.languages];
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a filter predicate that keeps the qualities best matching the
|
|
29
|
+
* preferred language(s). The preference is an ordered list (see
|
|
30
|
+
* {@link resolvePreferredLanguages}): earlier entries win, and relatedness
|
|
31
|
+
* (exact > parent > sibling > child) breaks ties within a single preference.
|
|
13
32
|
*
|
|
14
|
-
*
|
|
33
|
+
* The best match is computed per period (per unique array reference), so
|
|
34
|
+
* periods with different available languages are handled independently. When no
|
|
35
|
+
* available language relates to any preference, all are kept (playback is never
|
|
36
|
+
* stranded). Qualities not matching the content type, or without a language
|
|
37
|
+
* tag, are always kept.
|
|
38
|
+
*
|
|
39
|
+
* @param preferredLanguage BCP 47 tag, ordered list of tags, or null (which
|
|
40
|
+
* falls back to `navigator.languages`).
|
|
15
41
|
* @param contentType Only filter qualities matching this content type (e.g. 'audio').
|
|
16
42
|
*/
|
|
17
43
|
export function createLanguageFilter(preferredLanguage, contentType) {
|
|
18
|
-
|
|
44
|
+
const preferences = resolvePreferredLanguages(preferredLanguage);
|
|
45
|
+
if (preferences.length === 0)
|
|
19
46
|
return null;
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
47
|
+
// Ranks a language against the ordered preference list. Earlier preferences
|
|
48
|
+
// dominate (weighted by list position); relatedness breaks ties within one.
|
|
49
|
+
// 0 means the language is unrelated to every preference.
|
|
50
|
+
const scoreLang = (lang) => {
|
|
51
|
+
let best = 0;
|
|
52
|
+
for (let i = 0; i < preferences.length; i++) {
|
|
53
|
+
const rel = languageRelatedness(preferences[i], lang);
|
|
54
|
+
if (rel > 0) {
|
|
55
|
+
best = Math.max(best, (preferences.length - i) * 10 + rel);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return best;
|
|
59
|
+
};
|
|
60
|
+
// The best score among the period's languages, memoized per unique array.
|
|
61
|
+
const bestScoreForPeriod = memoize((array) => {
|
|
62
|
+
let best = 0;
|
|
63
|
+
for (const quality of Array.from(array)) {
|
|
64
|
+
if (quality.contentType === contentType && quality.lang) {
|
|
65
|
+
best = Math.max(best, scoreLang(quality.lang));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return best;
|
|
27
69
|
}, (array) => array, 1);
|
|
28
70
|
return (quality, _index, array) => {
|
|
29
71
|
if (quality.contentType !== contentType)
|
|
30
72
|
return true;
|
|
31
73
|
if (!quality.lang)
|
|
32
74
|
return true;
|
|
33
|
-
const
|
|
34
|
-
|
|
75
|
+
const best = bestScoreForPeriod(array);
|
|
76
|
+
// Nothing matched any preference; keep all rather than strand playback.
|
|
77
|
+
if (best === 0)
|
|
78
|
+
return true;
|
|
79
|
+
return scoreLang(quality.lang) === best;
|
|
35
80
|
};
|
|
36
81
|
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { EventHostImpl, type Maybe, type RequestInitOptions } from '@amazon/vinyl-util';
|
|
2
|
+
import type { TextTrackController, TextTrackEventMap, TextTrackInfo } from './TextTrack';
|
|
3
|
+
import type { ObservableValue } from '@amazon/vinyl-observable';
|
|
4
|
+
import { type VttCueStyle } from './VttCueStyle';
|
|
5
|
+
export interface SidecarTextTrackControllerDeps {
|
|
6
|
+
/**
|
|
7
|
+
* The HTML media element on which to attach the in-band TextTrack
|
|
8
|
+
* representation. Cues for the active text track are added to a TextTrack
|
|
9
|
+
* created via `media.addTextTrack`. Setting this to null disables DOM
|
|
10
|
+
* integration; cues are still loaded and surfaced via events.
|
|
11
|
+
*/
|
|
12
|
+
readonly media: HTMLMediaElement | null;
|
|
13
|
+
/**
|
|
14
|
+
* Optional request init options forwarded with each VTT fetch (e.g. CORS).
|
|
15
|
+
*/
|
|
16
|
+
readonly requestInit?: Maybe<RequestInitOptions>;
|
|
17
|
+
/**
|
|
18
|
+
* Preferred caption language(s), most-preferred first. A non-null
|
|
19
|
+
* preference auto-selects the best-matching track, re-applied as the track
|
|
20
|
+
* list changes. Changing the preference to null clears the selection
|
|
21
|
+
* (captions off). An initial null (or an absent observable) is "no
|
|
22
|
+
* preference": forced tracks still auto-select until the app makes an
|
|
23
|
+
* explicit choice — it does not force captions off.
|
|
24
|
+
*/
|
|
25
|
+
readonly preferredTextLanguage?: ObservableValue<string | readonly string[] | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Layout style applied to each rendered VTTCue (see
|
|
28
|
+
* {@link VttCueStyle}). Read per cue as it is appended, so a change affects
|
|
29
|
+
* subsequently-rendered cues. Absent means no styling (browser defaults).
|
|
30
|
+
*/
|
|
31
|
+
readonly cueStyle?: ObservableValue<VttCueStyle | null>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Manages a sidecar WebVTT-based text track lifecycle:
|
|
35
|
+
*
|
|
36
|
+
* - holds a discovered list of {@link TextTrackInfo}
|
|
37
|
+
* - on activation, fetches the chosen track's WebVTT and pushes cues to a
|
|
38
|
+
* `TextTrack` created on the `HTMLMediaElement`
|
|
39
|
+
* - clears any previously activated cues when switching tracks
|
|
40
|
+
*
|
|
41
|
+
* The controller is intentionally agnostic of HLS/DASH discovery details. Its
|
|
42
|
+
* input is whatever list of {@link TextTrackInfo} entries the manifest layer
|
|
43
|
+
* decides to surface.
|
|
44
|
+
*/
|
|
45
|
+
export declare class SidecarTextTrackController extends EventHostImpl<TextTrackEventMap> implements TextTrackController {
|
|
46
|
+
private readonly deps;
|
|
47
|
+
get [Symbol.toStringTag](): string;
|
|
48
|
+
private _tracks;
|
|
49
|
+
private _active;
|
|
50
|
+
private _domTrack;
|
|
51
|
+
private loadAbort;
|
|
52
|
+
private _userSelected;
|
|
53
|
+
private readonly preferredLanguageSub;
|
|
54
|
+
constructor(deps: SidecarTextTrackControllerDeps);
|
|
55
|
+
get textTracks(): readonly TextTrackInfo[];
|
|
56
|
+
get activeTextTrack(): TextTrackInfo | null;
|
|
57
|
+
/**
|
|
58
|
+
* Replaces the discovered text track list. Emits `textTracksChange`. If
|
|
59
|
+
* the previously active track is no longer present, clears the active
|
|
60
|
+
* selection and emits `activeTextTrackChange`.
|
|
61
|
+
*/
|
|
62
|
+
setTextTracks(tracks: readonly TextTrackInfo[]): void;
|
|
63
|
+
setActiveTextTrack(id: string | null): void;
|
|
64
|
+
/**
|
|
65
|
+
* Selects the track best matching the preferred language(s), or clears the
|
|
66
|
+
* selection when the preference is null or nothing matches.
|
|
67
|
+
*/
|
|
68
|
+
private applyPreferredLanguage;
|
|
69
|
+
/**
|
|
70
|
+
* Applies a selection by id (null clears it) without marking it as an
|
|
71
|
+
* explicit user choice. Shared by setActiveTextTrack and forced auto-select.
|
|
72
|
+
*/
|
|
73
|
+
private selectById;
|
|
74
|
+
/**
|
|
75
|
+
* The forced track to auto-select, or null. Prefers the default track's
|
|
76
|
+
* language, else the first forced track.
|
|
77
|
+
*/
|
|
78
|
+
private pickForcedTrack;
|
|
79
|
+
suspend(): void;
|
|
80
|
+
resume(): void;
|
|
81
|
+
/**
|
|
82
|
+
* Cancels any in-flight load, clears the DOM TextTrack, and resets state.
|
|
83
|
+
* Called by the host when the underlying media is unloaded.
|
|
84
|
+
*/
|
|
85
|
+
dispose(): void;
|
|
86
|
+
private startLoad;
|
|
87
|
+
private ensureDomTrack;
|
|
88
|
+
private appendCues;
|
|
89
|
+
private clearDomTrack;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=SidecarTextTrackController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidecarTextTrackController.d.ts","sourceRoot":"","sources":["../../../../src/text/SidecarTextTrackController.ts"],"names":[],"mappings":"AAKA,OAAO,EAGH,aAAa,EACb,KAAK,KAAK,EACV,KAAK,kBAAkB,EAE1B,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EACR,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EAChB,MAAM,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,OAAO,EAA8B,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAE5E,MAAM,WAAW,8BAA8B;IAC3C;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAEvC;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAEhD;;;;;;;OAOG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,eAAe,CAC5C,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CACpC,CAAA;IAED;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;CAC1D;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,0BACT,SAAQ,aAAa,CAAC,iBAAiB,CACvC,YAAW,mBAAmB;IAelB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAbjC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAEjC;IAED,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,SAAS,CAAqB;IAGtC,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAoB;gBAE5B,IAAI,EAAE,8BAA8B;IAQjE,IAAI,UAAU,IAAI,SAAS,aAAa,EAAE,CAEzC;IAED,IAAI,eAAe,IAAI,aAAa,GAAG,IAAI,CAE1C;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI;IAuBrD,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAM3C;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;;OAGG;IACH,OAAO,CAAC,UAAU;IAiBlB;;;OAGG;IACH,OAAO,CAAC,eAAe;IAavB,OAAO,IAAI,IAAI;IAMf,MAAM,IAAI,IAAI;IAQd;;;OAGG;IACH,OAAO,IAAI,IAAI;IAUf,OAAO,CAAC,SAAS;IAoCjB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,aAAa;CAexB"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { Abort, equalDeep, EventHostImpl, } from '@amazon/vinyl-util';
|
|
6
|
+
import { loadWebVttCues } from './SidecarTextTrackLoader';
|
|
7
|
+
import { pickPreferredTextTrack } from './pickPreferredTextTrack';
|
|
8
|
+
import { applyVttCueStyle, isVttCue } from './VttCueStyle';
|
|
9
|
+
/**
|
|
10
|
+
* Manages a sidecar WebVTT-based text track lifecycle:
|
|
11
|
+
*
|
|
12
|
+
* - holds a discovered list of {@link TextTrackInfo}
|
|
13
|
+
* - on activation, fetches the chosen track's WebVTT and pushes cues to a
|
|
14
|
+
* `TextTrack` created on the `HTMLMediaElement`
|
|
15
|
+
* - clears any previously activated cues when switching tracks
|
|
16
|
+
*
|
|
17
|
+
* The controller is intentionally agnostic of HLS/DASH discovery details. Its
|
|
18
|
+
* input is whatever list of {@link TextTrackInfo} entries the manifest layer
|
|
19
|
+
* decides to surface.
|
|
20
|
+
*/
|
|
21
|
+
export class SidecarTextTrackController extends EventHostImpl {
|
|
22
|
+
deps;
|
|
23
|
+
get [Symbol.toStringTag]() {
|
|
24
|
+
return 'SidecarTextTrackController';
|
|
25
|
+
}
|
|
26
|
+
_tracks = [];
|
|
27
|
+
_active = null;
|
|
28
|
+
_domTrack = null;
|
|
29
|
+
loadAbort = null;
|
|
30
|
+
// True once the app has made an explicit selection (including null). Until
|
|
31
|
+
// then, forced tracks auto-select on discovery.
|
|
32
|
+
_userSelected = false;
|
|
33
|
+
preferredLanguageSub;
|
|
34
|
+
constructor(deps) {
|
|
35
|
+
super();
|
|
36
|
+
this.deps = deps;
|
|
37
|
+
this.preferredLanguageSub =
|
|
38
|
+
deps.preferredTextLanguage?.onData((value, previous) => {
|
|
39
|
+
if (previous !== undefined)
|
|
40
|
+
this.applyPreferredLanguage(value);
|
|
41
|
+
}) ?? null;
|
|
42
|
+
}
|
|
43
|
+
get textTracks() {
|
|
44
|
+
return this._tracks;
|
|
45
|
+
}
|
|
46
|
+
get activeTextTrack() {
|
|
47
|
+
return this._active;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Replaces the discovered text track list. Emits `textTracksChange`. If
|
|
51
|
+
* the previously active track is no longer present, clears the active
|
|
52
|
+
* selection and emits `activeTextTrackChange`.
|
|
53
|
+
*/
|
|
54
|
+
setTextTracks(tracks) {
|
|
55
|
+
if (equalDeep(this._tracks, tracks))
|
|
56
|
+
return;
|
|
57
|
+
const previous = this._tracks;
|
|
58
|
+
this._tracks = tracks;
|
|
59
|
+
this.dispatch('textTracksChange', { previous, current: tracks });
|
|
60
|
+
if (this._active && !tracks.some((t) => t.id === this._active.id)) {
|
|
61
|
+
// Clear a now-absent selection, but keep _userSelected intact.
|
|
62
|
+
this.selectById(null);
|
|
63
|
+
}
|
|
64
|
+
// A preferred language re-selects the best match as the list changes;
|
|
65
|
+
// otherwise auto-show forced captions until the app makes an explicit
|
|
66
|
+
// choice.
|
|
67
|
+
const preferred = this.deps.preferredTextLanguage?.value;
|
|
68
|
+
if (preferred != null) {
|
|
69
|
+
this.applyPreferredLanguage(preferred);
|
|
70
|
+
}
|
|
71
|
+
else if (!this._userSelected && !this._active) {
|
|
72
|
+
const forced = this.pickForcedTrack(tracks);
|
|
73
|
+
if (forced)
|
|
74
|
+
this.selectById(forced.id);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
setActiveTextTrack(id) {
|
|
78
|
+
// An explicit app choice; stop auto-selecting forced tracks.
|
|
79
|
+
this._userSelected = true;
|
|
80
|
+
this.selectById(id);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Selects the track best matching the preferred language(s), or clears the
|
|
84
|
+
* selection when the preference is null or nothing matches.
|
|
85
|
+
*/
|
|
86
|
+
applyPreferredLanguage(preferred) {
|
|
87
|
+
const target = pickPreferredTextTrack(this._tracks, preferred);
|
|
88
|
+
this.setActiveTextTrack(target?.id ?? null);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Applies a selection by id (null clears it) without marking it as an
|
|
92
|
+
* explicit user choice. Shared by setActiveTextTrack and forced auto-select.
|
|
93
|
+
*/
|
|
94
|
+
selectById(id) {
|
|
95
|
+
const next = id == null ? null : this._tracks.find((t) => t.id === id);
|
|
96
|
+
if (id != null && !next)
|
|
97
|
+
return; // unknown id is a no-op
|
|
98
|
+
const target = next ?? null;
|
|
99
|
+
if (target?.id === this._active?.id)
|
|
100
|
+
return;
|
|
101
|
+
const previous = this._active;
|
|
102
|
+
this.clearDomTrack();
|
|
103
|
+
this.loadAbort?.abort();
|
|
104
|
+
this.loadAbort = null;
|
|
105
|
+
this._active = target;
|
|
106
|
+
this.dispatch('activeTextTrackChange', {
|
|
107
|
+
previous,
|
|
108
|
+
current: target,
|
|
109
|
+
});
|
|
110
|
+
if (target)
|
|
111
|
+
this.startLoad(target);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The forced track to auto-select, or null. Prefers the default track's
|
|
115
|
+
* language, else the first forced track.
|
|
116
|
+
*/
|
|
117
|
+
pickForcedTrack(tracks) {
|
|
118
|
+
const forced = tracks.filter((t) => t.forced);
|
|
119
|
+
if (forced.length === 0)
|
|
120
|
+
return null;
|
|
121
|
+
const defaultLang = tracks.find((t) => t.default)?.language;
|
|
122
|
+
if (defaultLang != null) {
|
|
123
|
+
const match = forced.find((t) => t.language === defaultLang);
|
|
124
|
+
if (match)
|
|
125
|
+
return match;
|
|
126
|
+
}
|
|
127
|
+
return forced[0];
|
|
128
|
+
}
|
|
129
|
+
suspend() {
|
|
130
|
+
this.loadAbort?.abort();
|
|
131
|
+
this.loadAbort = null;
|
|
132
|
+
this.clearDomTrack();
|
|
133
|
+
}
|
|
134
|
+
resume() {
|
|
135
|
+
// Rebuild only when an active selection exists and it isn't already
|
|
136
|
+
// rendering (clearDomTrack/suspend nulls _domTrack; setActiveTextTrack
|
|
137
|
+
// sets it).
|
|
138
|
+
if (!this._active || this._domTrack)
|
|
139
|
+
return;
|
|
140
|
+
this.startLoad(this._active);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Cancels any in-flight load, clears the DOM TextTrack, and resets state.
|
|
144
|
+
* Called by the host when the underlying media is unloaded.
|
|
145
|
+
*/
|
|
146
|
+
dispose() {
|
|
147
|
+
super.dispose();
|
|
148
|
+
this.preferredLanguageSub?.();
|
|
149
|
+
this.loadAbort?.abort();
|
|
150
|
+
this.loadAbort = null;
|
|
151
|
+
this.clearDomTrack();
|
|
152
|
+
this._tracks = [];
|
|
153
|
+
this._active = null;
|
|
154
|
+
}
|
|
155
|
+
startLoad(track) {
|
|
156
|
+
const media = this.deps.media;
|
|
157
|
+
// Without a media element there's nowhere to render cues and no
|
|
158
|
+
// playhead to drive segment selection, so skip fetching entirely.
|
|
159
|
+
// The active-selection state still surfaces via events.
|
|
160
|
+
if (!media)
|
|
161
|
+
return;
|
|
162
|
+
const abort = new Abort();
|
|
163
|
+
this.loadAbort = abort;
|
|
164
|
+
// Create the DOM TextTrack up front so cues render incrementally as
|
|
165
|
+
// segments arrive rather than after the whole playlist loads.
|
|
166
|
+
const dom = this.ensureDomTrack(media, track);
|
|
167
|
+
const CueCtor = getVttCueConstructor();
|
|
168
|
+
// Adjacent HLS caption segments commonly repeat the boundary cue in
|
|
169
|
+
// both segments (packagers do this so a client that only fetches one
|
|
170
|
+
// segment still renders the overlapping cue). Track seen keys per
|
|
171
|
+
// active load so we don't push the same cue twice.
|
|
172
|
+
const seen = new Set();
|
|
173
|
+
loadWebVttCues(track.uri, {
|
|
174
|
+
abort,
|
|
175
|
+
requestInit: this.deps.requestInit,
|
|
176
|
+
variables: track.variables,
|
|
177
|
+
getCurrentTime: () => media.currentTime,
|
|
178
|
+
onCues: (cues) => {
|
|
179
|
+
if (abort.aborted())
|
|
180
|
+
return;
|
|
181
|
+
if (CueCtor)
|
|
182
|
+
this.appendCues(dom, CueCtor, cues, seen);
|
|
183
|
+
},
|
|
184
|
+
}).catch((error) => {
|
|
185
|
+
if (abort.aborted())
|
|
186
|
+
return;
|
|
187
|
+
this.dispatch('textTrackError', {
|
|
188
|
+
track,
|
|
189
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
ensureDomTrack(media, track) {
|
|
194
|
+
const dom = media.addTextTrack(track.kind, track.label, track.language ?? undefined);
|
|
195
|
+
dom.mode = 'showing';
|
|
196
|
+
this._domTrack = dom;
|
|
197
|
+
return dom;
|
|
198
|
+
}
|
|
199
|
+
appendCues(dom, CueCtor, cues, seen) {
|
|
200
|
+
for (const cue of cues) {
|
|
201
|
+
const key = `${cue.startTime}|${cue.endTime}|${cue.text}`;
|
|
202
|
+
if (seen.has(key))
|
|
203
|
+
continue;
|
|
204
|
+
seen.add(key);
|
|
205
|
+
const domCue = new CueCtor(cue.startTime, cue.endTime, cue.text);
|
|
206
|
+
if (cue.id != null)
|
|
207
|
+
domCue.id = cue.id;
|
|
208
|
+
// Apply the configured cue layout style (e.g. the default `size: 90`
|
|
209
|
+
// inset so long lines don't clip in fullscreen, which `::cue` CSS
|
|
210
|
+
// cannot fix). Only VTTCues carry these properties.
|
|
211
|
+
const cueStyle = this.deps.cueStyle?.value;
|
|
212
|
+
if (cueStyle && isVttCue(domCue)) {
|
|
213
|
+
applyVttCueStyle(domCue, cueStyle);
|
|
214
|
+
}
|
|
215
|
+
dom.addCue(domCue);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
clearDomTrack() {
|
|
219
|
+
const dom = this._domTrack;
|
|
220
|
+
if (!dom)
|
|
221
|
+
return;
|
|
222
|
+
dom.mode = 'disabled';
|
|
223
|
+
// Best-effort: remove any cues we added so a future activation starts
|
|
224
|
+
// from a clean slate. Some platforms recreate the underlying TextTrack
|
|
225
|
+
// when the source changes; this is defensive.
|
|
226
|
+
if (dom.cues) {
|
|
227
|
+
const all = Array.from(dom.cues);
|
|
228
|
+
for (const cue of all)
|
|
229
|
+
dom.removeCue(cue);
|
|
230
|
+
}
|
|
231
|
+
this._domTrack = null;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function getVttCueConstructor() {
|
|
235
|
+
const g = globalThis;
|
|
236
|
+
return g.VTTCue ?? g.TextTrackCue ?? null;
|
|
237
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Maybe, ReadonlyAbort, RequestInitOptions } from '@amazon/vinyl-util';
|
|
2
|
+
import { type WebVttCue } from './parseWebVtt';
|
|
3
|
+
/**
|
|
4
|
+
* Seconds ahead of the playhead to keep cues buffered. Mirrors the media
|
|
5
|
+
* pipeline's default HLS `minBufferTime` so captions stay in step with the
|
|
6
|
+
* audio/video buffer.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_TEXT_LOOK_AHEAD = 10;
|
|
9
|
+
/**
|
|
10
|
+
* Seconds behind the playhead to keep cues buffered. Small window so that a
|
|
11
|
+
* short rewind (e.g. accidental skip-back) doesn't force a refetch.
|
|
12
|
+
*/
|
|
13
|
+
export declare const DEFAULT_TEXT_LOOK_BEHIND = 2;
|
|
14
|
+
export interface LoadWebVttCuesOptions {
|
|
15
|
+
readonly abort?: Maybe<ReadonlyAbort>;
|
|
16
|
+
readonly requestInit?: Maybe<RequestInitOptions>;
|
|
17
|
+
/**
|
|
18
|
+
* HLS EXT-X-DEFINE variables to make available for `IMPORT` and for
|
|
19
|
+
* substitution of segment URIs when loading from an HLS media playlist.
|
|
20
|
+
*/
|
|
21
|
+
readonly variables?: Maybe<Readonly<Record<string, string>>>;
|
|
22
|
+
/**
|
|
23
|
+
* Invoked with each batch of cues as soon as they are parsed. Called once
|
|
24
|
+
* per HLS segment, or once for a direct `.vtt` document.
|
|
25
|
+
*/
|
|
26
|
+
readonly onCues: (cues: readonly WebVttCue[]) => void;
|
|
27
|
+
/**
|
|
28
|
+
* Returns the current playback time (seconds on the presentation
|
|
29
|
+
* timeline). Used to fetch caption segments in a window around the
|
|
30
|
+
* playhead rather than draining the entire playlist up front.
|
|
31
|
+
*/
|
|
32
|
+
readonly getCurrentTime: () => number;
|
|
33
|
+
/**
|
|
34
|
+
* Seconds ahead of the playhead to keep buffered. Default 10s.
|
|
35
|
+
*/
|
|
36
|
+
readonly lookAhead?: Maybe<number>;
|
|
37
|
+
/**
|
|
38
|
+
* Seconds behind the playhead to keep buffered. Default 2s.
|
|
39
|
+
*/
|
|
40
|
+
readonly lookBehind?: Maybe<number>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Loads WebVTT cues from a URI, streaming them by playhead position.
|
|
44
|
+
*
|
|
45
|
+
* Two URI shapes are accepted:
|
|
46
|
+
* - Direct `.vtt` document: fetched once and delivered via `onCues`.
|
|
47
|
+
* - HLS media playlist (`.m3u8`): the playlist is parsed, then segments
|
|
48
|
+
* whose time range overlaps the buffer window around `getCurrentTime()`
|
|
49
|
+
* are fetched (closest to the playhead first), one at a time. Each
|
|
50
|
+
* segment's cues are delivered via `onCues` as it is parsed.
|
|
51
|
+
*
|
|
52
|
+
* Cue start/end times are expected to already be on the presentation
|
|
53
|
+
* timeline (Shaka packager's default WebVTT output), so segments are joined
|
|
54
|
+
* without offset.
|
|
55
|
+
*
|
|
56
|
+
* The returned promise resolves once every segment has been fetched, or the
|
|
57
|
+
* abort signal fires. Fetch failures reject the promise.
|
|
58
|
+
*/
|
|
59
|
+
export declare function loadWebVttCues(uri: string, options: LoadWebVttCuesOptions): Promise<void>;
|
|
60
|
+
//# sourceMappingURL=SidecarTextTrackLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidecarTextTrackLoader.d.ts","sourceRoot":"","sources":["../../../../src/text/SidecarTextTrackLoader.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACR,KAAK,EACL,aAAa,EACb,kBAAkB,EACrB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAE3D;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAA;AAEzC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAA;AAQzC,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAA;IAEhD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAE5D;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,KAAK,IAAI,CAAA;IAErD;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,MAAM,CAAA;IAErC;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IAElC;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;CACtC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,cAAc,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,qBAAqB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAsCf"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { requestWithRetry, resolveUrl, sleep } from '@amazon/vinyl-util';
|
|
6
|
+
import { parseMediaPlaylist } from '@amazon/vinyl-hls-parser';
|
|
7
|
+
import { parseWebVtt } from './parseWebVtt';
|
|
8
|
+
/**
|
|
9
|
+
* Seconds ahead of the playhead to keep cues buffered. Mirrors the media
|
|
10
|
+
* pipeline's default HLS `minBufferTime` so captions stay in step with the
|
|
11
|
+
* audio/video buffer.
|
|
12
|
+
*/
|
|
13
|
+
export const DEFAULT_TEXT_LOOK_AHEAD = 10;
|
|
14
|
+
/**
|
|
15
|
+
* Seconds behind the playhead to keep cues buffered. Small window so that a
|
|
16
|
+
* short rewind (e.g. accidental skip-back) doesn't force a refetch.
|
|
17
|
+
*/
|
|
18
|
+
export const DEFAULT_TEXT_LOOK_BEHIND = 2;
|
|
19
|
+
/**
|
|
20
|
+
* Polling interval, in seconds, when no segment is currently in the buffer
|
|
21
|
+
* window. Short enough to feel responsive after a seek without spinning.
|
|
22
|
+
*/
|
|
23
|
+
const IDLE_POLL_SECONDS = 0.25;
|
|
24
|
+
/**
|
|
25
|
+
* Loads WebVTT cues from a URI, streaming them by playhead position.
|
|
26
|
+
*
|
|
27
|
+
* Two URI shapes are accepted:
|
|
28
|
+
* - Direct `.vtt` document: fetched once and delivered via `onCues`.
|
|
29
|
+
* - HLS media playlist (`.m3u8`): the playlist is parsed, then segments
|
|
30
|
+
* whose time range overlaps the buffer window around `getCurrentTime()`
|
|
31
|
+
* are fetched (closest to the playhead first), one at a time. Each
|
|
32
|
+
* segment's cues are delivered via `onCues` as it is parsed.
|
|
33
|
+
*
|
|
34
|
+
* Cue start/end times are expected to already be on the presentation
|
|
35
|
+
* timeline (Shaka packager's default WebVTT output), so segments are joined
|
|
36
|
+
* without offset.
|
|
37
|
+
*
|
|
38
|
+
* The returned promise resolves once every segment has been fetched, or the
|
|
39
|
+
* abort signal fires. Fetch failures reject the promise.
|
|
40
|
+
*/
|
|
41
|
+
export async function loadWebVttCues(uri, options) {
|
|
42
|
+
const { abort, requestInit, variables, onCues, getCurrentTime } = options;
|
|
43
|
+
const lookAhead = options.lookAhead ?? DEFAULT_TEXT_LOOK_AHEAD;
|
|
44
|
+
const lookBehind = options.lookBehind ?? DEFAULT_TEXT_LOOK_BEHIND;
|
|
45
|
+
const init = requestInit ?? undefined;
|
|
46
|
+
if (looksLikeMediaPlaylist(uri)) {
|
|
47
|
+
return streamMediaPlaylist({
|
|
48
|
+
uri,
|
|
49
|
+
init,
|
|
50
|
+
abort,
|
|
51
|
+
variables: variables ?? undefined,
|
|
52
|
+
onCues,
|
|
53
|
+
getCurrentTime,
|
|
54
|
+
lookAhead,
|
|
55
|
+
lookBehind,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const response = await requestWithRetry(uri, init, { abort });
|
|
59
|
+
const contentType = (response.headers.get('content-type') ?? '').toLowerCase();
|
|
60
|
+
const body = await response.text();
|
|
61
|
+
if (contentType.includes('mpegurl') || body.startsWith('#EXTM3U')) {
|
|
62
|
+
return streamMediaPlaylistText({
|
|
63
|
+
text: body,
|
|
64
|
+
baseUrl: response.url || uri,
|
|
65
|
+
init,
|
|
66
|
+
abort,
|
|
67
|
+
variables: variables ?? undefined,
|
|
68
|
+
onCues,
|
|
69
|
+
getCurrentTime,
|
|
70
|
+
lookAhead,
|
|
71
|
+
lookBehind,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
const cues = parseWebVtt(body).cues;
|
|
75
|
+
if (cues.length > 0)
|
|
76
|
+
onCues(cues);
|
|
77
|
+
}
|
|
78
|
+
function looksLikeMediaPlaylist(uri) {
|
|
79
|
+
const path = uri.split(/[?#]/)[0];
|
|
80
|
+
return path.toLowerCase().endsWith('.m3u8');
|
|
81
|
+
}
|
|
82
|
+
async function streamMediaPlaylist(ctx) {
|
|
83
|
+
const response = await requestWithRetry(ctx.uri, ctx.init, {
|
|
84
|
+
abort: ctx.abort,
|
|
85
|
+
});
|
|
86
|
+
const text = await response.text();
|
|
87
|
+
return streamMediaPlaylistText({
|
|
88
|
+
...ctx,
|
|
89
|
+
text,
|
|
90
|
+
baseUrl: response.url || ctx.uri,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
async function streamMediaPlaylistText(ctx) {
|
|
94
|
+
const playlist = parseMediaPlaylist(ctx.text, ctx.variables);
|
|
95
|
+
const segments = playlist.segments;
|
|
96
|
+
// Precompute each segment's [start, end] on the presentation timeline.
|
|
97
|
+
const ranges = [];
|
|
98
|
+
let cursor = 0;
|
|
99
|
+
for (const seg of segments) {
|
|
100
|
+
ranges.push({ start: cursor, end: cursor + seg.duration });
|
|
101
|
+
cursor += seg.duration;
|
|
102
|
+
}
|
|
103
|
+
const pending = new Set(segments.map((_, i) => i));
|
|
104
|
+
while (pending.size > 0 && !ctx.abort?.aborted()) {
|
|
105
|
+
const idx = pickInWindow(pending, ranges, ctx);
|
|
106
|
+
if (idx < 0) {
|
|
107
|
+
await sleep(IDLE_POLL_SECONDS, ctx.abort).catch(() => { });
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
pending.delete(idx);
|
|
111
|
+
const segUri = resolveUrl(segments[idx].uri, ctx.baseUrl);
|
|
112
|
+
const res = await requestWithRetry(segUri, ctx.init, {
|
|
113
|
+
abort: ctx.abort,
|
|
114
|
+
});
|
|
115
|
+
const body = await res.text();
|
|
116
|
+
const cues = parseWebVtt(body).cues;
|
|
117
|
+
if (cues.length > 0)
|
|
118
|
+
ctx.onCues(cues);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Selects the pending segment closest to the playhead whose time range
|
|
123
|
+
* overlaps [now - lookBehind, now + lookAhead]. Returns -1 when no pending
|
|
124
|
+
* segment intersects the window — the caller should sleep and re-check.
|
|
125
|
+
*/
|
|
126
|
+
function pickInWindow(pending, ranges, ctx) {
|
|
127
|
+
const now = ctx.getCurrentTime();
|
|
128
|
+
const windowStart = now - ctx.lookBehind;
|
|
129
|
+
const windowEnd = now + ctx.lookAhead;
|
|
130
|
+
let best = -1;
|
|
131
|
+
let bestDist = Number.POSITIVE_INFINITY;
|
|
132
|
+
for (const idx of pending) {
|
|
133
|
+
const r = ranges[idx];
|
|
134
|
+
if (r.end < windowStart || r.start > windowEnd)
|
|
135
|
+
continue;
|
|
136
|
+
const mid = (r.start + r.end) / 2;
|
|
137
|
+
const dist = Math.abs(mid - now);
|
|
138
|
+
if (dist < bestDist) {
|
|
139
|
+
bestDist = dist;
|
|
140
|
+
best = idx;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return best;
|
|
144
|
+
}
|